Sobes.tech

Golang

Qual é a carga máxima em pedidos por segundo que o serviço de maior carga tratou? Está correto que seja até 5–8 mil pedidos por segundo?

118

// código para a função best() // com tratamento de erro para quando não há backend disponível

117

Com que bancos de dados e outros sistemas de armazenamento de dados trabalhou?

116

// código para a função best() // com tratamento de erro para quando não há backend disponível

111

Em que direção estaria interessado em se desenvolver em termos de tarefas e vetor de carreira?

108

Como limitar o número de goroutines para que não mais de 'threads' métodos de Process sejam executados simultaneamente? Quem irá retirar tarefas do canal?

106

Por que está considerando novas ofertas e por que deixou sua empresa anterior?

104

// código para a função best() // com tratamento de erro para quando não há backend disponível

94

// código para a função best() // com tratamento de erro para quando não há backend disponível

92

Quem lê o canal resultante e onde escreve o resultado para que o método Status possa acessá-lo?

90

// código para a função best() // com tratamento de erro para quando não há backend disponível

90

// código para a função best() // com tratamento de erro para quando não há backend disponível

90

Em quantos hosts ou instâncias o serviço operava? Quantos containers foram lançados?

88

Como implementar o método Status para obter o estado da tarefa por ID?

72

type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr contém ip:port de uma instância específica func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs contêm os endereços de todas as instâncias balanceáveis func NewBalancer(addrs []string) *Balancer { data := make([]*backentry,len(addrs)) for i,addr := range addrs{ data[i] = &backentry{ backend: NewBackend(addr), inflight: 0, } } return &Balancer{backends:data} } func(b *Balancer)Invoke(ctx context.Context, req Request) (Response, error){ b.mu.Lock() entry := b.best() atomic.AddInt64(&entry.inflight,1) b.mu.Unlock() defer atomic.AddInt64(&entry.inflight,-1) return entry.backend.Invoke(ctx,req) } func(b *Balancer) best() *backentry{ var best *backentry for _,entry := b.backends{ if best == nil || atomic.LoadInt64(&entry.inflight) < atomic.LoadInt64(&best.inflight){ best = entry } } return best }

68

// código para a função best() // com tratamento de erro para quando não há backend disponível

67

// código para a função best() // com tratamento de erro para quando não há backend disponível

61

// procurando o melhor -- ??? // se não encontrado, compara inflight

50
/11