일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- getDateCellValue
- @EntityListeners
- deserializer
- RootGraph
- 오블완
- getEntityGraph
- fractional seconds
- MYSQL
- 버전 문자열 비교
- mysql not equal null
- 1*1000
- sendFractionalSeconds
- mysql =
- 티스토리챌린지
- NamedEntityGraph
- AuditingEntityListener
- Protecle
- +9:00
- mysql equal null
- @CreateDate
- yml
- createEntityGraph
- 운동해서 광명찾자
- EmbeddedId
- MSSQL
- apatch poi
- https
- spring boot
- pooled-lo
- load order
- Today
- Total
Hello
서킷 브레이커 패턴 (Circuit Breaker Pattern) 본문
서킷 브레이커 란
예상치 못한 장애(네크워크 이슈, 서버 다운 등)가 발생해 어떤 원격 서버 하나가 요청에 응답하지 못하는 상태일 때 클라이언트는 Timeout이 될 때 까지 응답을 기다리거나 무의미한 요청을 보내며 자원을 낭비하게 될 것입니다. MSA(Microservice Architecture)에서는 이 클라이언트가 또 다른 누군가의 서버가 될 수도 있는데요. 그렇다면 이 서버의 클라이언트 역시 똑같은 문제를 겪게 될 것입니다. 이렇게 장애가 계속 전파되며 한 원격 서버에서 발생한 장애가 모든 시스템에 큰 영향을 줄 수 있습니다. 이런 문제를 해결하기 위해 등장한 개념이 바로 '서킷 브레이커(circuit breaker)'입니다.
서킷 브레이커 패턴은 Michael Nygard의 저서 Release It 이라는 책에서 처음 소개된 디자인 패턴으로 애플리케이션이 실패할 가능성이 있는 작업을 반복적으로 실행하지 않도록 방지할 수 있습니다. 문제가 해결될 때 까지 예외를 반환해 리소스를 낭비 하지 않아 시스템의 장애 전파를 막으며, 클라이언트에서 응답을 기다리지 않도록 합니다.
서킷 브레이커 상태
서킷 브레이커는 3가지 상태를 가진다.
- Closed : 요청에 대한 기본 상태다. 요청의 실패율이 임계치 값보다 낮은 상태.
- Open : Circuirt Open이 된다. 요청의 실패율이 정해놓은 임계치 값을 넘은 상태. 모든 요청은 오류로 표시된다. 요청을 전송하지 않고 즉시 실패(fail fast)한다.
- HalfOpen : 일부 요청을 허용하고 요청이 성공하면 Closed 상태로 전환하고 실패하면 Open 상태를 유지한다.
+Java 진영의 서킷 브레이커 라이브러리 : Reslience4J
참고 :
https://engineering.linecorp.com/ko/blog/try-armeria-circuit-breaker
https://learn.microsoft.com/ko-kr/azure/architecture/patterns/circuit-breaker