← 질문 목록
#339깊이 0
요청이 한꺼번에 몰릴 때 어떻게 막는가?
받아 줄 양을 미리 정해 두고 그만큼만 통과시킨다. 넘치면 거절하거나 기다리게 한다.
| 순서 | 남은 양 | 무슨 일 |
|---|---|---|
| 1 | 5 | 3개를 받는다 |
| 2 | 2 | 2개를 받는다 |
| 3 | 0 | 더 오면 거절한다 |
| 4 | 2 | 시간이 지나 다시 찬다 |
통이 조금씩 다시 차는 방식이 흔하다. 평소에는 여유가 쌓여 있어 잠깐 몰리는 것은 받아 주고, 계속 몰리면 채우는 속도만큼만 통과한다.
시계를 정각마다 끊는 방식은 경계에서 샌다. 한도가 분당 100이면 59초에 100개, 다음 1초에 또 100개가 지나간다.
거절할 때는 429를 쓴다. Retry-After로 언제 다시 오라고 붙일 수 있는데 표준이 강제하지는 않는다. 안 붙이면 곧바로 다시 두드리는 클라이언트가 있어 더 몰린다.
서버가 여러 대면 센 값을 어디에 둘지가 급소다. 각자 세면 대수만큼 통과하고, 한곳에 모으면 그 한곳이 병목이 된다.