써킷 브레이커(Circuit Breaker)¶
해결하고 싶은 문제¶
백엔드(웹서버, 스토리지, 데이터베이스) 장애에도 동작하는 서비스를 구축하고 싶다.
솔루션/패턴 설명¶
캐시서버는 원본서버의 상태를 일정시간(Time To Live)동안 저장한 뒤 대신 응답하는 메커니즘이다.
원본 장애발생시 캐싱된 콘텐츠의 TTL을 자동으로 늘려주어 장애를 노출시키지 않는다.
구현¶
cache 는 기본으로 활성화된다.
콘텐츠에 알맞은 적절한 ttl 을 설정한다. 0초도 가능하다.
# 장애 상황에서 원본 오동작으로 4xx, 5xx 응답이 올 수 있다. # 콘텐츠가 캐시에서 사라지지 않도록 비정상 TTL연장 기능을 활성화시킨다. # functions.network.cache.ttl "policies": { "extendBy4xx": true, "extendBy5xx": true, "unvalidatableObjectResCode": 0 }
Note
M2
는 콘텐츠 갱신시점에 원본서버와 연결이 안되거나 전송지연이 발생할 경우 자동으로 TTL을 연장한다.
장점/효과¶
캐싱된 콘텐츠라면 장애가 클라이언트에게 노출되지 않는다.
주의점¶
엔터프라이즈 서비스에서는 L4/Load Balancer등을 이용해 장애서버를 배제한다. 캐시서버 운영도 동일한 방식을 사용한다.
기타¶
자주 변경되는 콘텐츠라면 TTL
을 0초로 설정한다.
평상시에는 대부분의 응답을 원본서버에서 처리하다 장애상황이 발생하면 캐시서버가 대신 응답한다.