마이크로서비스 아키텍처(MSA)는 여러 독립적인 서비스들로 구성되어 있어, 하나의 서비스 장애가 전체 시스템에 미치는 영향을 최소화하는 것이 매우 중요합니다. 회복성 패턴(Resilient patterns)은 이러한 MSA 구조에서 시스템의 안정성과 복원력을 높이는 핵심 전략으로 작용합니다.
회복성 패턴(Resilient patterns)은 시스템이 일부 구성 요소의 장애나 오류에도 불구하고 정상적인 기능을 유지하고, 신속하게 복구할 수 있도록 돕는 설계 방법 또는 모범 사례를 말합니다. 특히 마이크로서비스와 같이 분산된 시스템 아키텍처에서 매우 중요한 역할을 합니다.
예를 들어, 소프트웨어 아키텍처에서 흔히 사용되는 회복성 패턴에는 다음과 같은 것들이 있습니다:
- 회로 차단기(Circuit Breaker): 특정 서비스에 장애가 발생하면 연속된 호출을 차단하여 전체 시스템에 장애가 확산되는 것을 방지합니다.
- 재시도(Retry): 일시적인 오류가 발생했을 때, 일정 횟수 또는 지수적 백오프로 자동으로 다시 시도하여 문제를 해결할 수 있도록 합니다.
- 타임아웃(Timeout): 응답 대기 시간을 제한하여, 응답이 지연되는 경우 해당 요청을 빠르게 종료시킵니다.
- 벌크헤드(Bulkhead): 시스템을 서로 독립적인 영역(벌크헤드)으로 분리하여, 한 부분의 장애가 전체 시스템에 영향을 미치지 않도록 합니다.
- 폴백(Fallback): 주 기능이 실패할 경우 대체 동작이나 기본 값을 제공하여 사용자 경험을 보장합니다.
- 속도 제한(Rate Limiter): 시스템에 과도한 요청이 몰리는 것을 방지하여, 서비스의 안정성을 유지합니다.
이러한 패턴들은 단독으로 또는 조합하여 사용됨으로써 시스템의 견고성, 유연성, 그리고 복원력을 극대화하는 데 기여합니다.
Resilient 필수 기능
- 장애에 직면하더라도 응답성을 유지해야 한다
- 장애 요소에 대응해 복제, 봉쇄, 격리, 위임을 통해 장애를 분리한다
- 대표 기능
- 회로 차단기(Circuit Breaker)
- 재시도(Retry)
- 폴백(Fallback)
- 속도 제한 Limiters (Rate, Time)
Circuit Breaker
• Close State
• 정상상태를 나타낸다
• 장애가 허용범위를 넘어서면, Open State로 전환
• Open State
• 장애 상황이므로, 요청을 즉시 거부한다 (장애 격리)
• 특정 시간, 호출 횟수 이후에 장애 상황 점검을 위해 Half Open State로 전환
• Half Open State
• 장애 상황이 해제되었음을 점검하기 위한 중간 상태 (간보기 상황)
• 장애 상황이 아니라면 Close State로 전환 (정상), 아직 장애 상황이라면 Open State로 전환 (장애)
Resilient 구현체들
회복성을 보장하는 구현체들은 실제 시스템에서 장애에 대한 대응 및 복구를 자동화하거나 쉽게 관리할 수 있도록 도와주는 라이브러리, 프레임워크, 도구들을 의미합니다. MSA(마이크로서비스 아키텍처) 환경에서는 각 서비스가 독립적으로 운영되기 때문에, 다음과 같은 구현체들을 활용해 회복성 패턴을 적용할 수 있습니다:
- Netflix Hystrix:
- 대표적인 회로 차단기(Circuit Breaker) 라이브러리로, 서비스 장애 시 연속 호출을 차단해 장애 확산을 방지합니다.
- 단, 현재는 활발한 개발이 중단되어 대체 솔루션들이 주목받고 있습니다.
- Resilience4j:
- Java 환경에서 Hystrix를 대체할 수 있는 라이브러리로, 재시도(Retry), 타임아웃(Timeout), 회로 차단기, 폴백(Fallback) 등의 다양한 회복성 패턴을 지원합니다.
- Polly:
- .NET 환경에서 사용되는 라이브러리로, 재시도, 타임아웃, 폴백, 회로 차단기 등 다양한 회복성 정책을 손쉽게 구현할 수 있도록 도와줍니다.
- Failsafe:
- Java 기반의 또 다른 회복성 라이브러리로, 간단한 API를 통해 재시도, 타임아웃, 폴백 등을 구현할 수 있습니다.
- Spring Cloud Circuit Breaker:
- Spring Boot 기반 애플리케이션에서 회로 차단기 패턴을 쉽게 적용할 수 있도록 도와주는 모듈입니다.
- API 게이트웨이 솔루션 (예: Kong, Apache APISIX):
- API 레벨에서 속도 제한, 재시도, 타임아웃, 회로 차단기, 폴백 등의 기능을 제공하여, 백엔드 서비스의 안정성을 높입니다.
- 서비스 메시 (예: Istio):
- 서비스 간 통신을 제어하면서 재시도, 회로 차단, 타임아웃, 폴백, 오류 주입 등 다양한 회복성 기능을 인프라 레벨에서 지원합니다.
- Kubernetes:
- 컨테이너 오케스트레이션 도구로, liveness/readiness probes, 자동 스케일링, 셀프 힐링(self-healing) 기능을 통해 애플리케이션의 회복성을 보장합니다.
이와 같이 다양한 resilient 구현체들을 통해 MSA 환경에서는 개별 서비스의 장애가 전체 시스템에 미치는 영향을 최소화하고, 신속한 복구 및 지속적인 운영이 가능하도록 설계할 수 있습니다.
연관된 글 :
참고:
https://drive.google.com/file/d/1-NNkM8DZt6Hrd1-05qY9boyfh_EVb0UG/view
gpt
'개발 > 개발지식' 카테고리의 다른 글
[Cache] 메모리 캐시와 디스크 캐시 (0) | 2024.06.09 |
---|---|
[Cache] 페이지 캐시 (0) | 2024.06.06 |
[Spring] Port 8080 is already in use 에러 해결 방법 (0) | 2024.06.06 |
도메인 네임(Domain Name) (0) | 2024.06.06 |
트랜잭션 (0) | 2024.06.06 |