¿Con qué bases de datos u otros almacenes de datos has trabajado? ¿Cuántas solicitudes por segundo (RPS) para escritura y lectura?
Golang
¿Cuál es la carga máxima en solicitudes por segundo que ha manejado el servicio de mayor carga? ¿Es correcto que alcanza hasta 5–8 mil solicitudes por segundo?
Si te ofrecen un trabajo y lo aceptas, ¿cuánto tiempo te tomaría estar listo para comenzar a trabajar?
¿Has tenido experiencia en el desarrollo y soporte de sistemas distribuidos?
¿Con qué bases de datos y otros sistemas de almacenamiento de datos has trabajado?
¿En qué dirección estarías interesado en desarrollarte en términos de tareas y vector de carrera?
¿Cuál fue el mayor volumen de datos almacenados?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿Por qué estás considerando nuevas ofertas y por qué dejaste tu empresa anterior?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿En cuántos hosts o instancias operaba el servicio? ¿Cuántos contenedores se lanzaron?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿Quién lee el canal resultante y dónde escribe luego el resultado para que el método Status pueda acceder a él?
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
Implementa el método Queue
¿Cómo implementar el método Status para obtener el estado de la tarea por ID?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
Implementa el método Queue
// código para la función best() // con manejo de errores para cuando no hay backend disponible