Resolução do problema de instabilidade do serviço Kagi.com
- Investigando - Após o deploy, surgiu um problema e a equipe está trabalhando na correção. (12 de janeiro, 16:45 UTC)
- Monitorando - A alteração de configuração considerada a provável causa do problema foi revertida, e o retorno do serviço ao normal está sendo monitorado continuamente. (12 de janeiro, 18:30 UTC)
- Atualização - Para restaurar totalmente a estabilidade, o tráfego será interrompido temporariamente e os usuários serão redirecionados para esta página. Mais detalhes serão fornecidos conforme a situação evoluir enquanto o serviço for restaurado de forma controlada. (12 de janeiro, 20:26 UTC)
- Monitorando - O tráfego foi restaurado, e o retorno completo do serviço ao normal continua sendo monitorado. (12 de janeiro, 21:14 UTC)
- Resolvido - Todos os serviços estão operando normalmente. Agradecemos aos usuários pela paciência enquanto o problema era resolvido.
Análise pós-incidente
- Zac, líder técnico da Kagi, compartilhou uma análise detalhada do incidente de indisponibilidade do serviço da semana passada.
- Em resposta a esse incidente, o engenheiro sênior Seth e o engenheiro de DevOps Luan trabalharam juntos.
- Houve agentes que abusaram do serviço e exploraram gargalos da infraestrutura, e medidas imediatas de mitigação foram tomadas, enquanto melhorias em várias áreas do código e da comunicação estão em andamento.
Cronologia do incidente
- Por volta das 17h30 de 12 de janeiro, foi identificado um problema de infraestrutura por meio do monitoramento interno e de relatos de usuários.
- A natureza do problema causava carregamento lento ou timeout de páginas para usuários em várias regiões.
- A resolução levou um tempo considerável, e são explicados o contexto, o andamento e os próximos passos.
Processo técnico de resolução
- No início, o problema aconteceu por coincidência ao mesmo tempo em que os recursos extras de RAM da VM eram ampliados.
- O monitoramento reportou alta latência e problemas no pool de conexões com o banco de dados da aplicação.
- O pool de conexões chegou à saturação, o que significava que o número total de conexões excedia o limite máximo configurado.
- Enquanto a saúde interna do banco de dados e o desempenho das queries eram avaliados, algumas instâncias foram substituídas para testar o efeito de reduzir o congestionamento.
- Como a substituição de parte das instâncias pareceu ajudar, o tráfego de usuários foi pausado para redefinir completamente todos os pools de conexão de uma só vez.
- Ao analisar o estado do banco de dados, ficou claro que a alta contenção em linhas da tabela de usuários era a causa raiz.
- Essa contenção aumentou drasticamente a latência de escrita, gerando backpressure no pool de conexões da aplicação e, por fim, esgotando todas as conexões disponíveis.
- Até então, a Kagi vinha usando o banco de dados single-core mais barato disponível no GCP, o que carregava o risco de paralisar facilmente o banco.
- Após identificar os agentes maliciosos, foram encontradas contas criadas em menos de 24 horas e uma única conta de usuário que realizou mais de 60.000 buscas em pouco tempo.
- A funcionalidade de busca dessa conta foi removida, e foi publicado um hotfix para desativar a escrita específica que causava o problema.
- Até a meia-noite, o problema foi totalmente resolvido, e continua havendo monitoramento atento de sinais de retorno desses agentes.
Próximas ações
- Muito foi aprendido com esse incidente, e já estão em andamento planos imediatos para fortalecer ainda mais o sistema e melhorar o processo de comunicação em casos de incidentes.
- Primeiro, foi reconhecido que as atualizações da página de status não foram rápidas o suficiente.
- Haverá migração para uma plataforma de página de status que permita expor com mais facilidade o monitoramento interno automatizado aos usuários, para que eles possam acompanhar em tempo real a saúde da plataforma.
- Estão sendo executadas ações para mitigar diretamente as queries problemáticas e testes de carga para verificar se existem outras falhas semelhantes.
- Também será instalado monitoramento adicional para apontar mais rapidamente para os locais corretos na infraestrutura, evitando desperdício de tempo seguindo sinais incorretos como aconteceu desta vez.
- O sistema de detecção desse tipo de abuso está sendo reforçado e, como isso gera impacto não apenas em desempenho, mas também diretamente em custos, é necessário definir limites automatizados para sua aplicação.
- Os novos limites já estavam em vigor no momento desta publicação, e seu impacto será monitorado, com ajustes contínuos conforme necessário.
- Caso alguém acredite que o acesso à Kagi foi bloqueado por engano, é solicitado que entre em contato com support@kagi.com.
Opinião do GN⁺
- A Kagi enfrentou um problema de latência de escrita causado por contenção em linhas da tabela de usuários, o que gerou backpressure no pool de conexões da aplicação e levou à indisponibilidade do serviço.
- Esse problema foi resultado do risco envolvido no uso, pela Kagi, do banco de dados single-core mais barato do GCP.
- Com esse incidente, a equipe da Kagi demonstrou esforço para aumentar a estabilidade e a transparência do serviço ao fortalecer o sistema, melhorar a comunicação com os usuários e definir limites automatizados para evitar abusos. Esses esforços refletem o compromisso da Kagi em oferecer um serviço mais confiável aos usuários.
1 comentários
Comentários do Hacker News
Opinião sobre o incidente ter ocorrido ao mesmo tempo que o upgrade de infraestrutura
Experiência de um usuário com a página de status da Kagi
Comentário compartilhando experiência pessoal
Comentário sobre a experiência de startups
Comentário sobre observabilidade dos sistemas internos
Opinião de um usuário pagante sobre a confiabilidade da Kagi
Comentário sobre o scraper que causou a indisponibilidade
Comentário sobre a experiência de uso da Kagi e a análise posterior ao incidente
Comentário sobre o banco de dados single-core usado no GCP
Comentário sobre scraping automatizado