시스템 장애, 이제 막아보자! Cascading Failure 방지 전략
Cascading Failure의 정의와 긍정적 피드백 루프(Positive Feedback Loop)를 통해 장애가 확산되는 원리를 설명함.
Google Maps와 AWS US East-1의 실제 사례를 통해 Cascading Failure가 글로벌 서비스에 미치는 영향을 강조함.
동기식 호출(Synchronous Calls)을 피하고, Orchestrator 대신 Choreography Pattern을 사용하는 방법 제시함.
Retries, Capacity Planning, Circuit Breaker, Load Shedding 등 Cascading Failure를 방지하기 위한 다양한 전략을 소개함.
Cascading Failure의 이해
발표자는 Cascading Failure가 긍정적 피드백 루프(Positive Feedback Loop)에 의해 발생하는 연쇄적인 장애라고 설명한다. 시스템 내 작은 장애가 다른 서비스에 과부하를 유발하고, 이로 인해 추가 장애가 발생하며, 이러한 과정이 반복되어 Dominio Effect를 초래한다고 강조한다. 발표자는 Google Maps와 AWS US East-1의 사례를 통해 Cascading Failure가 글로벌 서비스에 미치는 심각한 영향을 보여준다.
Cascading Failure 방지 전략: 비동기 통신
발표자는 Orchestrator Pattern의 문제점을 지적하며, Choreography Pattern을 대안으로 제시한다. Orchestrator Pattern은 중앙 집중식 제어를 통해 서비스 간의 종속성을 높여, 한 서비스의 장애가 전체 시스템에 영향을 미칠 수 있다. 반면, Choreography Pattern은 각 서비스가 이벤트를 발행하고, 다른 서비스가 이를 구독하여 반응하는 방식으로, 서비스 간의 결합도를 낮춰 Cascading Failure의 위험을 줄인다.
Cascading Failure 방지 전략: Retries, Capacity Planning
발표자는 Retries를 사용할 때, 요청의 재시도가 안전하고 Idempotent한지 확인해야 한다고 강조한다. 또한, Exponential Backoff와 Jittering을 통해 재시도 트래픽을 분산시키고, Retry Budget을 설정하여 과도한 재시도로 인한 시스템 부하를 방지해야 한다고 설명한다. Capacity Planning을 통해 서비스가 안전하게 처리할 수 있는 부하량을 파악하고, 그에 맞는 안전 경계를 설정하는 것이 중요하다고 강조한다.
Cascading Failure 방지 전략: Circuit Breaker, Load Shedding
발표자는 Circuit Breaker를 통해 장애가 발생한 서비스로의 요청을 일시적으로 중단하여, 장애의 확산을 막을 수 있다고 설명한다. Load Shedding은 시스템이 과부하 상태일 때, 우선순위가 낮은 요청을 거부하여 시스템의 안정성을 유지하는 전략이다. Graceful Degradation을 통해, 시스템의 일부 기능이 저하되더라도, 핵심 기능은 유지하여 사용자 경험을 보호할 수 있다. 이러한 전략들은 Cascading Failure를 예방하고, 시스템의 탄력성을 높이는 데 기여한다.