rate-limiting

2 개의 포스트

Piqama: 핀터레 (새 탭에서 열림)

핀터레스트는 빅데이터 플랫폼과 온라인 서비스 전반에서 발생하는 다양한 자원 임계치를 효율적으로 관리하기 위해 통합 쿼타 관리 에코시스템인 'Piqama'를 구축했습니다. Piqama는 CPU, 메모리 같은 물리적 자원부터 QPS, 네트워크 대역폭 등 서비스 지표에 이르기까지 광범위한 리소스의 생명주기를 관리하며, 실시간 쿼타 전파와 사용량 예측을 통한 최적화 기능을 제공합니다. 이를 통해 조직 내 리소스 활용도를 극대화하는 동시에 시스템의 안정성과 가용성을 동시에 확보하고 있습니다. ### 통합 쿼타 관리 아키텍처 및 포털 * Piqama는 다양한 플랫폼과 시나리오를 수용할 수 있는 범용 플랫폼으로 설계되어, 서비스별로 고유한 강제 로직을 사용하거나 Piqama의 기본 메커니즘을 선택하여 적용할 수 있습니다. * REST 및 Thrift API를 지원하는 중앙 집중식 관리 포털을 통해 사용자가 쿼타 설정을 시각화하고 검색할 수 있어 운영상의 실수를 최소화합니다. * 전체 시스템 아키텍처는 관리 포털, 실시간 업데이트 디스패처, 그리고 오프라인 거버넌스 및 최적화 도구들로 구성되어 유기적으로 동작합니다. ### 쿼타 생명주기 관리 * **스키마 및 검증:** 워크로드 간의 계층적 관계를 포함한 쿼타 스키마를 정의하며, 플러그형 프레임워크를 통해 할당량이 전체 클러스터 용량을 초과하지 않도록 보수적인 검증을 수행합니다. * **업데이트 승인 및 배포:** 소유권 기반의 권한 모델을 통해 안전하게 쿼타를 수정하며, 핀터레스트의 설정 배포 시스템(PinConf) 등을 활용해 변경된 쿼타 값을 지연 시간 없이 각 클라이언트 시스템에 방송합니다. * **강제 적용 전략:** 리소스 사용량이 할당량을 초과할 경우, 데이터 경로에서 즉각적으로 요청을 차단하거나 서비스의 중요도에 따라 차등적인 제재를 가하는 기능을 제공합니다. ### 거버넌스 및 자동 최적화(Auto-rightsizing) * **데이터 피드백 루프:** Piqama 클라이언트는 실제 사용량 및 강제 적용 통계를 투명하게 수집하며, 이 데이터는 분석을 위해 Amazon S3의 Apache Iceberg 포맷으로 저장 및 사전 집계됩니다. * **예측 기반 조정:** 수집된 통계를 바탕으로 과거 사용 패턴, 유기적 성장, 트래픽 급증 사례를 분석하여 리소스 부족을 방지하고 활용되지 않는 자원을 회수하는 자동 권장 규모 설정 서비스를 운영합니다. * **비용 관리 연계:** 자원 사용량을 실제 비용으로 환산하는 차지백(Chargeback) 시스템을 통해, 예산 범위를 초과한 프로젝트의 자원 우선순위를 자동으로 낮추는 등의 비용 통제 기능을 수행합니다. ### 실제 적용 사례: 용량 기반 및 속도 제한 쿼타 * **빅데이터 플랫폼(Moka):** Apache Yunikorn 스케줄러와 연동하여 각 프로젝트별로 최소 보장 자원(Guaranteed)과 최대 자원(Maximum)을 동적으로 할당하며, 배치 작업의 병렬 실행 수를 제어합니다. * **온라인 저장 서비스:** 실시간 서비스의 안정성을 위해 QPS 및 대역폭 기반의 속도 제한(Rate-limiting) 쿼타를 적용하여 특정 서비스의 폭주가 전체 시스템에 영향을 주지 않도록 관리합니다. 성공적인 쿼타 관리를 위해서는 단순히 상한선을 설정하는 것에 그치지 않고, 실제 사용량 데이터를 기반으로 한 자동화된 우측 최적화(Right-sizing)와 비즈니스 예산을 연계한 거버넌스 체계를 구축하는 것이 중요합니다. Piqama와 같은 통합 에코시스템은 대규모 인프라 운영 환경에서 자원 낭비를 줄이고 운영 효율을 획기적으로 높이는 핵심 도구가 됩니다.

에어비앤비의 키-값 저장소에서 정적 속도 제한에서 적응형 트래픽 관리로 (새 탭에서 열림)

에어비앤비는 분산 키-밸류 저장소인 'Mussel'의 트래픽 관리 방식을 단순 요청 횟수 제한(QPS)에서 자원 기반의 적응형 제어 시스템으로 진화시켰습니다. 이 시스템은 요청의 실제 비용을 계산하는 자원 인식형 속도 제한(RARC)과 우선순위 기반의 부하 차단(Load Shedding) 계층을 도입하여 시스템의 유용 작업량(Goodput)을 극대화합니다. 결과적으로 Mussel은 예기치 못한 트래픽 급증이나 DDoS 공격 상황에서도 핵심 서비스의 성능을 안정적으로 유지할 수 있게 되었습니다. ### 정적 QPS 제한의 한계와 자원 인식형 제어(RARC)의 도입 기존의 단순 QPS 제한 방식은 요청의 복잡도와 상관없이 동일한 할당량을 차감했기에 효율적인 자원 관리가 불가능했습니다. * **비용 가변성 해결**: 단일 행 조회와 수만 행의 스캔 작업을 동일하게 취급하던 문제를 해결하기 위해, 행 수, 바이트 크기, 대기 시간(latency)을 결합한 '요청 단위(RU, Request Unit)' 개념을 도입했습니다. * **RU 계산 모델**: 읽기 비용은 $1 + w_r \times \text{읽은 바이트} + w_l \times \text{대기 시간}$과 같은 선형 모델을 통해 산출되며, 이는 하드웨어 리소스(CPU, I/O)에 가해지는 실제 부하를 더 정확하게 반영합니다. * **토큰 버킷 알고리즘**: 각 디스패처(Dispatcher)는 짧은 에포크(Epoch)마다 할당된 RU를 로컬 토큰 버킷에 채우고, 요청마다 실시간으로 계산된 비용을 차감하여 할당량 초과 시 즉각적으로 요청을 거부합니다. ### 지연 시간 비율 기반의 적응형 부하 차단 트래픽이 급격히 변하거나 특정 샤드에 병목이 발생할 때, 시스템 전체의 붕괴를 막기 위해 실시간 신호를 기반으로 한 부하 차단 메커니즘을 운용합니다. * **지연 시간 비율(Latency Ratio) 활용**: '장기 p95 지연 시간'을 '단기 p95 지연 시간'으로 나눈 비율을 시스템 스트레스 지표로 사용합니다. 이 비율이 설정값(예: 0.3) 이하로 떨어지면 시스템 부하가 급증한 것으로 판단합니다. * **임계치 기반의 단계적 대응**: 시스템 스트레스가 감지되면 낮은 우선순위의 클라이언트 그룹부터 RU 비용을 가중해 부과함으로써 자연스럽게 트래픽 백프레셔(Backpressure)를 유도합니다. * **P² 알고리즘 적용**: 고정된 메모리 내에서 대기 시간의 백분위수(Percentile)를 추정하는 P² 알고리즘을 사용하여, 별도의 샘플 저장소나 노드 간 통신 없이도 개별 디스패처가 신속하게 의사결정을 내릴 수 있습니다. ### 데이터 접근 패턴 최적화 및 안정성 확보 단순히 요청을 차단하는 것을 넘어, 데이터 접근의 불균형으로 인한 병목 현상을 해결하는 메커니즘을 포함합니다. * **핫키(Hot-key) 탐지 및 완화**: 특정 키에 대한 요청이 집중되는 패턴을 실시간으로 감지하여, 백엔드 저장소에 도달하기 전 캐싱하거나 중복 요청을 하나로 합치는(Coalescing) 방식으로 저장소 계층을 보호합니다. * **트래픽 분리 및 고립**: 특정 클라이언트의 데이터 패턴으로 인해 발생한 병목이 전체 클러스터로 전이되지 않도록 격리 수준을 높여 다중 사용자(Multi-tenant) 환경의 안정성을 강화했습니다. 멀티 테넌트 환경의 대규모 시스템을 운영한다면 단순한 횟수 기반의 제한보다는 자원 소비량을 기반으로 한 RU 모델과 시스템 상태에 반응하는 적응형 부하 차단 전략을 도입하는 것이 서비스 가용성 확보에 훨씬 유리합니다.