시작이 반

[Circuit Breaker] 본문

Programming/기타

[Circuit Breaker]

G_Gi 2023. 8. 5. 22:29
SMALL

하나의 API에서 여러개의 외부 API를 호출하고 있을때 어떤 하나의 API가 장애가 발생한다면 해당 API에 엮여있는 모든 API가 장애가 발생하는 것이 맞는 것일까?

아니면 한 페이지에 추천서비스, 검색서비스, 결제 서비스등 여러개의 서비스가 있을때 하나의 서비스가 장애가 발생하면 해당 페이지는 장애가 발생하는 것이 맞는 것일까?.

이상적인 서비스는 장애난 서비스만 장애로 보여지거나 장애가 아닌것 처럼 동작을 해야 한다.

아래와 같이 아마존과 넷플릭스는 MSA로 모든 서비스가 구축되어있으며 모든 서비스가 엮여있다. 하지만 하나의 서비스가 장애가 나더라도 정상적으로 작동한다.

이때 사용하는 것이 Circuit Breaker이다.

 

 

 

 

Circuit Breaker 란?

회로 차단기란 뜻으로 caller에서 callee를 호출할 때 callee가 정상적이지 않을때 Timeout까지 기달리지 않고 caller는 호출을 끊고 바로 실패 응답을 보내는 것이다.

즉, 정상적이지 않으면, TImeout등으로 처리량이 줄어들고, 부하가 늘어날 수 있기 때문에 최대한 빨리 실패를 하거나 기본동작을 하게 만드는 것이다.

> Fast Fail Back

 

Circuit Breaker 상태

  • Closed : 정상적인 API가 호출이 되는 상태
  • Open :  일정시간 동안 API 호출을 바로 실패하는 상태
  • Half Open : Open인 상태에서 일정 시간이 지나면 상태를 다시 확인하기 위해서 API 호출을 시도해보는 상태 
                        -> Half Open에 성공한다면 Closed로, 실패한다면 다시 Open 상태로 이동한다.

 

 

만약 Circuit Breaker가 없다면 어떻게 될까

Thread가 1개에 API Timeout은 300ms이고 평소에는 20ms에 처리가 된고 가정해보자.

정상 호출 시 1초에 50개의 API를 처리할 수 있다.

장애가 발생하면? 1초에 3개밖에 처리를 하지 못한다.

 

 

 

Circuit Breaker를 적용할 때 고려할점

  • 필수적인 서비스와 필수적이지 않은 서비스를 구분
  • 몇 번이나 실패하면 Circui breaker로 fail back이 동작해야할지 기준
  • 등...

 

Circuit Break 종류

Java

  • Hystrix (Netfix, 더이상 업데이트x)
  • Resilience4J

 

 

Resilience4J를 사용해보자

 

 

 

 

LIST

'Programming > 기타' 카테고리의 다른 글

ELK(ElasticSearch, Logstash, Kibana) 란?  (0) 2023.03.05
Sync, Async, Blocking, Non-Blocking  (0) 2022.11.13
Redis(Remote Dictionary Server)  (0) 2022.08.17
로깅(Logging)이란?  (0) 2022.06.07
싱글턴 패턴(Singleton pattern)  (0) 2021.02.18