Limit階層
制限は、時間/ボリューム/値の操作の形式化された制限です。iGamingとFintechでは、制限が安全、規制遵守、リスク管理の基礎となっています。リミット階層は、二重支出、賭け/預金、ボーナスの乱用、責任あるプレーの違反を防ぐために、どのルールが最も重要であり、どこで実行されるかを指定します。
1)限度の分類
適用強度によって
ハード-insurmountable(操作禁止)。
ソフト-警告/摩擦(キャプチャ、確認)、繰り返したときにハードにエスカレーション。
自然に
現金:預金金額/レート/支払い;毎日/毎週/毎月の限界。
時間:セッション時間、休憩、「冷却」、タイムアウト。
定量的:トランザクションの数、スピン、APIリクエスト。
料金制限:RPS/競争。
クォータ:ウィンドウごとのアクションの予算(1日あたりのN/週)。
コンテキスト:ゲーム/プロバイダー/支払方法/デバイス/国によって。
オーナー様
規制/ブランド(テナント/地域)
システム(プラットフォーム、インフラ保護)
ユーザー定義(RG内の自己制限)
2)測定とキー(スコーピング)
各制限はコンテキスト(キー)にバインドされます):
tenant_id · region · license · currency · channel · brand player_id · kyc_tier · rg_state · age game_id · provider_id · product (casino/sports/live)
payment_method · device_fingerprint · ip_asn
キーの精度が高ければ高いほど優先度が高くなります(下の階層を参照)。
3)階層と優先順位(最も具体的な勝利)
一般的なレベルから特定のレベルまで整理しましょう:
GLOBAL_DEFAULT
< TENANT/BRAND
< REGION/LICENCE
< PRODUCT/PROVIDER/GAME
< CURRENCY/CHANNEL/PAYMENT_METHOD
< PLAYER (KYC/RG)
< SESSION/DEVICE
<REQUEST (idempotency-key operation)
ルール:
- 狭いコンテキストはwide: player> regionと重なります。
- 任意の明示的な拒否ウィンが許可されます。
- ソフト/ハードの競合はハードに有利に解決されます。
- クォータ/ウィンドウのマージでは、最小許容値(min-cap)が勝ちます。
4)データモデル(簡略化)
sql
CREATE TABLE limits (
id bigserial primary key,
scope jsonb, -- context keys (tenant, region, player_id,...)
kind text, -- bet_amount, deposit_daily, rps_api, payout_single, session_duration type text, -- HARD SOFT QUOTA RATE value numeric, -- sum/qty/seconds/ops window_sec int, -- for QUOTA/RATE, else null burst int, -- for RATE token-bucket currency text, -- if applicable reason_code text, -- regulator/product/security valid_from timestamptz,
valid_to timestamptz,
priority int default 0, -- manual specificity overlide created_by text,
created_at timestamptz default now()
);
CREATE TABLE limit_counters (
key_hash text primary key, -- hash(scope,kinda,window_start)
window_start timestamptz,
consumed numeric, -- money/pcs/sec updated_at timestamptz
);
Idempotence:すべての操作は'operation_id';カウンタのインクリメントは、一度実行されます(バージョンに応じて受信トレイ/送信トレイまたは比較スワップ)。
5)評価アルゴリズム
1.「種類」で候補者を集め「、スコープ」を越えます。
2.特異度(一致した測定数)と「優先度」によるランキング。
3.パラメータ範囲:硬度(hard> soft)、 min-cap、 min-window。
4.クォータ/レート制限:token-bucket (RATE)+fix/sliding window (QUOTA)をチェックします。
5.'ALLOW | SOFT_WARN | DENY'+'retry_after'/'return'。
6.トレースレコード:イベントとメトリックを監査します。
json
{
"decision":"DENY",
"kind":"deposit_daily",
"remaining":0,
"window_reset_at":"2025-10-31T21:00:00Z",
"matched_limit_id":12345,
"policy":"REGULATORY",
"reason":"DAILY_CAP_REACHED"
}
6)執行ポイント
APIゲートウェイ-インフラストラクチャ保護:RATE (RPS)、 CONCURRENCY、 burst。
ドメインサービス-セマンティックリミット:預金、レート、支払い、セッション。
プロバイダアダプタ-重複/ローカルプロバイダの制限(呼び出す前に検証)。
クライアントUX-予防プロンプト(SOFT)、 「N左」、タイマー。
ルール:一度クォータ/トークンを書き込みます-操作が取り返し不能になります(ウォレット/有効な認証ステップをバックアップした後)。
7)現金限度額: デポジット/レート/ペイアウト
通貨ごと:即座にFX経由ではなく、取引通貨に限界を保存します。
最小/最大:'min_bet'、 'max_bet'、 'max_payout_single'。
Windows: 'deposit_daily/weekly/monthly'(たとえば、ライセンスタイムゾーン)。
構成:最終許可範囲=交差(地域∩ブランド∩カスタム)。
8)責任あるプレー(RG)
自己制限(プレイヤーが自分自身に尋ねた)は、ブランドのものよりも常に厳しいです。
制限時間:'session_duration'、 'cool_off'、 'self_exclusion'。
エスカレーション:ソフトリミット→警告を超え、ハード→(ウィンドウ内)を繰り返します。
監査:各RGの変更は非横方的に記録されます(who/when/why)。
9)レート制限vsクォータ: when what
レート制限(トークンバケット/漏れ):サージ保護;ゲートウェイ/アダプタに適用します。
クォータ(固定/スライディングウィンドウ):アクション/お金の総予算を管理します。ドメイン( 、 に適用 ます。
頻繁に一緒に使用される:'RATE'(インスタントピーク)+'QUOTA'(毎日の予算)。
10)複数のテナントおよび複数の地域
制限には常に'tenant_id'と'region/license'が含まれます。
レジデンシー:カウンターとストレージ-「ホーム」地域。
公平性: テナントプールごとに別々のRATE/QUOTAを使用するため、他のSLOを混乱させることはありません
11) Idempotencyおよび一貫性
'operation_id'のコマンド';繰り返し'消費'を増やすべきではありません。
マネーの場合-厳密なパス:1つのトランザクション/サーガ(TCC)のウォレットリザーブと増分カウンター。
RATEの場合-原子増分/倉庫の現在のウィンドウを使用します。
12)観測可能性
メトリクス:- 'limit_eval_p95_ms'、' decision_rate {ALLOW、 DENY、 SOFT}'、
- 'quota_remaining_percent'を主な種で、
- 'rate_slottled'、 'burst_dropt'、
- 'rg_self_limit_hits'、' regulatory_hits'。
'matched_limit_id'、 'scope_hash'、 'operation_id'、 'window_start/reset'、 'remaining'。
アラート:しきい値に対する'DENY'/'429'の増加、規制キャップの頻繁な達成、プレーヤー/デバイスによる「ホットキー」。
13)バージョン管理と監査
各ルールには'valid_from/valid_to'、 'created_by'、 'reason_code'があります。
^^^^:'LimitCreated/Updated/Deleted'、 'LimitHit'、 'LimitDenied'。
アクティブなルールの「スナップショット」を保持して、歴史的な決定を再現します(紛争準備ができています)。
14)テスト
契約テスト:スキームと特定/優先順位の範囲。
プロパティベース:「最も特定の勝利」、「deny wins allow」、 「min-cap」。
ゴールデンケース:一連の参照競合(テナントと地域、RGとブランド)。
カオス:リクエストスパイク(RATE)、カウントレース、リピートコマンド(idempotency)。
E2E:レギュレータ(デポジット/週/月)のチェックリストで一致を制限します。
15)プレイブック
1.ストーム429/ゲートウェイでスロットリング
同時性を低減し、トークンバケットを一時的に増加させ、クリティカルパスの優先順位付けを可能にし、ソース(ASN/IP)を分析します。
2.規制上限による大量障害
チェックウィンドウのスケジュールとタイムゾーン;soft-UX(説明)を延長し、コンプライアンスを通知します。
3.レースによる誤った肯定的な失敗
"player_id/kind'キーでシリアル化を有効にし"、operation_id"でCAS/dedupに切り替えます。
4.プロバイダ制限との不一致
ゲームごとにmin/maxを同期させ、アダプターに事前検証を追加し、一時的にゲームカタログ/配置を下げます。
16)典型的なエラー
ルール間の階層→タグ・オブ・ウォーの欠如。
サーバー検証なしのUIでの制限の計算。
レート制限(およびその逆)によるクォータの置換。
通貨/ステップを通貨制限(CLP/JPY)で無視します。
idempotency→double quotaの書き込みなし。
すべてのテナントのための単一のRATEプール→せん断問題。
監査→失敗は説明できません。
17)クイックレシピ
入札受諾:'max_bet'=min (region、 game、 provider、 user RG);レート/ベット。place'=20 rps/player、 QUOTA=500ベット/日。
預金:'deposit_daily/monthly'+'deposit_single';PSPの制限を事前検証します。
セッション:'session_duration'ハード+リマインダー毎分N(ソフト)。
API保護:キー'ip_asn'と'tenant_id'によるグローバルRATE;リリースのためのカナリアウィンドウ。
18)売り上げ前のチェックリスト
- ほとんどの特定の勝利、拒否>許可。
- 「スコープ」「種類」「タイプ」「ウィンドウ」「通貨」「優先順位」のデータモデル。
- アプリケーションポイント:ゲートウェイ(RATE)、ドメイン(QUOTA/money)、アダプター(provider)。
- Idempotency ('operation_id')とキーによるシリアライズ;カウンターは原子です。
- Observability:ソリューションメトリック、ウィンドウラグ、アラート;'matched_limit_id'でトレースします。
- 変更および作動のバージョン管理および変更不可能な監査。
- テストパック:contract/property/golden/chaos/E2E。
- マルチテナントの公平性とデータレジデンスが満たされました。
- UX for SOFT limits:フレンドリーメッセージ、'return/retry_after'。
- インシデントプレイブックは、コンプライアンスとサポートに準拠しています。
結論
限界階層は決定システムであり、異なる数字の集合ではありません。明確な特異性と優先順位、単一のデータモデル、適切なアプリケーションポイント、アイデンポテンスとオブザビリティにより、制限はテナント、地域、製品全体にわたる堅牢な安全性とコンプライアンスループに変わり、成長を妨げません。