Implementa el método Queue
Golang
¿Por qué quieres cambiar y estás considerando otras empresas?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿Por qué decidiste comunicarte con 2GIS? ¿Qué te atrajo de la empresa o de una vacante específica?
¿Alguna vez has trabajado con acceso concurrente a datos en una base de datos? ¿Qué mecanismos como transacciones y bloqueos utilizaste? ¿Existen formas de resolver este problema sin involucrar la base de datos?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿Cómo se maneja esto en el código?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr contiene ip:port di un'istanza specifica func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs contiene gli indirizzi di tutte le istanze bilanciate 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 }
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿Hay programación orientada a objetos en Go? Si es así, ¿cómo se implementa; si no, ¿por qué?
¿Qué es lo más importante para ti en el trabajo?
¿Qué devuelve la lectura de un canal cerrado?
¿Cómo organizaste la escalabilidad y con qué arquitecturas de microservicios has trabajado?
¿Cuándo ocurre una fuga de goroutines?
¿Cómo implementar el método Status para obtener el estado de la tarea por ID?
¿Qué le sucede a la programa si ocurre un pánico en una goroutine separada?
¿En qué se diferencia sync.Mutex de sync.RWMutex?
Describe tu proceso de desarrollo y despliegue de un nuevo servicio: desde la recopilación de requisitos hasta el despliegue en entornos de desarrollo y prueba.
¿Cómo se realizó el despliegue de los servicios?
Implementa el método Queue