세션/항해플러스

장애 대응 문서

feel2 2024. 11. 25. 23:35
반응형

 

현업에서 장애는 예상치 못한 곳에서 항상 발생한다.

피할 수 없다면 적극적으로 예방하고, 장애 발생 시 유연하고 빠르게 대처해야 하며, 같은 장애가 재발되지 않도록 조치를 취해야 한다.

현업에서의 장애 대응 프로세스는 보통

 

  1. 장애 탐지 및 전파
  2. 장애 분류 및 해결
  3. 장애 복구 및 보고
  4. 장애 회고

이렇게 진행된다고 보면 된다.

현업에서 장애를 빠르게 감지하기 위해서는 로깅, 모니터링 등의 방법이 있는데, 장애 상황을 감지하기 위해 다양한 조건을 설정하고 모니터링을 통해 장애 확산을 방지할 수 있다.

그럼 우리가 자주 볼 수 있는 장애는 어떤 것들이 있고, 어떻게 대응을 하면 좋을지 같이 살펴보자.

 

외부 서비스 장애

 

Kafka

 

  • 사례: 디스크 공간 부족으로 인해 Kafka Broker를 사용할 수 없음
  • 실패 원인: Kafka 브로커는 비정상적으로 많은 양의 로그 데이터로 인해 디스크 공간이 소진, 사용 가능한 디스크 공간이 부족하여 브로커가 새 데이터를 쓸 수 없어 메시지 처리가 중단
  • 영향: Kafka에 의존하는 여러 실시간 애플리케이션이 데이터 스트림을 처리할 수 없어 데이터 전달 및 처리가 지연, 만약 Kafka를 통해서 이벤트 드리븐을 하는 경우, 관련 서비스 마비
  • 장애 대책:
    • 단기:
      • 브로커에서 불필요한 로그와 데이터를 즉시 삭제하여 디스크 공간을 확보합니다.
      • 서비스 복원을 위해 Kafka 브로커를 다시 시작했습니다.
    • 장기:
      • 성능과 스토리지 요구 사항의 균형을 맞추기 위해 Kafka topic 구성(예: 보존 정책 및 복제 요소)을 검토하고 최적화 진행
      • 데이터 볼륨이 증가함에 따라 동적으로 확장할 수 있는 확장 가능한 스토리지 솔루션을 구현하여 디스크 공간 문제로 인한 향후 중단 위험 감소
      • 디스크 공간 사용량 및 기타 주요 지표에 대한 예측 분석을 포함하도록 Kafka 클러스터 모니터링 구축

 

Redis

 

  • 사례: Redis 처리 지연
  • 실패 원인: 대기열 작업에 사용되는 Redis 인스턴스는 예상치 못한 트래픽 급증으로 인해 지연 시간 문제가 발생하여 작업 처리 지연
  • 영향: 응답 지연에 따른 사용자 경험 감소
  • 장애 대책:
    • 단기:
      • 증가된 로드를 일시적으로 수용하기 위해 Redis 인스턴스의 메모리 할당을 증가
    • 장기:
      • 더 많은 트레픽이 생길 것을 대비하여 Redis cluster 구성
  • 사례: Redis 캐시 제거 및 데이터 손실
  • 실패 원인: 중요한 사용자 데이터를 캐싱하는 데 사용되는 Redis 인스턴스에서 메모리 부족으로 인해 키가 제거되어 일시적인 데이터 손실이 발생하고 기본 데이터베이스의 로드가 증가
  • 영향: 캐시 누락으로 사용자의 응답 지연이 발생
  • 장애 대책:
    • 단기:
      • 불필요한 캐시 항목을 수동으로 삭제하고, 메모리 할당을 최적화
      • 자주 액세스하는 데이터를 다시 채우고, 데이터베이스의 부하를 줄이기 위해 수동 캐시 워밍업 구현

 

내부 인프라 장애

 

DB

 

  • 사례: 스파이크 트래픽으로 인한 DB 과부화
  • 실패 원인: 갑자기 예상치 못한 트래픽 급증으로 인해 데이터베이스가 응답 지연, 데이터베이스가 들어오는 요청의 양을 처리할 수 없어 쿼리 시간이 초과되고 트랜잭션이 실패로 이어짐
  • 영향: 사용자는 애플리케이션에 액세스할 수 없었고, 많은 경우 작업을 수행하려고 할 때 오류나 시간 초과가 발생하여 트래픽 급증 중에 서비스 중단으로 장애 전파.
  • 장애 대책:
    • 단기:
      • 증가된 로드를 처리하기 위해 데이터베이스 리소스를 확장(e.g. scale up).
      • 과도한 요청으로 인해 데이터베이스가 과부하되는 것을 방지하기 위해 애플리케이션 계층에 속도 제한을 구현(e.g. sleep)
    • 장기:
      • 대용량 트래픽을 더 잘 처리하기 위해 샤딩이나 클러스터 구성
      • 데이터베이스가 최대 트래픽 상황을 처리할 수 있는지 확인하기 위해 정기적인 로드 테스트를 수행하고 테스트 결과에 따라 개선 사항을 구현
  • 사례: Redis 캐시 제거 및 데이터 손실
  • 실패 원인: 중요한 사용자 데이터를 캐싱하는 데 사용되는 Redis 인스턴스에서 메모리 부족으로 인해 키가 제거되어 일시적인 데이터 손실이 발생하고 기본 데이터베이스의 로드가 증가
  • 영향: 캐시 누락으로 사용자의 응답 지연이 발생
  • 장애 대책:
    • 단기:
      • 불필요한 캐시 항목을 수동으로 삭제하고, 메모리 할당을 최적화
      • 자주 액세스하는 데이터를 다시 채우고, 데이터베이스의 부하를 줄이기 위해 수동 캐시 워밍업 구현
반응형