運用と→管理運用インフラストラクチャのスケーリング
運用インフラのスケーリング
1)なぜ「スケーリング」と見なされるのか"
スケーリングは、SLOを失うことなく、制御コストでスループット(RPS/TPS、接続、IOPS、スループット)とデータ量を増加させるプラットフォームのシステム能力です。iGaming/fintechの場合、これは直接お金についてです:入金/賭けの変換、ライブゲームや決済。
目的:- SLOをX倍の負荷増加と季節のピークに保ちます。
- 予測可能なスケーリング時間(分、時間ではなく)を提供します。
- 経済を節約する:コスト/RPS、コスト/トランザクション、コスト/1kイベント。
2)拡張可能なプラットフォームの原則
1.水平最初:小さい、ステートレスなサービスへの分割;status-データクラスタ内。
2.背圧とキュー:スムージングバースト、「嵐」に対する保護。
3.すべてのレイヤーでのキャッシュ:client/edge/service/database。
4.Idemotenceと再現性:安全なリトリート、アウトボックス、デッドアップ。
5.制約のある依存関係:タイムアウト、ブレーカ、隔壁分離、レート制限。
6.容量信号による観測性:ヘッドルーム、p95/p99、ラグ、接続、クォータ。
7.ガードレールによる自動スケーリング:HPA/VPA/クラスターオートスケーラー+停止条件。
8.設計による複数の地域:独立した爆破地帯、ローカルデータ、安定したfylovers。
3)容量計画: 「必要な量を計算する方法」
モデル入力:ターゲットピークTPS、トラフィックプロファイル(1時間)、「クリティカルパス」、キャッシュヒット率、平均ペイロード、SLO、プロバイダの制限。
クイックアセスメント(rule-of-thumb):- RPS→CPU/pod: 'pods=RPS p99_time/effective_CPU_in_pod'(マージンは30〜50%)。
- キュー:'minimum_speed_of_consumers ≥ peak_speed_of_producers 1。2`.
- DB接続:'max_conns=active_service_pools medium_pool_size 1。3`.
- キャッシュ:size=「N分でホット作業セット」+20-30%マージン。
- Egress/CDN: peak egress=peakリクエストの平均応答サイズ(圧縮を考慮)。
ヘッドルーム:20-40%ピーク時の目標(層によって)。15%以下→「容量アップリフト」トリガー。
4)レイヤーとスケーリングパターン
4.1 エッジ/CDN/WAF
エッジキャッシング(TTL+SWR)、ジオバランス、圧縮、HTTP/2/3。
IP/JWT/keyによる周囲の速度制限、サージ保護。
ブローカー/パブ/サブチャンネルを通じたイベントファンアウト(ジャックポット、ライブアラート)。
4.2バックエンド・フォー・フロントエンドAPIゲートウェイ
スタトルによる水平スケーリング、ダウンストリームによる専用プール。
ビジネスメトリクスによるHPA: RPS、 p99、ワークプールキュー-CPUだけではありません。
4.3非同期キュー/ストリーミング(Kafka/Rabbit/Pulsar)
当事者と消費者によるスケール;skew(キーとディストリビューション)を避けます。
遅延アラート+消費者の自動スケーリング;DLQと再試行のトピック。
SLAの調整とリプレイの下での保持。
4.4キャッシュ(Redis/Memcached)
クラスタモード、レプリカ、立ち退きポリシー(LFU)、マルチジェット、パイプライン。
ホットキーとバックグラウンドタスク、クライアント制限、最大メモリポリシーの分離。
4.5データベース
レプリカと読書ルーティング、接続プールを読んでください。
地域/テナント/キー範囲によるシャーディング。
CQRS:マスター/リーダーに書き込み、レプリカに読み込みます。
インデックス作成と一括作成ワークフロー(outbox→stream→sink)
アーカイブとホット/コールドデータ(階層化)。
4.6ファイル/オブジェクトストア
マルチスレッド、マルチパートダウンロード、CDNフロント、非同期変換。
プロバイダのクォータ、テールクリーニング、排出予算。
4.7プロバイダー(PSP/KYC/スタジオ)
マルチベンダーと見積もり/SLO/コストルーティング。
各プロバイダ、リトレイキュー、「グレースモード」の回路ブレーカ+レート制限。
5)自動スケーリングおよび監視柵
Kubernetes:- HPA: 'rps_per_pod'、 'queue_depth'、 'p99_latency'; 'targetAverageValue'。
- VPA:リソースガイドライン;ピークから更新してください。
- クラスタオートスケーラー:優先順位を持つスポット+オンデマンドプロファイル。
- PodDisruptionBudget/TopologySpreadConstraints:ゾーン全体で統一。
- LimitRange/ResourceQuota:「酔った」デプロイに対する保護。
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: api-gw}
minReplicas: 8 maxReplicas: 200 metrics:
- type: Pods pods:
metric:
name: rps_per_pod target:
type: AverageValue averageValue: "120"
- type: Pods pods:
metric:
name: p99_latency_ms target:
type: AverageValue averageValue: "280"
behavior:
scaleUp:
stabilizationWindowSeconds: 90 scaleDown:
stabilizationWindowSeconds: 300
ガードレール(例):
- 「Pause&Rollback」、 canary p99> 1の場合。3 ×ベースライン10分。
- 「フリーズスケールダウン」プライムタイムでは、スケールアップのみ。
- 'open_circuit=1'の「Stop retries」をボトルネックにします。
6)複数の地域: 資産/資産および資産/責任
ブラスト分離された領域:独立したクラスタ、ローカル秘密/クォータ。
グローバルルーティング:遅延/ジオベース、ヘルスプローブ、手動オーバーライド。
- ホット-ローカル+最終的なレプリケーション(ストリーム)。
- 重要なトランザクション-ドメイン(レジャー/残高)によって整合性があります。
- フェイルオーバープレイブック:ステップバイステップのソース変更、TTL、ウォームアップキャッシュ。
- 練習規則(DR): RTO/RPOの目標を持つ四半期ごとのトレーニング。
7)ネットワークおよびサービスパターン
サービスメッシュ:mTLS、再試行/ブレーカ、アウトリア検出、ダウンストリーム当たりの制限。
L4/L7のeBPF/Observability、接続限界、ヘッド・オブ・ライン保護。
S2S、一般的なレート制限および監査のための内部APIゲートウェイ。
ブラストゾーンによるVPC/サブネット、 NAT/Egressコントロール、ベンダーとのピアリング。
8)性能: テストおよび証拠
プライムタイム+ワーストケースプロファイルの負荷と応力。
Soak (long)-メモリ/ディスクリプタのリーク、レイテンシの増加。
Chaos/game-days:ブローカー/プロバイダ/ゾーンドロップ、「slow provider」。
Perf regressions in CI:参照シナリオと自動ゲートのセット。
9)データとストレージ: 成長戦略
天井への垂直成長→水平/シャーディング。
読み取り→レプリカ/キャッシュ;記録→batch/asynchron/log。
スキーママイグレーション:展開→マイグレート→コントラクト、グローバルロックなし。
アーカイブ:安価なストレージへのコールドバッチ+オンデマンドの再水和。
Search: incremental updates pipelineの個別インデックス(OpenSearch/Solr)。
10)プロバイダとクォータの管理
クォータカード(TPS、窓、費用);alerts 'usage_ratio> 0。9`.
コスト/品質によるルーティング(スマートルーティング)。
OLA ↔ SLO契約とクォータ増加プロセス。
選択肢のプールと「ホット」スイッチング。
11)観測性およびスケーリング信号
メトリック(最小):- 容量ヘッドルーム'queue_lag/backlog growth'; 'kafka ISR'; 'db connections'/'repl lag'; 'redis evictions'; 'open_circuit'/'retry_rate'; 'quota_usage'。
- ビジネスメトリクス:成功率/デポジット変換、ゲーム開始時間。
- コスト:コスト/RPS、 コスト/1kコール。
- 容量の概要(ヘッドルーム、トップリスク、バーンレートSLO)。
- ストリーム&キューパネル(遅延/バックログ、消費者飽和)。
- DBとキャッシュ(p99、接続、ヒット/立ち退き)。
- プロバイダと見積もり(TPS、タイムアウト、コスト、スイッチング)。
- 安全性の変更(プレリリース/ポストリリース、カナリア、オートゲート)。
ALERT HeadroomLowAPI
IF capacity_headroom{layer="api"} < 0. 15 FOR 10m
ALERT KafkaBacklogAtRisk
IF (consumer_lag > 5e6 AND rate(consumer_lag[5m]) > 5e4) AND (hpa_desired == hpa_max) FOR 10m
ALERT DBConnectionsNearMax
IF active_conns / max_conns > 0. 85 FOR 5m
ALERT ProviderQuota90
IF usage_quota_ratio > 0. 9 FOR 5m
12) FinOps: スケーリングは有益です
効率の比率:コスト/RPS、コスト/デポジット、コスト/1kイベント。
右サイジング:VPA/推奨事項、過剰プロビジョニングレポート。
非臨界のための点/Preemptible;ベースロードの予約/コミット。
排出予算とキャッシュ、CDN/エッジオフロード。
値レベルによるログの収集とアーカイブ(ホットとコールド)。
延長のための警告のクォータ(ソフトキャップ)および自動切符。
13)プロセスと人々
変更管理:カナリア、フィッシュフラグ、回帰の停止。
Incident-readiness: runbook'と「where to add capacity」、 「how to switch region」。
スケジューリングピーク:マッチ/トーナメント/キャンペーンカレンダーとプロバイダのウィンドウ。
通常の試合日とDR演習。
所有者マトリックス:誰がfeilover/増加クォータの「ボタンを押す」ことができます。
14)実装チェックリスト
基本的なスケーラビリティの開始(2〜4週間):- クリティカルパスとリミットのマップ(レイヤー別)、ヘッドルームターゲット≥ 30%。
- ビジネスメトリックによるHPA+クラスタオートスケーラー;PDB/SpreadConstraints。
- ホットパス、idempotency-keys、 outbox上のキュー。
- キャッシュ:ヒット目標≥ 90%、立ち退きポリシー、キーインデックス。
- DB:読み取りレプリカ、接続プール、シャーディングプラン。
- プロバイダ:マルチベンダー、クォータ、ブレーカー/リトリート。
- ダッシュボード「Capacity/Stream/DB/Providers」、第11条のアラート。
- カナリアとリリース前/リリース後のオートゲート。
- DRプレイブックと1つの部分的なfeiloverトレーニング。
- キャッシュのウォームアップ、事前スケールHPA/ASG、ウォームスタンバイレプリカ。
- プロバイダのクォータを増やし、スマートルーティングを有効にします。
- 重要でないアラートのナイトモード抑制を有効にします。
- 「セーフモード」機能は即刻の活発化のために準備ができています。
15)アンチパターン
水平ではなく垂直に「フルストップ」をアップグレードします。
すべてのダウンストリームのスレッド/接続の一般的なヘッド・オブ・ライン・プール。
ボトルネックタイムアウトのレトライ、ジッタ→ストームの欠如。
アラートやスケールポリシー→「ソーイング」にヒステリシスはありません。
データシャーディングとローカライズのない単一のグローバルデータベース。
タイムアウト/リトレイ/オブザビリティコントロールなしのベンダーSDKに対する盲目的な信頼。
DR演習の欠如:feilover「紙にのみ」。
16)スケーラビリティKPI
ピーク時のSLOコンプライアンス(p95/p99、成功率)。
ヘッドルームはプライムタイムでレイヤー。
MTTS (Mean Time To Scale)-追加リソースが利用可能になるまで。
Backlog/Lag Resolution Time-キューがピーク後に崩壊する時間。
アクティブな成長期間の失敗率を変更します。
コスト/RPSとキャッシュ/CDN/エッジオフロードからの節約。
DRの準備:練習のRTO/RPO。
17)「クイック」テンプレートの例
カフカ:消費者の参加とオートスケール(アイデア):
partitions(topic="bets") = ceil(peak_msgs_per_sec / target_msgs_per_partition)
consumers = min(partitions, max_pods); rebalance_on: skew > 1. 5x scale_up_if: lag > 5e5 && rate(lag[5m]) > 5e4
PostgreSQL:
max_connections = poolers pool_size 1. 3 read_routing: primary (write), replicas (read majority)
shard_key: tenant_id or region_id
Redis:
maxmemory-policy: allkeys-lfu cluster-replicas: 1 evict-alert: rate(evictions[5m]) > 0 && used_mem/limit > 0. 8
カナリアオートゲートポリシー(要約):
guardrails:
- metric: api_p99_ms, threshold: 1. 3 baseline_1d, window: 10m, action: pause_and_rollback
- metric: error_rate, threshold: 2 baseline_1d, window: 5m, action: pause max_step: 10%
step_interval: 15m
18) FAQ
Q:最初にスケールする何か?
A:ダッシュボードに応じたボトルネック:キュー/キャッシュ/データベースの読み取り。ホットパス(デポジット/ベット/ゲームの起動)が優先されます。
Q: 自動スケーリングが「それをより悪くする」ことを理解する方法か"?
A:相関関係を参照してください:scale- up(上)、およびp99/errorsは改善しません-おそらく「問題をスケール」(ストリーム/クォータを絞り込む)。ブレーカ/劣化を含む。
Q:第2提供者を常に必要としますか?
A:クリティカルパスの場合は、はい。そうでなければ、少なくとも単純化されたスクリプトとキャッシュを持つ「セーフモード」。
Q: アクティブアクティブpassive?
A: RTO要件が低く、多くの地域プレーヤーがアクティブである場合。それ以外の場合は、使用済みのfeiloverでactive-passiveから始めます。