Stripe는 예측 불가능한 워크로드, 멀티테넌시 환경, 공정한 사용 보장, 낮은 우선순위 요청 관리, 예측 가능한 지연 시간 유지 및 연쇄 실패 방지를 위해 다계층 속도 제한 아키텍처를 구축했습니다. 🚧
핵심 설계 원칙은 여러 독립적인 보호 계층, 서비스 중단보다는 성능 저하 우선, 속도 제한기 실패 시 API 가용성 유지 (fail-open), 그리고 우선순위에 따른 지능적인 로드 셰딩입니다. 🛡️
첫 번째 계층은 '요청 속도 제한기'로, 사용자/테넌트당 초당 N개의 요청을 제한하는 일반적인 토큰 버킷 알고리즘을 사용하며, 플래시 세일과 같은 이벤트에 맞춰 테넌트별로 구성 가능합니다. ⏱️
두 번째 계층은 '동시 요청 제한기'로, 특히 리소스 집약적인 엔드포인트에 대해 동시에 처리 중인 요청 수를 제한하여, 몇몇 고비용 요청이 전체 시스템 리소스를 독점하는 것을 방지합니다. ↔️
세 번째 계층은 '플릿 사용량 로드 셰더'로, 전체 서버 플릿 용량의 최소 일정 비율(예: 20%)을 중요 요청을 위해 예약하여, 비중요 요청이 해당 비율을 초과할 경우 총 용량이 남아있더라도 요청을 거부하는 방어적인 전략을 사용합니다. ⛽
네 번째 계층은 '워커 활용 로드 셰더'로, 개별 워커/서버 수준에서 작동하는 최후의 방어선입니다. 대규모 장애 시 낮은 우선순위 트래픽(예: 테스트 모드, GET 요청)을 제거하고 중요 및 고우선순위 요청(예: POST, 중요 메서드)에 리소스를 집중시켜 핵심 기능을 유지합니다. 🚨
Stripe의 이러한 다계층 속도 제한 전략은 엔지니어링이 비즈니스 연속성을 최우선으로 보장하고, 중요하지 않은 트래픽을 희생해서라도 핵심 운영을 유지하는 비즈니스-엔지니어링 간의 긴밀한 연계를 보여줍니다. 🤝