인프런 커뮤니티 질문&답변

김찬님의 프로필 이미지
김찬

작성한 질문수

장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker

API 호출로 Circuit 상태 변경하기

컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문

해결된 질문

작성

·

366

1

안녕하세요~

 

여러 대의 서버가 컨테이너 환경에서 실행될 때, 모든 서버의 서킷 브레이커 상태를 실시간으로 자동 전파하려면 어떻게 해야 할까요?

답변 2

2

안녕하세요, 인프런 AI 인턴입니다.

컨테이너 환경에서 다수의 서버가 실행되면서 서킷 브레이커 상태를 자동으로 실시간 전파하는 것은 상당히 복잡한 작업이 될 수 있습니다. 이를 위해서는 서버 간 상태를 공유하고 동기화하기 위한 메커니즘이 필요합니다. …

  1. 중앙화된 상태 관리: 서킷 브레이커의 상태를 중앙화된 데이터 저장 공간에 기록하여 모든 서버가 여기에 액세스할 수 있도록 하는 방법입니다. 예를 들어, Redis와 같은 인메모리 데이터 저장소를 사용하여 서킷 브레이커의 상태를 공유할 수 있습니다. 각 인스턴스는 주기적으로 상태 정보를 확인하고 업데이트하여 동기화를 유지합니다.

  2. 메시지 브로커를 활용한 이벤트 전파: 서킷 브레이커의 상태 변화를 이벤트로 전파하여 다른 서비스 인스턴스에 알리는 방식입니다. Kafka나 RabbitMQ와 같은 메시지 브로커를 사용하면, 서킷 브레이커의 상태 변경을 이벤트로 발행하고, 이를 구독하는 다른 서버들이 해당 이벤트를 받아 자신의 상태를 업데이트 할 수 있습니다.

  3. 분산 캐시 또는 구성 서비스 활용: 서킷 브레이커의 상태를 분산 캐시 서비스나 구성 관리 서비스에 저장하여 모든 서버가 이를 참조하는 방식입니다. etcd나 Consul과 같은 서비스를 사용하여 서킷 브레이커 상태를 관리할 수 있습니다.

각각의 방법은 설정과 관리 측면에서 트레이드오프가 있으므로, 요구 사항과 인프라에 가장 적합한 전략을 선택해야 합니다. 실제 구현에 있어서는 Resilience4j와 같은 라이브러리의 서킷 브레이커 기능 이외에도 상태를 관리하고 전파하는 추가적인 구성 요소가 필요합니다.

1

이준형(Foo)님의 프로필 이미지
이준형(Foo)
지식공유자

김찬님 안녕하세요~

제가 여행중이라 답변이 좀 늦었습니다.

 

저번도 그렇고 이번에도 좋은 질문이네요 :)

여러가지 방법을 고려할 수 있습니다. 몇가지 방법 전달드립니다.

 

  • 카프카 같은 곳에 서킷 상태 변경 이벤트를 발행해서 다른 애플리케이션 상태를 발행하고 다른 애플리케이션들이 컨슘하도록 구성

  • Redis 같은 캐시 저장소에 상태를 올려두고, 애플리케이션들이 해당 상태를 동기화 하도록 하는 방법

  • 유레카(Eureka)를 활용해서 상태를 동기화 시켜주는 방법

 

정도가 있을 것 같습니다.

제가 생각할 때는 여러 애플리케이션 서비스에 서킷 상태가 공유되어야 하는 상황은 아마도 MSA 환경에 가까울 것 같은데요, 그런 상황이라면 유레카를 활용하는게 가장 좋지 않을까 싶습니다. 서킷 상태 말고도 다른 상태들을 모니터링 할 수 있을테니까요 🙂

 

물론 다른 방법들도 나쁘지 않습니다~ 어떤 방법들이 있는지 알고 있고, 상황에 적절한 방법을 선택할 수 있다면 어떤 방법을 써도 될 것 같습니다.

추가적으로 질문 있으면 질문 주세요.

감사합니다.

김찬님의 프로필 이미지
김찬

작성한 질문수

질문하기