더북(TheBook)

견고한 RPI 프록시 설계

넷플릭스 기술 블로그22를 보면 서비스가 다른 서비스를 동기 호출할 때 자기 스스로를 방어하는 방법이 명쾌하게 기술되어 있습니다.

네트워크 타임아웃: 응답 대기 중에 무한정 블로킹하면 안 되고 항상 타임아웃을 걸어 둡니다. 이렇게 해야 리소스가 마냥 붙잡히지 않습니다.

미처리 요청(outstanding request) 개수 제한: 클라이언트가 특정 서비스에 요청 가능한 미처리 요청의 최대 개수를 설정합니다. 이 개수에 이르면 더 이상의 요청은 무의미하므로 즉시 실패 처리하는 것이 타당합니다.

회로 차단기 패턴: 성공/실패 요청 개수를 지켜보다가 에러율이 주어진 임계치를 초과하면 그 이후 시도는 바로 실패 처리합니다. 실패된 요청이 많다는 것은 서비스가 불능 상태고 더 이상의 요청은 무의미하다는 뜻입니다. 타임아웃 시간 이후 클라이언트가 재시도해서 성공하면 회로 차단기는 닫힙니다.

 

넷플릭스 히스트릭스(Netflix Hystrix)23는 이와 같이 다양한 패턴이 구현된 오픈 소스 라이브러리입니다. JVM 환경이라면 히스트릭스를 이용하여 RPI 프록시를 구현해 봄직합니다. 닷넷 진영에서는 폴리(Polly)24라는 라이브러리가 유명합니다.

 

 


 

 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.