MSA 장애 예방을 위해 #1



MSA (Micro Service Architecture) 의 문제점

MSA를 운영 하다 보니 어느 한 서버의 장애가 전체 장애로 확산이 되어 더 큰 문제가 되는 경우를 많이 경험할 수 있습니다. 이를 해결하기 위해 각 마이크로 서비스 간 전파 차단기 역할을 하는 Circuit Breaker에 대해 알아보고자 합니다.



Circuit Breaker 의 역할

마이크로 서비스 사이에서 서비스의 상태를 확인 하여 정상일 때 API를 전달하고, 정상이 아님을 감지 했을 때 API 를 전달 하지 않고 쓰레드들이 응답을 기다리지 않도록 다른 메세지로 답을 하여 장애가 전파 되지 않도록 해주는 역할을 합니다.



1부 에서는 Circuit Breaker 의 패턴에 대해 알아 봅시다.



MSA 에서는

일반적으로 다른 서비스를 호출하여 데이터를 검색하며 Downstream 서비스가 다운될 가능성이 있습니다. 이는 느린 네트워크 연결, 시간 초과 또는 일시적인 사용 불가능으로 인해 발생할 수 있습니다.

특정 서비스에 심각한 문제가 있는 경우 더 오랜 시간 동안 장애가 지속될 수 있습니다. 이러한 경우 Client 는 특정 서비스가 다운되었다는 사실을 알지 못하기 때문에 요청이 해당 서비스로 계속 전송됩니다.

결과적으로 애플리케이션 전반에 걸친 계단식 실패로 지속적인 장애로 이어질 수 있습니다.

아래는 계단식 실패를 멈추게 해주는 Circuit Breaker Pattern 입니다.



Circuit Breaker Pattern

Circuit Breaker Pattern은 마이크로 서비스 아키텍처에서 사용되는 인기 있는 디자인 패턴입니다.


– Closed Status

이 상태에서 circuit breaker는 요청을 마이크로 서비스로 라우팅하고 각 기간의 실패 횟수를 계산합니다.

즉, 실패 없이 작동합니다.

그러나 특정 기간 동안의 오류 수가 임계값을 초과하면 회로가 trip 되고 “개방” 상태로 이동합니다.


– Open Status

회로 차단기가 “열림” 상태로 이동하면 마이크로 서비스의 요청이 즉시 실패하고 예외가 반환 됩니다.

시간 초과 후 회로 차단기는 “Half-Open” 상태로 전환됩니다.


– Half Open Status

이 상태에서 회로 차단기는 마이크로 서비스의 제한된 수의 요청만 통과하도록 허용하고 작업을 호출합니다.

이러한 요청이 성공하면 회로 차단기가 “닫힘” 상태로 돌아갑니다.

그러나 요청이 다시 실패하면 “열림” 상태로 돌아갑니다.


Circuit Breaker Pattern은 3가지의 효과를 가져옵니다.

1. Client 가 Server 의 응답을 기다리지 않고 다른 행동을 할 수 있도록 합니다.

2. Server 는 처리가 불가능 한 상태에서 더 많은 API 호출이 몰리지 않도록 하여 부하를 줄입니다.

3. 다른 마이크로 서비스로 API 호출을 전달 하지 않아 2차 장애를 예방 합니다.



참고자료