GH GambleHub

運用と→管理サービスの依存関係

サービスの依存関係

1)なぜそれを必要とします

すべてのプロダクションプラットフォームは、ユーザー→エッジ/API→ドメインサービス→ターン/ストリーム→DB/キャッシュ→外部プロバイダ(支払い、KYC、ゲームのプロバイダ)です。グラフの1つのエッジにエラーが発生すると、ネットワーク全体を「歩く」ことがよくあります。遅延が増加し、リトレイがトリガーされ、キューが詰まり、カスケード障害が発生します。依存性管理は「ブラスト半径」を減らし、リリースを予測可能にします。

目的:
  • コールの完全なグラフを参照して、誰に依存するかを理解してください。
  • カスケード障害と「リトレイストーム」を防止します。
  • 互換性とSLOプロモーションに基づいてリリースを計画します。
  • MTTRを上げる:真の根本原因をより速く見つける。

2)依存関係の種類

同期(RPC: REST/gRPC/GraphQL):レイテンシー/可用性によるハード接続。タイムアウト、ブレーカー、リトレイの予算が必要です。
非同期(Event/Stream: Kafka/Rabbit/Pulsar):より安定した接続性がありますが、lag/backlogとdelivery semantics(最低1回、idempotency)があります。
ストレージ(DB/キャッシュ/オブジェクトストア):共有リソース→コンテンツ、接続制限/IOPS、立ち退き、レプリケーション。
外部プロバイダ(PSP/KYC/ゲームプロバイダ):クォータ、通話料、サービスウィンドウ、法的SLA。
操作(リリース、phicheflags、 configs):設定、シークレット、スキーマレジストリを介した間接依存。

3)サービスカタログと依存関係グラフ

ディレクトリ(Backstage/Service Catalog/CMDB)で修正するもの:
  • オーナー(Squad/chat/On-call rota)、リポジトリ、環境、アーティファクト。
  • API契約(OpenAPI/AsyncAPI)、バージョン、互換性(バック/フォワード)。
  • タイプ(同期/非同期)、重大性、SLO期待を持つ着信/発信依存性(上流/下流)。
  • タイムアウト/リトリート予算、ブレーカー、隔壁プール。
  • クォータと外部統合の限界に関するデータ。
ミニサンプルカード:
  • 'service: payment-api'
  • 上流:'user-profile' (sync)、 'risk-score' (async)。
  • Downstream: 'PSP-X'(同期)、'ledger'(非同期)。
  • SLO: p99 ≤ 300ms、 99。9%の稼働時間。
  • タイムアウト:200ミリ秒から'PSP-X'、 150ミリ秒から'ユーザープロファイル'。
  • Retrai: 2指数遅延、ジッタ。
  • ブレーカ:30年代は5%エラー/10秒で開きます。

4) SLOプロパガンダと「遅延予算」

同期コールのチェーンでは、合計SLOは遅延と失敗確率の合計から形成されます。

原則:
  • リクエストの予算は、フロントエンドのSLO 500 ms→Edge 50 ms→API 150 ms→ドメインサービス200 ms→プロバイダ100 msです。
  • タイムアウトは「in」よりも短い:発信者は、リソースが更新され、ゾンビの呼び出しが蓄積されないように、全体の内部タイムアウトよりも短いタイムアウトを持っています。
  • Retraiは、安全なコード/例外およびジッタ付きの場合にのみ使用できます。ボトルネックタイムアウト(別名「嵐」)のためのリトレイはありません。

5)契約と相互運用性

APIバージョン管理:契約のためのSemVer;「オプション」フィールドを介した後方互換性のある変更、スキーマ拡張;削除-「廃止期間」を通じてのみ。
消費者主導の契約(CDC):消費者テスト(Pact-like)は、CIのプロバイダに対して実行されます。互換性がない場合、リリースはブロックされます。
スキーマの登録(非同期):トピック/イベントのバージョン、スキーマの進化(Avro/JSON-Schema)、 can-read-old/can-write-newポリシー。

6)エンジニアリングの安定性パターン

タイムアウト:ビジネスSLAを技術的な期待から分離する。各発信接続は明示的なタイムアウトです。
Retries+backoff+jitter: idempotenceを指定した場合、2〜3回以上試行しません。
遮断器:下流の低下の「急速な低下」;ハーフオープントライアル。
隔壁(プール分離):異なるダウンストリームの場合-ストリーム/フロア/接続の個別のプール。
Rate-limit/Leaky-Bucket:ピーク時にダウンストリームを殺さないようにします。
Idempotency&deduplication: request/message level idempotency key;祖父-leiterとリトリートキュー。
キャッシュとフォールバック:ローカル/分散キャッシュ、古いwhile-revalidateステータス、コンテンツの劣化。

Pseudo-config (idea):

outbound:
psp-x:
timeout_ms: 200 retries: 2 retry_on: [5xx, connect_error]
backoff: exponential jitter: true circuit_breaker:
error_rate_threshold: 0. 05 window_s: 10 open_s: 30 pool: dedicated-psp (max_conns: 200)

7)依存関係の可視性

分散トレース(TraceID、手荷物): リンクでリクエストのパスを参照してください。ピアタグを使用して発信コールにスパンします。サービス'、'retry'、'timeout'

依存性別:'outbound_latency_p99'、 'outbound_error_rate'、 'open_circuit'、 'retry_count'、 'queue_lag'。

アップストリーム/ダウンストリームのダッシュボード:
  • SLOと誤ったエッジの色分けされたサービスマップ。
  • 先週の「Top N problem dependencies」。
  • 「ブラスト半径」-Xの秋によって影響を受けるサービスのリスト。
  • 相関ログ:ログに'trace_id'/'span_id'を含める。

8)依存関係に対応したリリース管理

依存性対応パイプライン:消費者CDCテストが赤色の場合、プロバイダのリリースがブロックされます。
段階的包含(phicheflags):新しいフィールド/エンドポイント→消費者の1%→10%→100%。
カナリアリリース:トラフィックの共有に関する主な依存関係と「遅延予算」をチェックします。
スキームの互換性:プロデューサーは'vNew'を書き込み、消費者は'vOld/vNew'を読みます。移行後-古いフィールドの「ガベージコレクション」。

9)列によるインシデントとエスカレーション

私たちは「真の犯人」を定義します:alert-correlation-'PSP-X'が劣化している場合、私たちは「支払いブッシュ」全体をページしませんが、統合の所有者です。
Autodegradation: phicheflag 「minimum mode」(重量の少ないエンドポイント、トリムバンドル、重要でない機能の無効化)。
カスケードからのガード:並列性を制限し、ホットブランチでレトラをオフにし、事前にブレーカを開きます(プレオープン)。

Runbookテンプレート:
  • Diagnostics:ダッシュボード/メトリック、クォータ/リミットの確認方法。
  • アクション:RPSを削減し、バックアッププロバイダに切り替え、一時的にキャッシュ応答を有効にします。
  • ロールバックと検証:リターンパラメータ、ノルムがp95/p99とエラーレートであることを確認します。

10)依存関係の臨界性マトリックス

軸に沿って各リンクを評価します:
カップル[タイプ]Criticality (GGR/SLA)回避方法についてクォータ/制限オーナー(Owner)
'api→payments'同期するHigh(ハイ)部分的なオフラインの沈殿物2k RPS分隊支払い
'payments→PSP-X'同期するCritical(クリティカル)PSP-U/トークンキャッシュ1.5k RPSインテグレーション
'bets→risk-score'非同期(async)平均(Average)デフォルトにdegradeリスク
ルール:
  • 「重要」-ダブルプロビジョニング、ブレーカ、個々のプール、カオステスト。
  • 「high」-少なくとも劣化と「green button」機能をオフにします。
  • 「中/低」の場合-リトレイの制限とキューの予算。

11)プロセス: 目録から操作への

1.グラフマッピング:ディレクトリから実際の呼び出し(トレース)+宣言的依存関係を収集します。
2.所有者の割り当て:各サービスと外部統合-責任あるオンコール。
3.SLOと予算の定義:レイテンシ/エラー、タイムアウト/リトレイ/プール。
4.コントラクトの形式化:OpenAPI/AsyncAPI、スキーマ、CDC。
5.安定性パターンを有効にする:タイムアウト/リトライ/回路/隔壁。
6.依存関係ごとにダッシュボードとアラートを設定します。
7.release gates: blockをCDC/compatibility/canaryでインストールします。
8.通常のゲームの日:落下キーエッジのカオス実験。
9.コミュニケーションに焦点を当てた死後:カスケードを強化したもの、半径を狭める方法。

12)中毒に関する警告(ルールのアイデア)

同期ダウンストリーム:
  • 'outbound_error_rate {to=」X」}> 3% FOR 10m'→warning;'>5% FOR 5m'→critical。
  • 'outbound_p99_latency {to=」X」}> SLO1。3 FOR 10m'→警告。
遮断器:
  • 'circuit_open {to=」X「}==1 FOR 1m'→インテグレーションオーナーへのページ。
レトライ:
  • 'retry_rate {to=」X「}>baseline2 FOR 5m'+'outbound_rps> 0'→storm risk。
非同期:
  • 'consumer_lag {topic=」Y」} growth>しきい値FOR 10m'+'hpa at max'→\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
外部クォータ:
  • 'usage_quota {provider=」PSP-X「}>90% window'→warning、 auto-switch routes。

13)アンチパターン

"すべてのダウンストリームのための1つの一般的なストリームプール。"Total:ヘッド・オブ・ライン・ブロッキング。プールを分割します。
タイムアウトなし/無限のリトレース。だから嵐が生まれます。
非idempotent外科手術のブラインドリトレイ。書き込み/ベットを複製します。
接続ポイントとして非表示の「共有DB」。強力な競争と閉塞。
APIバージョンはCDCおよび非推奨プランなしで変更されます。キャッチマスフォール。
接続によってではなく、サービスによってのみ観測可能。チェーンが壊れる場所は見えません。

14)ダッシュボード: 最小セット

サービスマップ:エッジメトリック(レイテンシ/エラー/ボリューム)を持つサービスのインタラクティブマップ。
Upstream/Downstream概要:サービスの所有者-着信依存(呼び出している人)、発信(呼び出している人)、「トップの問題」。
依存関係ドリルダウン:リンク固有のカード:p50/p95/p99、クラスエラー、オープンブレーカの割合、リトレイ、接続プール、クォータ/コスト。
Release Context:依存関係グラフに対するリリース/phicheflagsの注釈。

15)実装チェックリスト

  • オーナーと契約を持つサービスのディレクトリ(OpenAPI/AsyncAPI)。
  • トレースからの依存関係の完全なグラフ(毎日更新)。
  • サービスによるSLOとチェーン下の「レイテンシ予算」。
  • 明示的なタイムアウト、ジッタ後退、ブレーカー、隔壁分離。
  • リリースゲートとしてCIでのCDCテスト。
  • 依存関係とサービスカードごとのダッシュボード。
  • エッジのアラート+根本原因による抑制。
  • Game-days: provider/cluster/topic dropとdegradation check。
  • 劣化計画:どの機能をオフにするか、どのキャッシュをオンにするか。
  • 接続性を低下させるアクションを伴う定期的な死後。

16)依存性管理の品質KPI

依存関係MTTR:リブ回復の中央値。
Blast Radius Index:影響を受けるサービスの平均数。
カップリングスコア:すべての同期依存の割合;下降トレンド。
CDCパスレート:契約違反のないリリースの%。
Retry Storms/Month Target→0。
外部コールのコスト:1k RPSあたりの外部コールのコスト(キャッシュ/フォールバックの効果を参照)。

17)高速開始(デフォルト)

タイムアウト:リンク予算の70-80%;リクエストupper timeout<内部の合計。
Retrai: max 2、 idempotent 5xx/networkのみ、バックオフ+ジッタ付き。
ブレーカ:10秒で5%エラーのしきい値、open=30秒、半開きサンプル。
隔壁:下流ごとの専用プール/接続制限。
CDC:すべての公開APIとトピックに必須です。
Async-preference:可能な場合-イベント/キューに切り替える(時間内にデカップリング)。

18) FAQ

Q:何がより重要です:後退またはブレーカーか?
A:どちらも。レトライは短期的な故障から救い、ブレーカは永久的な劣化と嵐から保護します。

Q:どのように接続が「壊れやすい」ことを知っていますか?
A:高い間違いの相関、低いタイムアウトのマージン、頻繁なレトレイ、follbacks/cachesの同期長いチェーン無し。

Q:統合テストがある場合、なぜCDCですか?
A: CDCは、コンシューマーの期待を捉え、互換性がない場合にプロバイダのリリースを破る-コードが本番環境に入る前に。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。