PlayFab 스로틀링 이해
PlayFab은 고정 창 속도 제한(fixed window rate limiting) 알고리즘을 사용합니다. PlayFab에 대한 각 API 요청은 “키”로 변환됩니다. 이 키의 값은 API 요청 헤더와 API 요청 본문의 내용에 따라 달라집니다. 각 개별 API 호출은 해당 키의 카운트를 증가시킵니다. 특정 키가 설정된 기간(속도 제한) 내에 허용된 것보다 더 많은 API 요청을 하면, 해당 키를 사용하는 추가 요청은 스로틀링됩니다.PlayFab이 특정 API 요청에 대해 키를 결정하는 방법
타이틀 전역 API 속도 제한
키는 타이틀 ID입니다.네임스페이스 전역 API 속도 제한
키는 네임스페이스 ID입니다.엔티티별 API 속도 제한
- 인증되지 않은/익명 API(예:
LoginWith[Platform]API)의 경우, 키는 클라이언트의 IP 주소입니다. - 인증된 API의 경우: 키는 요청 헤더와 요청 본문(API의 호출 엔티티와 대상 엔티티를 결정하는 데 사용됨)에 따라 달라집니다.
- API의 호출 엔티티는
X-Authorization토큰에 연결된 엔티티입니다. - API의 대상 엔티티는 요청 본문에 정의되며 API별로 다릅니다. 어떤 엔티티가 대상으로 지정되고 있는지 확인하려면 해당 특정 API의 요청 본문을 검토하세요. 예를 들어, GetUserData API는 요청 본문의 PlayFabId를 사용하여 다른 엔티티를 지정하는 것을 지원합니다.
- API 본문에 대상 엔티티가 지정되어 있지 않으면 키는 해당 호출 엔티티의 엔티티 ID입니다.
- API 본문에 대상 엔티티가 지정된 경우:
- 호출 엔티티가 MasterPlayerAccount, TitlePlayerAccount 또는 Character 엔티티 유형인 경우(예: API가 이러한 엔티티 유형 중 하나에 연결된
X-Authorization토큰으로 인증된 경우), 키는 호출 엔티티의 ID입니다. - 호출 엔티티가 이전 엔티티 유형 중 하나가 아닌 경우, 키는 대상 엔티티의 ID가 됩니다.
- 호출 엔티티가 MasterPlayerAccount, TitlePlayerAccount 또는 Character 엔티티 유형인 경우(예: API가 이러한 엔티티 유형 중 하나에 연결된
- API의 호출 엔티티는
- IP 주소가 23.192.228.80인 클라이언트가
Client/LoginWith[Platform]API를 호출합니다. API 요청의 키는 23.192.228.80입니다. - 클라이언트가
Client/LinkCustomID를 호출하고 마스터 플레이어 계정 ID 408C36ADC841C0CD에 해당하는X-Authorization토큰을 제공합니다. API의 요청 본문에 다른 엔티티 ID를 언급하는 내용이 없습니다. API 요청의 키는 408C36ADC841C0CD입니다. - 클라이언트가
Client/GetUserPublisherData를 호출하고 마스터 플레이어 계정 ID D5491A06D715E817에 해당하는X-Authorization토큰을 제공합니다. 요청 본문에서 클라이언트는 마스터 플레이어 계정 25254A5AC4AEBA55 값(예: 요청 본문에 PlayFabId:25254A5AC4AEBA55)을 제공합니다. 여기서 호출 엔티티가 마스터 플레이어 계정이므로 API 요청의 키는 D5491A06D715E817입니다. - 클라이언트가
Client/GetUserPublisherData를 호출하고 타이틀 ID 123에 해당하는X-Authorization토큰을 제공합니다. 요청 본문에서 클라이언트는 마스터 플레이어 계정 25254A5AC4AEBA55 값(예: 요청 본문에 PlayFabId:25254A5AC4AEBA55)을 제공합니다. 여기서 호출 엔티티가 타이틀이므로 API 요청의 키는 25254A5AC4AEBA55입니다.
대상 엔티티 스로틀링의 이점
대상 엔티티 스로틀링은 대상 엔티티의 유형에 따라 특정 작업에 대한 제한을 시행하는 메커니즘입니다. 이러한 제한은 시스템 안정성을 유지하고 남용을 방지하는 데 도움이 되며, 사용자에게 다음을 제공합니다.- 일관된 플레이어별 제한: 타이틀을 확장해도 개별 플레이어의 제한에는 영향을 주지 않으므로, 타이틀은 플레이어 수를 기반으로 한 용량 제한에 대한 우려 없이 플레이어 기반을 확장할 수 있습니다.
- 균일한 플레이어 스로틀링: 플레이어는 타이틀에서 얼마나 많은 사용자가 활성 상태인지에 관계없이 동일한 스로틀링 제한을 경험하므로, 개발자는 사용자 기반이 적은 경우에도 스로틀링 문제를 조기에 감지할 수 있습니다.
- 서비스 안정성: 스로틀링은 단일 플레이어의 트래픽이 PlayFab 서비스 또는 여러 타이틀에서 공유되는 특정 데이터 플레인 파티션을 압도하거나 부정적인 영향을 주는 것을 방지합니다.
