Los requisitos: tener una solución práctica que funcione para la nube o cualquier tipo de entorno donde no haya acceso a equilibradores de carga de hardware, protocolos BGP y todo eso.
Se desconoce el número de solicitud de ingresos de una aplicación, pero debe ser lo suficientemente alto como para satisfacer una mayor expectativa de carga sin temor.
Busquemos una aplicación con una naturaleza de carga similar, por ejemplo, la tienda de registro y la aplicación de búsqueda. Encontré uno .
Que quieren ellos:
- Balancear la carga entre colectores
- Ofrecer tolerancia a fallas, lo que nos permite continuar ingiriendo datos si uno de los recolectores muere o tiene problemas
- Escale horizontalmente con el crecimiento en nuestros volúmenes de registro
¿Qué intentaron y aprendieron sobre ELB?
- No funciona como se esperaba
- Problemas de latencia debido al aumento de carga
- No hay suficiente instalación de monitoreo
- Demasiadas limitaciones (número de puertos y protocolos abiertos)
¿Por qué eligieron con Route53:
- "Round robin es un equilibrio de carga bastante básico, pero nos funciona bien desde el punto de vista de la eficiencia"
- "Aprovechamos las comprobaciones de estado de conmutación por error de la ruta 53".
- "Si hay un problema con un recolector, Route 53 lo elimina automáticamente del servicio; nuestros clientes no verán ningún impacto".
- No se requiere precalentamiento con la ruta 53
La ruta 53 resultó ser la mejor manera para que Loggly aprovechara nuestros recolectores de alto rendimiento dados nuestros enormes volúmenes de registros, variaciones impredecibles y crecimiento constante en nuestro negocio. Se alinea con los propósitos centrales de los recolectores: recopilar datos a la velocidad de la línea de red con pérdida cero, y nos permite beneficiarnos de la elasticidad de todos los servicios de AWS que utilizamos en Loggly.
Ese ejemplo en particular muestra que en algunos escenarios (recopilador de registros, servicio de anuncios o similar) el balanceador de carga es redundante y la "solución round robin de verificación de estado de DNS" hace su trabajo muy bien.
Veamos qué dice AWS sobre la conmutación por error de DNS:
Con DNS Failover, Route 53 puede detectar una interrupción de su sitio web y redirigir a sus usuarios finales a ubicaciones alternativas o de respaldo que usted especifique. Route 53 DNS Failover se basa en comprobaciones de estado, realizando regularmente solicitudes de Internet a los puntos finales de sus aplicaciones desde múltiples ubicaciones en todo el mundo, para determinar si cada punto final de su aplicación está activo o inactivo.
Esa técnica también hace que el ELB (no requerido, solo por una nota) sea más robusto, nuevamente se basa en RR + Health Check:
Route 53 DNS Failover maneja todos estos escenarios de falla al integrarse con ELB detrás de escena. Una vez habilitado, Route 53 configura y administra automáticamente las comprobaciones de estado de los nodos ELB individuales.
Veamos ahora cómo funciona detrás de escena. La pregunta obvia es cómo lidiar con el almacenamiento en caché de DNS:
Sin embargo, el almacenamiento en caché de DNS aún puede ser un problema aquí (consulte nuestra publicación anterior donde se cubre el problema de "cola larga") si TTL no es respetado por todas las capas entre su cliente y la Ruta 53. Luego, podría aplicar una técnica de "eliminación de caché": enviar una solicitud a un dominio único
("http://<unique-id>.<your-domain>")
y definir un recurso comodín
Record "*.<your-domain>" to match it.
Algolia introdujo la "estrategia de reintento del cliente" que funciona bastante bien si su cliente (JS en su caso) puede manejar eso:
Terminamos implementando una estrategia básica de reintento en nuestros clientes API. Cada cliente API fue desarrollado para poder acceder a tres máquinas diferentes. Tres registros DNS diferentes representaban a cada usuario: USERIDID-1.algolia.io, USERID-2.algolia.io yUSERID-3.algolia.io. Nuestra primera implementación fue seleccionar aleatoriamente uno de los registros y luego volver a intentarlo con uno diferente en caso de falla.