벡엔드

서킷 브레이커 (Hystrix)

코딩하는이씨 2024. 3. 19. 21:43
728x90
반응형

서킷 브레이커 필요성


  • REQ-RES 요청에 있어 요청 양이 많아지는 핫스팟이 생길 수 있다.
  • 멀티스레드를 사용하는 경우 트랜잭션을 메모리상에 기억을 한다.
    • 메모리에 중첩되어 계속 쌓이게 된다 → 결국 메모리 부족 발생 → 도미노처럼 서버의 장애 발생

💡 MSA 환경에서 단일 마이크로서비스의 장애가 전체 서비스에 영향을 미치지 않도록 장애 발생시 견딜 수 있는 내결함성을 위해 서킷 브레이커의 도입되었다.

 

서킷 브레이커 패턴


마이크로 서비스간 불필요한 대기를 줄이기 위해 일종의 부하 차단 장치를 사용하는 것이다. 장애가 발생한 서비스를 감지하고 더 이상의 요청을 막아 장애가 퍼지지 않도록 격리해준다. Fail-Fast 전략 (메모리 사용 폭주를 막는다)

 

💡 마이크로 서비스에서 문제는 탐지하기 어렵고 비정상적인 서비스 하나가 여러 애플리케이션을 짧은 시간에 다운시킬 수 있기 때문에 분산 시스템에서 장애대응은 중요하다!

 

  • 정상적으로 응답이 빠르게 오면 작동하지 않는다.
  • 응답 시간이 오래걸린다 판단 시 서킷 브레이커가 발동해 서킷을 연다(=트래픽 차단[작업을 시도하지 않고 오류를 반환한다.]) → 요청을 실패시켜버린다.
  • 요청을 보낸 곳에서 더 이상 기다리지 않고 곧바로 실패를 시켜 사용자에게 오랜 대기를 막는다.
  • 응답이 충분히 회복되면 서킷이 닫히고 정상적으로 요청을 처리하게 된다.

핵심 기능

  1. Fail-Fast 전략
    • 빨리 실패하도록하여 자원 고갈 이슈 방지
  2. 원만한 실패
    • Timeout / Fallback 을 사용하여 원만하게 실패 또는 대체 코드를 실행할 수 있다.
  3. 원만한 회복
    • 주기적으로 회복을 체크해 자원이 회복되면 자동으로 다시 접근을 허용한다.

Spring Cloud - Hystrix

스프링 클라우드에서 기본제공하는 Hystrix 라이브러리를 통해 서킷 브레이커를 구현할 수 있다. [요즘은 resilience4j 를 많이 사용]

💡 Hystrix는 Netflix에서 개발한 오픈 소스 라이브러리로, 분산 시스템에서의 서포트를 위한 장애 내성(fault tolerance)과 회로 차단(circuit breaker)을 구현하는 데 사용된다.

 

 

728x90
반응형