마이크로서비스 아키텍처에서 회복성을 고려해야 하는데 그 중에서도 핵심 회복성 패턴은 3가지가 있다.
서비스에 성능저하가 발생할 때 해당 문제가 상향(upstream) 전파되는 것을 막는 서비스 구현 방식을 알아보자.
Circuit breaker
서비스 호출을 모니터링 하여 설정된 타임아웃을 넘기면 실패 횟수가 카운팅되고, 조건이 충족되면 회로 차단기가 활성화되어 이후의 호출들을 모두 종료시켜 리소스 낭비를 막는다.
Fall back
회로 차단기에 의해 서비스 호출이 실패하면 대체 코드를 서비스한다.
Bulk head
스레드를 격리된 구획으로 관리하여 특정 스레드에 문제가 발생하였을 때, 전체 애플리케이션이 다운될 위험을 방지한다.
데이터베이스에 대한 호출이 매우 느리게 수행되기 시작했다. 서비스C의 데이터베이스에 대한 커넥션이 제때 응답일 받지 못하고 스레드풀에 쌓이기 시작한다. 뿐만아니라 서비스B 역시 서비스C에 대한 요청이 스레드풀에 쌓이고 점점 가용 커넥션 개수가 고갈된다. 이 영향은 서비스A와 애플리케이션 A/B에도 영향을 미친다.
서비스 C와 데이터베이스 사이에 회로 차단기 패턴이 구현되었다면 서비스C가 데이터를 호출할 때 빠르게 실패하여 커넥션풀이 소진되지 않았을 것이다. 따라서 이러한 장애가 상향전파되지 않고 서비스C에 한정되었을 것이다.
Histrix은 Netflix에서 Circuit breaker, Fall back, Bulk head Pattern을 구현한 라이브러리이다.
마이크로서비스 아키텍처에서 사용되는 장애전파방지 전략이다.