Resolución del problema de inestabilidad del servicio de Kagi.com
- Investigando - Después del despliegue surgió un problema y el equipo estuvo trabajando en resolverlo. (12 de enero, 16:45 UTC)
- Monitoreando - Se revirtió el cambio de configuración que se estima fue la causa del problema y se sigue monitoreando que el servicio vuelva a la normalidad. (12 de enero, 18:30 UTC)
- Actualización - Para recuperar completamente la estabilidad, se suspenderá temporalmente el tráfico y se redirigirá a los usuarios a esta página. Se compartirán más detalles conforme avance la situación mientras el servicio se restablece de manera controlada. (12 de enero, 20:26 UTC)
- Monitoreando - El tráfico ya fue restablecido y se sigue monitoreando que el servicio vuelva completamente a la normalidad. (12 de enero, 21:14 UTC)
- Resuelto - Todos los servicios están operando con normalidad. Agradecen a los usuarios por esperar mientras se resolvía el problema.
Análisis posterior
- Zac, líder técnico de Kagi, compartió un análisis posterior detallado sobre la interrupción del servicio de la semana pasada.
- En respuesta a este incidente, el ingeniero senior Seth y el ingeniero de DevOps Luan trabajaron juntos.
- Hubo actores que abusaron del servicio y explotaron cuellos de botella en la infraestructura; se tomaron medidas inmediatas de mitigación y se están realizando mejoras en varias áreas del código y de la comunicación.
Cómo ocurrió el incidente
- Alrededor de las 5:30 p. m. del 12 de enero, detectaron un problema en la infraestructura a través del monitoreo interno y de reportes de usuarios.
- La naturaleza del problema provocaba cargas lentas o timeout de página para usuarios en distintas regiones.
- Resolver el problema tomó bastante tiempo, y aquí explican el contexto, el desarrollo de los hechos y los planes a futuro.
Proceso técnico de resolución
- Al principio, el problema coincidió casualmente con una actualización de recursos de RAM adicional en una VM.
- El monitoreo reportó alta latencia y problemas en el pool de conexiones a la base de datos de la aplicación.
- El pool de conexiones llegó a saturarse, lo que significaba que la cantidad total de conexiones superaba el límite máximo configurado.
- Mientras evaluaban la salud interna de la base de datos y el rendimiento de las consultas, probaron reemplazar algunas instancias para ver si eso ayudaba a reducir la congestión.
- Como parecía que reemplazar parte de las instancias ayudaba, pausaron temporalmente el tráfico de usuarios para restablecer por completo todos los pools de conexiones de una sola vez.
- Al revisar el estado de la base de datos, quedó claro que la causa raíz era una alta contención sobre filas de la tabla de usuarios.
- Esa contención incrementó bruscamente la latencia de escritura, generó backpressure sobre el pool de conexiones de la aplicación y finalmente agotó todas las conexiones disponibles.
- Hasta ahora, Kagi había estado usando la base de datos de un solo núcleo más barata disponible en GCP, lo que implicaba el riesgo de dejar la base de datos inutilizada con facilidad.
- Identificaron a los actores maliciosos y encontraron cuentas creadas en menos de 24 horas, además de una sola cuenta de usuario que realizó más de 60,000 búsquedas en poco tiempo.
- Se eliminó la capacidad de búsqueda de esa cuenta y se publicó un hotfix que desactiva la escritura específica que causó el problema.
- Para la medianoche, el problema quedó completamente resuelto, y siguen monitoreando de cerca cualquier señal de que esos actores regresen.
Próximas acciones
- Aprendieron mucho de este incidente y ya están en marcha planes inmediatos para reforzar más el sistema y mejorar el proceso de comunicación durante incidentes.
- Primero, reconocen que las actualizaciones de la página de estado no fueron lo suficientemente rápidas.
- Planean migrar a una plataforma de página de estado que permita exponer más fácilmente a los usuarios el monitoreo interno automatizado, para que puedan ver en tiempo real la salud de la plataforma.
- Están mitigando directamente las consultas problemáticas y ejecutando pruebas de carga para ver si existen fallas similares adicionales.
- También instalarán monitoreo adicional para apuntar más rápido al lugar correcto dentro de la infraestructura y evitar perder tiempo siguiendo señales equivocadas como ocurrió esta vez.
- Están reforzando los sistemas que detectan este tipo de abuso, y como este no solo afecta el rendimiento sino que también genera costos directos, necesitan establecer límites automatizados para hacerlos cumplir.
- Las nuevas restricciones ya estaban activas al momento de esta publicación, y seguirán monitoreando su impacto y ajustándolas según sea necesario.
- Si alguien cree que su acceso a Kagi fue bloqueado por error, piden que se comunique a support@kagi.com.
Opinión de GN⁺
- Kagi sufrió un problema de latencia de escritura causado por contención de filas en la tabla de usuarios, lo que generó backpressure en el pool de conexiones de la aplicación y terminó provocando la caída del servicio.
- Este problema fue consecuencia del riesgo asociado a que Kagi utilizara la base de datos de un solo núcleo más barata de GCP.
- El equipo de Kagi mostró su intención de mejorar la estabilidad y la transparencia del servicio mediante acciones como reforzar el sistema, mejorar la comunicación con los usuarios y establecer límites automatizados para prevenir abusos. Estos esfuerzos reflejan la voluntad de Kagi de ofrecer un servicio más confiable a sus usuarios.
1 comentarios
Opiniones en Hacker News
Opiniones sobre el incidente ocurrido al mismo tiempo que una actualización de infraestructura
Experiencia de un usuario con la página de estado de Kagi
Comentario que comparte una experiencia personal
Comentario sobre la experiencia de las startups
Comentario sobre la observabilidad de los sistemas internos
Opinión de un usuario de pago sobre la confiabilidad de Kagi
Comentario sobre el scraper que provocó la caída del servicio
Comentario sobre la experiencia de uso de Kagi y el análisis posterior al incidente
Comentario sobre la base de datos de un solo núcleo usada en GCP
Comentario sobre el scraping automatizado