1P by neo 10달전 | favorite | 댓글 1개

Kagi.com 서비스 불안정 문제 해결

  • 조사 중 - 배포 후 문제가 발생하여 팀이 해결 작업 중임. (1월 12일 16:45 UTC)
  • 모니터링 - 문제의 원인으로 추정되는 설정 변경을 되돌리고 서비스가 정상으로 돌아오는 것을 지속적으로 모니터링 중임. (1월 12일 18:30 UTC)
  • 업데이트 - 안정성을 완전히 회복하기 위해 잠시 트래픽을 중단하고 사용자를 이 페이지로 리디렉션할 예정임. 서비스에 부하를 제어된 방식으로 복원하는 동안 상황이 진행됨에 따라 추가 세부 정보를 제공할 예정임. (1월 12일 20:26 UTC)
  • 모니터링 - 트래픽이 복원되었으며 서비스가 완전히 정상으로 돌아오는 것을 계속 모니터링 중임. (1월 12일 21:14 UTC)
  • 해결됨 - 모든 서비스가 정상적으로 운영 중임. 문제 해결을 기다려준 사용자들에게 감사함을 표함.

사후 분석

  • Kagi의 기술 리더인 Zac이 지난주 서비스 중단에 대한 자세한 사후 분석을 공유함.
  • 이 사건에 대응하여 선임 엔지니어 Seth와 DevOps 엔지니어 Luan이 함께 작업함.
  • 서비스를 오용하고 인프라의 병목 현상을 악용한 행위자들이 있었으며, 즉각적인 완화 조치를 취하고 코드와 커뮤니케이션의 여러 영역에서 개선 작업을 진행 중임.

사건 발생 경과

  • 1월 12일 오후 5시 30분경, 내부 모니터링과 사용자의 문제 보고를 통해 인프라 문제가 발생한 것을 인지함.
  • 문제의 성격은 다양한 지역의 사용자들에게 느린 로딩 또는 페이지 타임아웃을 일으킴.
  • 문제 해결에 상당한 시간이 걸렸으며, 배경과 진행 상황, 앞으로의 계획에 대해 설명함.

기술적 문제 해결 과정

  • 처음에는 우연히 VM에 추가 RAM 리소스를 업그레이드하는 동시에 문제가 발생함.
  • 모니터링은 높은 지연 시간과 애플리케이션의 데이터베이스 연결 풀 문제를 보고함.
  • 연결 풀이 포화 상태에 이르렀고, 이는 전체 연결 수가 설정된 최대 연결 한도를 초과함을 의미함.
  • 데이터베이스의 내부 건강과 쿼리 성능을 평가하는 동안, 몇몇 인스턴스를 교체하여 혼잡을 줄이는 효과를 시험함.
  • 인스턴스 일부를 교체하는 것이 도움이 되는 것으로 보여, 모든 연결 풀을 한 번에 완전히 재설정하기 위해 사용자 트래픽을 일시 중지함.
  • 데이터베이스 상태를 살펴보니, 사용자 테이블의 행에 대한 높은 경합이 근본 원인임이 명확해짐.
  • 이 경합은 쓰기 지연 시간을 급격히 증가시켜 애플리케이션의 연결 풀에 백압을 가하고, 결국 모든 사용 가능한 연결이 고갈됨.
  • Kagi는 지금까지 GCP에서 사용 가능한 가장 저렴한 단일 코어 데이터베이스를 사용해왔으며, 이는 데이터베이스를 쉽게 마비시킬 위험을 안고 있었음.
  • 나쁜 행위자들을 식별하여 24시간 이내에 생성된 계정과 단시간에 60,000번 이상의 검색을 수행한 단일 사용자 계정을 찾아냄.
  • 해당 계정의 검색 기능을 제거하고, 문제를 일으킨 특정 쓰기를 비활성화하는 핫픽스를 발행함.
  • 자정까지 문제가 완전히 해결되었으며, 행위자들이 돌아오는 신호를 계속해서 면밀히 모니터링함.

향후 조치

  • 이 사건에서 많은 것을 배우고, 시스템을 더욱 강화하고 사고 발생 시 커뮤니케이션 프로세스를 개선하기 위한 즉각적인 계획을 이미 진행 중임.
  • 먼저, 상태 페이지 업데이트가 신속하지 못했음을 인정함.
  • 사용자에게 자동화된 내부 모니터링을 더 쉽게 공개할 수 있는 상태 페이지 플랫폼으로 이동하여 실시간으로 플랫폼의 건강 상태를 파악할 수 있도록 할 예정임.
  • 문제를 일으키는 쿼리를 직접 완화하고, 유사한 결함이 더 있는지 알아보기 위해 부하 테스트를 실행 중임.
  • 추가 모니터링을 설치하여 인프라에서 올바른 위치를 더 빨리 가리키고, 이번처럼 잘못된 신호를 쫓는 시간을 낭비하지 않도록 할 예정임.
  • 이러한 유형의 악용을 감지하는 시스템을 강화하고 있으며, 성능 영향뿐만 아니라 비용도 직접적으로 발생시키기 때문에 자동화된 제한을 설정하여 이를 집행할 필요가 있음.
  • 새로운 제한은 이미 이 게시물 시점에 시행되었으며, 그 영향을 모니터링하고 필요에 따라 계속 조정할 예정임.
  • Kagi에 대한 액세스가 잘못되어 차단된 것으로 생각되면 [email protected]으로 연락해달라고 요청함.

GN⁺의 의견

  • Kagi는 사용자 테이블의 행 경합으로 인한 쓰기 지연 문제를 겪었으며, 이는 애플리케이션의 연결 풀에 백압을 가하여 서비스 중단을 초래함.
  • 이러한 문제는 Kagi가 GCP에서 가장 저렴한 단일 코어 데이터베이스를 사용함으로써 발생한 위험성의 결과였음.
  • Kagi 팀은 이번 사건을 통해 시스템을 강화하고, 사용자와의 커뮤니케이션을 개선하며, 악용을 방지하기 위한 자동화된 제한을 설정하는 등의 조치를 취함으로써 서비스의 안정성과 투명성을 높이려는 노력을 보여줌. 이러한 노력은 사용자들에게 더욱 신뢰할 수 있는 서비스를 제공하고자 하는 Kagi의 의지를 반영함.
Hacker News 의견
  • 인프라 업그레이드와 동시에 발생한 사건에 대한 의견

    • VM에 추가 RAM 자원을 통한 인프라 업그레이드를 수행하는 동시에 사건이 발생한 것은 완전한 우연이었다고 함.
    • 이러한 "우연"은 자주 발생하며, 문제 해결 중에 자신의 존재를 의심하게 만든다고 언급.
    • 문제 해결 중에 패닉 상태가 되면, 다른 것을 망가뜨리는 핫픽스를 적용할 수 있으며, 이는 시스템 관리자와 개발자에게 잔인한 머피의 법칙이 될 수 있다고 경고.
  • Kagi 상태 페이지에 대한 사용자의 경험

    • 사용자는 Kagi의 상태 페이지가 모든 것이 정상적으로 작동하는 것으로 표시되어 있어서 불안감을 느꼈다고 함.
    • 과거에 의존했던 서비스들은 상태 페이지를 즉시 업데이트하여 문제가 자신의 장치에 있는 것이 아니라는 것을 알 수 있었다고 비교.
    • Kagi를 계속 사용할 계획이지만, 사후 분석에서 언급한 것처럼 상태 페이지 코드를 다른 서비스/플랫폼으로 이동할 것을 희망한다고 언급.
  • 개인적인 경험을 공유하는 댓글

    • 개인적으로 동일한 유형의 서비스 중단을 여러 번 경험했으며, 데이터베이스 연결 풀의 건강 상태에 대한 문제를 해결하려고 시도했다고 공유.
    • 데이터베이스의 일반적인 포화 지표(CPU%, IOPS 등)는 이러한 중단 동안 크게 변하지 않으며, 대신 락 경합이 문제의 원인일 수 있다고 지적.
    • Kagi가 사용하는 RDBMS에 대한 권장 사항으로, 글로벌 I/O 대기 시간, 락 획득 시간, 쿼리 실행 시간 등을 그래프로 나타내는 것이 좋다고 제안.
  • 스타트업의 경험에 대한 댓글

    • 모든 스타트업이 어느 시점에서 이러한 문제를 겪게 된다고 언급.
    • 문제를 막을 수 있는 능력을 구축하기에 충분한 시간이나 자원이 없을 수도 있으며, 특정 문제가 발생할 것이라고 생각하지 못했을 수도 있다고 함.
    • 투명성과 학습이 중요하지만, 때로는 보상도 중요하다고 언급하며, Kagi가 서비스를 사용할 수 없었던 시간에 대한 검색 크레딧을 제공하는 것을 고려해야 한다고 제안.
  • 내부 시스템에 대한 관찰 가능성에 대한 댓글

    • 문제를 더 빨리 인식해야 했다고 지적하며, 올바른 데이터독 대시보드와 스플렁크 쿼리가 문제를 훨씬 더 빨리 명확하게 해야 한다고 언급.
    • 더 나은 모니터링에 투자하여 학습 경험으로 삼아야 한다고 조언.
  • Kagi의 신뢰성에 대한 유료 사용자의 의견

    • Kagi의 다운타임을 경험한 유료 사용자는 Google의 신뢰성을 당연하게 여겼다는 것을 깨달았다고 함.
    • 검색 엔진에 대한 접근이 중단되는 것은 큰 장애가 될 수 있다고 언급하며, Kagi를 사랑하지만 다운타임을 경험하는 것은 불쾌했다고 공유.
    • 이 경험이 Kagi를 더욱 강력하고 신뢰할 수 있는 서비스로 만들기를 희망한다고 언급.
  • 서비스 중단을 초래한 스크래퍼에 대한 댓글

    • 한 사용자가 실행한 스크래퍼로 인해 서비스가 7시간 동안 중단되었다는 사실에 대해, 테스트 중에 "많은 검색이 발생하면 어떻게 될까?"라는 질문을 하지 않았는지 의문을 제기.
  • Kagi 사용 경험과 사후 분석에 대한 댓글

    • 몇 주 동안 Kagi를 사용한 후, 지난주에 즉시 로드되지 않았을 때 무엇을 해야 할지 몰랐다고 공유.
    • 사후 분석이 나오기 전에 이미 사건을 잊어버렸다고 언급하며, 검색할 때 생각할 필요가 없는 팀에게 감사를 표함.
  • GCP에서 사용한 단일 코어 데이터베이스에 대한 댓글

    • Kagi가 GCP에서 사용 가능한 가장 저렴한 단일 코어 데이터베이스를 사용해왔다는 사실에 대해 긍정적인 반응을 보임.
    • 읽기 부하의 급격한 증가를 처리하고 성능을 더 끌어올릴 수 있는 PolyScale과 같은 것을 고려해볼 것을 제안.
  • 자동화된 스크래핑에 대한 댓글

    • 계정을 차단한 후 연락을 취한 사용자가 결과를 자동으로 스크래핑하는 데 계정을 사용했다고 주장했다고 언급.
    • 모든 들어오는 RPC / API / HTTP 요청, 특히 공개적인 것들에 대해 QPS(초당 쿼리 수) 제한을 설정할 것을 권장.