정의
프로그램 실행 빈도(받을 트래픽의 양)를 조절할 수 있는 도구
- 웹사이트나 애플리케이션에 트래픽이 갑자기 몰리면, delay, outage, crash가 생길 수 있다.
- rate limiter는 웹사이트나 프로그램이 조절할 수 있는 만큼의 비율로 요청을 받아들인다.
- 이러한 도구가 악의적으로 프로그램을 과사용 혹은 오사용의 위험을 낮춰준다.
이를 스로틀링(Throttling)이라고도 표현한다.
- hard throttling: limit 개수를 엄격히 제한
- soft throttling: 특정 비율만큼은 초과를 허용
- dynamic(elastic) throttling: 리소스가 가능할 경우 limit을 넘겨도 트래픽을 받음
규모가 큰 서비스들은 대부분 Rate Limiter 정책을 사용(주로 유저별)한다고 할 만큼 API 설계에 중요한 부분이다.
유용한 시나리오
- 웹사이트나 애플리케이션에 예상치 못한 관심을 받을 때
- 사용자 기기가 제대로 동작하지 않아서 너무 많은 요청을 보낼 떄
- 디도스 공격의 타겟이 되었을 때
- 시스템 퍼포먼스에 문제가 있어서, 해결되기 전까지 요청을 제한적으로 받을 때
Use case
- 서비스에서 동작하는 A와 B 기능이 있다.
- 이 때 A 병렬로 처리가 가능하나, B는 A가 진행되는 동안에는 사용할 수 없다.
- limit을 100이라고 했을 때, A 작업은 lock이 1씩 증가하도록 하고, B 작업은 100이 증가하도록 한다.
- 해당 방식으로 구현을 하면 A 작업은 100개까지 병렬로 처리가 가능하지만, B는 모든 A가 완료된 이후에야 lock을 획득할 수 있기 때문에 의도한 대로 동작이 가능하다.
PREVIOUS프록시, 게이트웨이