[디자인 패턴] 서킷브레이커 패턴

윤성철·2024년 11월 14일

디자인 패턴

목록 보기
1/1
post-thumbnail

서론

최근 서비스 규모가 발달함에 따라 대부분의 서비스들이 MSA로 전환되고 있다. MSA와 같은 분산 환경에서는 서비스가 다른 서비스를 동기 호출하는데, 이때 실패할 가능성이 항상 존재한다.

한 서비스에 장애가 발생하고, 다른 서비스가 장애가 발생한 서비스를 호출하는 구조일 때, 에러를 응답받거나, 타임아웃 시점까지 응답을 받지 못하고 대기하면서, 쓰레드가 고갈되어 장애를 유발할 수 있다. 뿐만 아니라, 사용자 대기가 쌓이고 latency가 누적되면, 서버 부하로 인해 서비스 다운까지의 대형사고가 발생할 수 있다.

서킷 브레이커 패턴의 개념

서킷 브레이커란 ❓

서킷 브레이커는 서로 다른 시스템 간의 연동 시 장애전파 차단을 목적으로 하는 기술이다.
연동 시 이상을 감지하고, 이상이 발생하면 연동을 차단하고, 이후 이상이 회복되면 자동으로 다시 연동하기 위한 기술이다.

서킷브레이커는 3가지의 상태에 따라 서로 다른 동작을 한다.

  • OPEN
  • CLOSED
  • HALF_OPEN

보통 상태로는 정상적으로 호출되고 응답을 주는 CLOSED 상태, 문제 발생이 감지된 OPEN, HALF OPEN 상태가 있다.

서킷브레이커는 슬라이딩 윈도우를 사용하여 상태의 변화여부를 결정한다. 슬라이딩 윈도우는 횟수 방식과 시간 방식으로 나뉜다.

개발자가 설정한 config에 따라 슬라이딩 윈도우 안에서 허용 기준을 넘으면 상태를 OPEN으로 변경한다. OPEN 상태에서는 연동된 시스템 호출을 시도하지 않으며, 바로 호출 실패 Exception을 발생시키거나 정해진 fallback 동작을 수행한다.

OPEN 이후 설정한 시간이 지나면 HALF_OPEN 상태로 변경되며, 호출이 정상화되었는지 다시 한번 실패 확률로 확인한다. 정상화되었다고 판단되면, CLOSED 상태로 변경되어 정상적으로 연동이 수행된다.

profile
내 기억보단 내가 작성한 기록을 보자..

0개의 댓글