처리율 제한 장치(rate limiter)는 클라이언트가 보내는 트래픽의 처리율을 제어하기 위한 장치이다. 특정 기간 내에 전송되는 클라이언트의 요청 횟수를 제한하는 방식이다. API 요청 횟수가 제한 장치에 정의된 임계치를 넘어서면 추가로 도달하는 모든 호출은 처리가 중단된다. 다음은 몇가지 예시이다.
- 사용자는 초당 2회 이상 새 글을 올릴 수 없다.
- 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없다.
- 같은 디바이스로는 주당 5회 이상 리워드를 요청할 수 없다.
우선 rate limiter가 있으면 좋은 점을 살펴보자.
- DoS 공격에 의한 자원 고갈을 방지할 수 있다.
- 비용을 절감한다. 추가 요청에 대한 처리를 제한하면 서버를 많이 두지 않아도 되고, 우선 순위가 높은 API에 더 많은 자원을 할당할 수 있다.
- 서버 과부화를 막는다.
1단계 : 문제 이해 및 설계 범위 확정
[요구사항]
- 설정된 처리율을 초과하는 요청은 정확하게 제한한다.
- 낮은 응답시간으로 HTTP 응답 시간에 나쁜 영향을 주면 안된다.
- 가능한 적은 메모리를 사용해야한다.
- 분산형 rate limiter로 여러 서버나 프로세스에서 공유할 수 있어야 한다.
2단계 : 개략적 설계안 제시 및 동의 구하기
[처리율 제한 장치를 어디에 둘 것인가?]