요율 제한 및 할당량
요율 제한 및 할당량은 CPU, 네트워크, 데이터베이스, 대기열, 외부 API와 같은 공유 리소스에 대한 수요를 관리하는 기본 역학입니다. 목표는 공정성, SLO의 예측 가능성 및 폭발, 학대 및 "시끄러운 이웃" 으로부터의 보호입니다.
1) 기본 개념
속도 제한-요청/작업 강도 (req/s, msg/min, bytes/sec) 를 제한합니다.
버스트-평균 요율에 대한 허용 가능한 단기 버스트.
쿼터 - 시간당 볼륨 제한 (문서/일, GB/월).
동시성 한도 - 동시 운영 제한 (동시 요청/작업).
범위-범위: 임차인 당, 사용자 당, 토큰 당, 엔드 포인트 당, IP 당, 지역당, 기능 당.
2) 알고리즘 제한
2. 1 토큰 버킷
매개 변수: 'rate' (토큰/초), 'burst' (버킷 크기).
"신용" 과 같은 작품: 누적 된 토큰은 짧은 피크를 허용합니다.
외부 API 및 사용자 요청에 적합합니다.
2. 새는 양동이 2 개
부드럽게 흐름을 일정한 속도로 "피를 흘립니다".
민감한 백엔드로의 트래픽을 매끄럽게하는 데 좋습니다.
2. 3 고정/슬라이딩 창
고정 창: 단순하지만 "창 전환" 에 취약합니다.
슬라이딩 창: 보다 정확하지만 계산적으로 더 비쌉니다.
2. 4 GCRA (일반 세포 속도 알고리즘)
가상 도착 시간 측면에서 동등한 토큰 버킷.
분산 리미터에 대해 정확하고 안정적입니다 (상충되지 않는 상태).
2. 5 동시성 한계
동시 작업 제한
스레드/연결 풀의 고갈 및 헤드 오브 라인 차단으로부터 보호합니다.
3) 제한을 적용 할 수있는 곳
국경에서 (L7/API 게이트웨이): 주요 장벽, 빠른 고장 (429/503), 저렴한 점검.
내부 서비스: 대규모 운영을위한 추가 한도 (수출, 보고서, 변환).
외부 시스템으로 나갈 때: 제 3 자에 대한 개인 제한 (벌칙).
대기열/작업자: 공유 수영장의 공정성.
4) 스코프 및 우선 순위 (멀티 테넌트)
할 수 없음: 글로벌 → 영역 → 테넌트/계획 → 사용자/토큰 → 엔드 포인트/기능 → IP/장치.
우선 순위 인식: VIP/Enterprise는 더 많은 '버스트' 와 무게를 얻지 만 전체 SLO를 깨뜨리지는 않습니다.
제한 구성: 총 공차 = 'min (글로벌, 지역, 테넌트, 사용자, 엔드 포인트)'.
5) 볼륨 할당량
일일/월 할당량: 문서/일, GB/월, 메시지/분.
소프트/하드 임계 값: 경고 (80/90%) 및 하드 스톱.
롤업: 객체 (테이블, 파일, 이벤트) 및 "철회" 를 통해 청구합니다.
6) 분산 리미터
요구 사항: 낮은 대기 시간, 일관성, 내결함, 수평 스케일링.
로컬 + 확률 동기화: 로컬 샤드 버킷 + 주기적 동기화.
센트럴 스토어: Redis/KeyDB/Memaccashed lUA/원자 작전 (INCR/PEXPIRE).
샤딩: 균일 한 분포를 가진 '한계: {scope}: {id}: {창}' 형식의 키.
시계 왜곡: 클라이언트가 아닌 리미터 서버에 "진실" 을 저장하십시오.
Idempotency: Idempotency-Keys는 잘못된 청구를 줄입니다.
7) 남용 방지 및 보호
공개 엔드 포인트에 대한 Per-IP + 장치 지문.
변칙적 인 작업 증명/CAPTCHA.
UX가 더 중요 할 때 완전한 고장 대신 둔화 (스로틀 링) (검색 프롬프트).
적응 한계: 사고/고가의 분해에 대한 임계 값의 동적 감소.
8) 클라이언트 동작 및 프로토콜
코드: '429 너무 많은 요청' (속도), '403' (할당량/계획 초과), '503' (보호 저하).
모범 사례:- 다시 시도할 때 '재시도 후: <초 또는 HTTP- 날짜>' -
- 'RateLimit-Limit: <한계>; w = <창>'
- 'RateLimit-Remaining:
' - 'RateLimit 재설정: <초>'
- 백오프: 지수 + 지터 (전체 지터, 동일 지터).
- 이념성: 'Idempotency-Key' 헤더 및 안전한 작업의 반복성.
- 시간 초과 및 취소: 제한을 "캡처" 하지 않도록 정지 된 요청을 올바르게 중단합니다.
9) 관찰 및 테스트
계획: '테넌트 _ id', '계획', '사용자 _ id', '엔드 포인트', '지역', '결정' (허용/거부), '이유' (할당량/비율/동시성).
측정 항목: 처리량, 429/403/503 실패율, p95/p99 리미터 지연, 키 캐시 적중률, 계획 할당.
감사 로그: 블록 원인, 상단 "잡음" 키.
테스트: 로드 프로파일 "saw/burst/plateau", 혼돈-Redis/shard 고장, 클럭 비 동기화.
10) 청구와의 통합
사용 카운터는 테두리에서 수집되며 배치 (N 분마다) 와 dempotency로 집계됩니다.
계획 요약: 초과 지출 → 과충전 또는 계획 증가.
불일치: 조정 사용 대 송장; 델타에 경고합니다.
11) 내부의 공정성 (대기열, 근로자)
Weighted Fair Queuing/DRR: 계획 중량별로 슬롯을 세입자에게 할당.
임차인 1 인당 수영장: VIP/잡음의 엄격한 격리.
입학 통제: 할당량이 소진 된 경우 실행 전에 실패; 대기열이 부풀어 오르지 않습니다
동시성 캡: 동시 무거운 bs을 제한하십시오.
12) 전형적인 계획 프로필 (예)
yaml plans:
starter:
rate: 50 # req/s burst: 100 concurrency: 20 quotas:
daily_requests: 100_000 monthly_gb_egress: 50 business:
rate: 200 burst: 400 concurrency: 100 quotas:
daily_requests: 1_000_000 monthly_gb_egress: 500 enterprise:
rate: 1000 burst: 2000 concurrency: 500 quotas:
daily_requests: 10_000_000 monthly_gb_egress: 5000
13) 건축 참조 (언어 체계)
1. Edge/API 게이트웨이: SL → 컨텍스트 추출 (테넌트/플랜) → 체크 제한/할당량 → 위치 RateLimit 헤더 → 로그/추적.
2. 정책 엔진: 우선 순위 규칙 (VIP), 적응 임계 값.
3. Limiter Store: Redis/KeyDB (원자 작전, LUA), 키 샤딩, 복제.
4. 서비스: 중공업을위한 2 차 제한 및 한도; demempotency; WFQ/DRR 대기열.
5. 사용/청구: 수집, 집계, 송장, 임계 값 별 경고.
6. 관찰 가능성: 태그 된 메트릭/로그/트레일, 임차인 당 대시 보드.
14) 사전 판매 점검표
- 제한 범위 (테넌트/사용자/토큰/엔드 포인트/IP) 및 해당 계층 구조가 정의됩니다.
- 선택된 알고리즘 (Token Bucket/GCRA) 및 'rate/burst' 매개 변수.
- 중대한 운영을위한 동시성 상한 및 입학 통제 구현.
- 'RateLimit-' 및 'Redue-After' 헤더를 포함합니다. 클라이언트는 backoff + jitter를 지원합니다.
- 리미터가 분배되고 내결함성이 있습니다 (파편, 복제, 분해).
- 사용 수집은 demmpotent입니다. 청구 번들, 초과 지출 경고.
- 관찰 가능성: 메트릭/트레일/태그 로그, 상단 "잡음" 키, 대체.
- 테스트: 버스트, "톱", 스토어 고장, 시계 왜곡, 콜드 스타트.
- 고객 문서: 계획 제한, 429/재시도 후 예, 모범 사례를 다시 트레이하십시오.
- 배제 정책: 일시적으로 한계를 높이는 방법.
15) 전형적인 오류
임차인이없는 글로벌 한도 - "시끄러운 이웃" 은 모든 SLO를 깨뜨립니다.
'버스트' 부족: UX는 짧은 버스트로 어려움을 겪습니다.
고정 창 만 사용하면 "창 테두리에 이중 적중" 이 발생합니다.
반복의 폭풍으로 지터 및 배상이 없습니다.
서비스/대기열에 캡이없는 경계에서만 제한합니다 → 내부 "교통 체증".
응답에서 한계를 거부하지 않음 ('Redure-After', 'RateLimit-') → 클라이언트는 적응하지 않습니다.
OLTP 데이터베이스에서 리미터 상태의 저장 → 높은 대기 시간 및 핫 잠금 장치.
16) 빠른 전략 선택
최고점을 가진 공개 AP: 토큰 버킷 + 큰 '버스트', RateLimit-헤더, CDNA/에지 캐시.
내부 무거운 bs: 동시성 캡 + WFQ/DRR, 입장 제어.
제 3 자와의 통합: 별도의 출구 제한, 완충/배상.
SaaS 멀티 테넌트: 제한 계층 구조 (전역 → 테넌트 → 사용자 → 종점), VIP 우선 순위 지정, 월별 할당량.
결론
좋은 요금 제한 및 할당량은 플랫폼과 클라이언트 간의 시스템 계약입니다. 정직한 리소스 점유율, 스파이크 저항, 예측 가능한 SLO 및 투명한 청구. 알고리즘 (Token/GCRA + 동시성 캡) 을 결합하고 ospreys의 계층 구조를 구현하고 명확한 헤더 및 메트릭을 제공하며 실제 트래픽 프로파일에서 체계를 정기적으로 확인하십시오.