포스트

2024-02-02-TIL

2024-02-02-TIL

Today I Learned

Circuit Breaker

  • https://mangkyu.tistory.com/261

서킷 브레이커는 원격 호출이 계속 실패하는 상황에서 호출 자체를 잠시 막아 장애가 번지는 것을 끊는 패턴이다. Martin Fowler는 원격 호출이 실패하거나, 응답 없이 타임아웃까지 매달려 있을 수 있다는 점을 출발점으로 든다. 느린 외부 서비스를 기다리는 스레드가 쌓이면 호출한 쪽의 자원도 바닥나고, 그 서비스를 부르는 다른 시스템까지 연쇄로 멈춘다.

이름처럼 전기 차단기와 같은 세 가지 상태를 오간다.

  • Closed : 평소 상태다. 호출을 그대로 통과시키면서 실패를 센다.
  • Open : 실패가 임계치를 넘으면 회로가 열린다. 이때는 실제 호출을 시도하지 않고 바로 실패를 돌려준다.
  • Half-Open : 정해진 시간이 지나면 일부 호출만 시험 삼아 통과시킨다. 성공하면 Closed로 돌아가고, 실패하면 다시 Open이 된다.

Java 장애 내성 라이브러리인 Resilience4j의 기본값을 보면 감이 잡힌다. 최근 100번의 호출(slidingWindowSize, 횟수 기반 윈도우)에서 실패율이 50%(failureRateThreshold) 이상이면 Open으로 바뀐다. Open 상태는 60초(waitDurationInOpenState) 동안 유지되고, Half-Open에서는 10번(permittedNumberOfCallsInHalfOpenState)의 호출로 회복 여부를 판단한다. 실패뿐 아니라 느린 호출 비율로도 회로를 열 수 있고, Open 상태에서 들어온 호출은 CallNotPermittedException으로 거절된다.

재시도(retry)와 같이 쓸 때는 역할이 다르다는 점을 기억해 둔다. 재시도는 일시적인 오류를 넘기기 위한 것이고, 서킷 브레이커는 오래 이어지는 장애에서 빨리 실패하기 위한 것이다.


AI 키워드: OLMo

Allen Institute for AI(Ai2)가 2월 1일 OLMo(Open Language Model) 논문을 arXiv에 올렸다. 7B와 1B 모델의 가중치뿐 아니라 학습 데이터, 학습 코드, 학습 로그, 평가 코드까지 Apache 2.0으로 공개한 것이 특징이다. 가중치만 푸는 것과 달리, 모델이 어떤 데이터로 어떻게 만들어졌는지까지 들여다볼 수 있게 한 공개라는 말이구나.

참고한 자료외부 출처 4

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다