728x90
반응형
서킷 브레이커 필요성
- REQ-RES 요청에 있어 요청 양이 많아지는 핫스팟이 생길 수 있다.
- 멀티스레드를 사용하는 경우 트랜잭션을 메모리상에 기억을 한다.
- 메모리에 중첩되어 계속 쌓이게 된다 → 결국 메모리 부족 발생 → 도미노처럼 서버의 장애 발생
💡 MSA 환경에서 단일 마이크로서비스의 장애가 전체 서비스에 영향을 미치지 않도록 장애 발생시 견딜 수 있는 내결함성을 위해 서킷 브레이커의 도입되었다.
서킷 브레이커 패턴
마이크로 서비스간 불필요한 대기를 줄이기 위해 일종의 부하 차단 장치를 사용하는 것이다. 장애가 발생한 서비스를 감지하고 더 이상의 요청을 막아 장애가 퍼지지 않도록 격리해준다. Fail-Fast 전략 (메모리 사용 폭주를 막는다)
💡 마이크로 서비스에서 문제는 탐지하기 어렵고 비정상적인 서비스 하나가 여러 애플리케이션을 짧은 시간에 다운시킬 수 있기 때문에 분산 시스템에서 장애대응은 중요하다!
- 정상적으로 응답이 빠르게 오면 작동하지 않는다.
- 응답 시간이 오래걸린다 판단 시 서킷 브레이커가 발동해 서킷을 연다(=트래픽 차단[작업을 시도하지 않고 오류를 반환한다.]) → 요청을 실패시켜버린다.
- 요청을 보낸 곳에서 더 이상 기다리지 않고 곧바로 실패를 시켜 사용자에게 오랜 대기를 막는다.
- 응답이 충분히 회복되면 서킷이 닫히고 정상적으로 요청을 처리하게 된다.
핵심 기능
- Fail-Fast 전략
- 빨리 실패하도록하여 자원 고갈 이슈 방지
- 원만한 실패
- Timeout / Fallback 을 사용하여 원만하게 실패 또는 대체 코드를 실행할 수 있다.
- 원만한 회복
- 주기적으로 회복을 체크해 자원이 회복되면 자동으로 다시 접근을 허용한다.
Spring Cloud - Hystrix
스프링 클라우드에서 기본제공하는 Hystrix 라이브러리를 통해 서킷 브레이커를 구현할 수 있다. [요즘은 resilience4j 를 많이 사용]
💡 Hystrix는 Netflix에서 개발한 오픈 소스 라이브러리로, 분산 시스템에서의 서포트를 위한 장애 내성(fault tolerance)과 회로 차단(circuit breaker)을 구현하는 데 사용된다.
728x90
반응형