¿Qué son las goroutines?
Golang
¿Qué es una condición de carrera y cómo lidiar con ella en Go?
¿Puedes explicar qué se entiende por el término 'contexto' en programación o desarrollo?
¿Cuál es el papel y la finalidad del contexto en el lenguaje de programación Go?
¿Cuál es la diferencia entre canales con búfer y sin búfer?
¿Cómo se pueden gestionar las goroutines y todas se ejecutan en un solo hilo?
¿Cuál era tu equipo, cuántas personas?
¿Qué significa la columna load average en la utilidad top?
¿En qué se diferencian la aplicación y las características del lenguaje de programación Go en comparación con Python?
Cuéntame sobre la notación asintótica Big O: qué es, qué tipos hay y para qué se utilizan
¿Qué métodos y enfoques utilizas para verificar la funcionalidad de tu código?
¿Por qué se necesita TCP si simplemente se pueden volver a enviar los paquetes IP en ausencia de respuesta?
¿Qué puede contarme sobre su experiencia en la integración de diferentes sistemas o servicios?
¿Cómo analizar el estado de una máquina Linux sin monitoreo, si se siente mal? ¿Cómo entender las causas de los problemas?
¿Para qué sirve la caché y el almacenamiento en caché? ¿Qué es una caché negativa?
¿Cómo se pueden usar las estructuras integradas para simular la herencia en Go?
¿Qué es el modelo GMP del planificador de Go?
¿Qué sucede si intentas leer datos de un canal que actualmente no contiene elementos?
¿Qué es la señal SIGTERM (kill -15) y por qué es mejor usarla en lugar de SIGKILL (kill -9)?
// Existe una interfaz Backend con el método Execute // Se necesita escribir un balanceador de carga // El balanceador cumple con la interfaz Backend // La tarea del balanceador es aceptar una solicitud y delegarla a uno de los backends disponibles // El balanceador contiene en sí una colección de backends // Al ejecutar una solicitud, el balanceador elige uno de los backends según algún algoritmo // // Algoritmo Least Connection, verificación de estado y recuperación automática, hacemos thread safety mediante atomic, transmisión de contexto para cancelación, umbral de errores para desconectar un backend // Request representa la solicitud de entrada para Backend. type Request struct { // Payload – datos arbitrarios de la solicitud. Payload []byte } // Response representa la respuesta de Backend. type Response struct { // Payload – datos arbitrarios de la respuesta. Payload []byte } // Backend – interfaz que define el método para ejecutar una solicitud type Backend interface { Execute(ctx context.Context, req Request) (Response, error) } type Balancer struct { backends []Backend } func NewBalancer(backends []Backend) *Balancer { return &Balancer{backends: backends} } func (b *Balancer) Execute(ctx context.Context, req Request) (Response, error) { // todo: implementar lógica del balanceador return Response{}, nil } type TestBackend struct { }