본문 바로가기
WIKI 기술 지식 베이스

레이트 리미팅

원문 보기 위키 갱신

레이트 리미팅 (Rate Limiting)

레이트 리미팅은 인바운드 트래픽 흐름을 제어해 과부하를 막고, 자원의 공정한 사용을 보장하며, 보안을 강화하고, 비용을 관리하고, 품질을 유지하며, SLA를 준수하도록 서비스를 보호해요. Linkerd는 로컬 레이트 리미팅 솔루션을 제공해 각 인바운드 프록시가 포드에 대해 리미팅을 수행해요. 배포 가이드는 Configuring Rate Limiting 작업 문서에서, 상세는 HTTPLocalRateLimitPolicy 레퍼런스 문서에서 확인할 수 있어요.

출처: Linkerd Rate Limiting

본문

레이트 리미팅은 인바운드 트래픽 흐름을 제어해 과부하를 방지하고, 자원의 공정한 사용을 보장하며, 보안을 강화하고, 비용을 관리하며, 품질을 유지하고, SLA를 준수함으로써 서비스를 보호해요.

레이트 리미팅 배포에 대한 예제 가이드는 Configuring Rate Limiting 작업 문서를, HTTPLocalRateLimitPolicy 레퍼런스 문서를 확인해 주세요.

범위

Linkerd는 로컬 레이트 리미팅 솔루션을 제공해요. 즉 각 인바운드 프록시가 포드에 대해 리미팅을 수행해요. 이는 전역 요청량을 추적하기 위해 각 서비스의 모든 레플리카를 고려하는 글로벌 레이트 리미팅과는 달라요. 전역 레이트 리미팅은 모든 것을 추적할 추가 서비스가 필요해 배포와 유지가 더 복잡해요.

공정성

HTTPLocalRateLimitPolicy CR에서는 소스와 무관하게 특정 Server에 대한 모든 인바운드 트래픽에 적용할 레이트 리미트를 선택적으로 구성할 수 있어요.

추가로 identity별 한도를 선언해 클라이언트 간 공정성을 지정할 수 있어요. 이는 특정 클라이언트가 레이트 리미트 쿼터를 모두 삼켜 다른 모든 클라이언트에 영향을 주는 것을 방지해요. (identity가 없는) 메시되지 않은 모든 소스는 단일 소스로 취급된다는 점을 참고하세요.

마지막으로, identity별로 특정 클라이언트의 구성을 재정의할 수도 있어요.

알고리즘

Linkerd는 Generic cell rate algorithm (GCRA) 으로 레이트 리미팅을 구현하는데, 이는 레이트 리미팅에 보통 쓰이는 토큰 버킷과 리키 버킷 알고리즘보다 성능이 더 좋아요.

GCRA에는 cell rate(셀 속도)와 tolerance(허용 오차)라는 두 파라미터가 있어요.

가상 스케줄링 설명에서 이 알고리즘은 이론적 도착 시간을 결정하는데, 이는 셀 속도에 해당하는 동일한 시간 간격으로 셀(요청)이 전송된다면 가지게 될 "이상적" 도착 시간을 나타내요. 요청 흐름이 그 도착 시간을 얼마나 밀접하게 따르는지는 tolerance 파라미터로 결정돼요.

Linkerd에서는 HTTPLocalRateLimitPolicy의 requestsPerSecond 항목에서 cell rate를 도출하고 tolerance는 1초로 설정돼요. 이는 장기간 요금이 한도 내로 유지되도록 보장하면서도 트래픽의 작은 변동이나 가끔 있는 버스트를 수용하는 데 도움이 돼요.

더 알아보기 (Learn more)