300
2
부
시스템 설계
다. 만일 서버가 실패하면 클라이언트가 재시도를 할 수는 있겠지만 점차적으로 재시도 횟수를
줄일 수 있도록 구현해야 한다. 예컨데 재시도 전에 대기 시간을 두 배씩 증가하는 식이다. 이
렇게 하면 서버로 보낼 요청의 수를 제한할 수 있지만 그것만으로는 충분하지 않다. 모든 클라
이언트가 장애에 영향을 받아 동시에 재시도를 반복하면 트래픽이 치솟을 수 있기 때문이다.
이렇게 동시적인 재시도를 방지하려면 각 클라이언트가 재시도 전에 임의의 대기 시간을 갖도
록 해야하며 이를
지터
jitter
라고 한다. 구글에서는 거의 대부분의 클라이언트 소프트웨어에 지터
를 적용하고 있다.
클라이언트를 제어할 수 없다면 어떤 방법이 있을까? 이 질문은 지배적인
DNS
서버를 운영하
는 사람은 보편적으로 가진 고민이다. 만일
DNS
서버에 장애가 발생하면 적법하게 요청을 반
복하는
DNS
서버의 재시도만으로도 트래픽이 상당히 증가할 수 있으며 보통의 사용량보다
30
배 이상 증가하는 경우도 허다하다. 이 정도로 요청이 늘어나면 장애로부터 복구하기가 어려워
질 뿐만 아니라 장애의 원인을 찾으려는 시도 자체를 무산시키는 경우도 있다. 운영자가 현상
을
DDoS
공격으로 오인할 수도 있기 때문이다. 이런 경우 가장 적절한 해결책은 업스트림 요
청 쓰로틀링을 이용해 서버를 정상 상태로 유지하면서 최대한 많은 요청에 응답하는 것이다.
성공적인 응답을 받은 클라이언트는 재시도를 반복하지 않을 것이며 따라서 문제는 곧 해결될
것이다.
10.5
마치며
모든 ...