オートヒーリングとセルフヒーリング
(セクション: 技術とインフラ)
概要
自動修復は「Kubernetes magic」ではなく、正しいサンプルと制限、制御されたリトレイ、不良インスタンスの分離、SLOオートメーション、ボタン/ボットによるrunabookアクションなどの一連の分野です。目標は、積雪渋滞なしでMTTRを削減し、p95/p99、支払い、TTWをピーク時でも維持することです。
1)自己治癒の原則
1.Fail-fast&isolate:不良ポッド/インスタンスをすばやく特定して分離します。
2.バックオフ+ジッタ:任意のリトレイ/スケールアウト-指数遅延とジッタ付き。
3.SLO対応:高速書き込みエラー予算を使用してオートメーションが有効/強化されます。
4.Idempotency:繰り返しトランザクションは安全です(特に支払い/キュー)。
5.深さの防衛:サンプル、クォータ、限界、サーキットブレーカー、アウトリアイジェクション、レートリミット、劣化モード。
2) Kubernetesの基礎
2.1サンプル:liveness/readiness/startup
startupProbeは、重いサービスの早期再開から保護します。
readinessProbeは、トラフィック(ウォームキャッシュ/接続)の準備状況を決定します。
livenessProbeはハングプロセスを再起動します。
yaml readinessProbe:
httpGet: { path: /health/ready, port: 8080 }
periodSeconds: 5 timeoutSeconds: 1 failureThreshold: 3
livenessProbe:
httpGet: { path: /health/live, port: 8080 }
initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 3
startupProbe:
httpGet: { path: /health/startup, port: 8080 }
periodSeconds: 5 failureThreshold: 30
2.2制限、PDBと優先順位
requests/limitは「noisy neighbor」を除外します。
PodDisruptionBudget (PDB)は、すべてのポッドが同時に落ちないようにします。
yaml apiVersion: policy/v1 kind: PodDisruptionBudget spec:
minAvailable: 2 selector: { matchLabels: { app: payments-api } }
クリティカルパス(支払い、ゲートウェイ)のためのPriorityClass。
2.3戦略の再起動と展開
'maxUnavailable: 0'重要なサービス;rolling小さな単位で更新します。
PodAntiAffinityは、ノード/ゾーンにポッドを割り当てます。
3)オートスケーリングとイベントスケーリング
HPA (CPU/ユーザーメトリック)
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
minReplicas: 3 maxReplicas: 30 metrics:
- type: Resource resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }
- type: Pods pods:
metric:
name: http_requests_per_second target:
type: AverageValue averageValue: "50"
VPA
バックグラウンドワーカー/バッチタスクに使用する。prod-APIで-慎重に(再起動)。
KEDA(キュー/外部イベント)
Kafka lag、 RabbitMQ、 Redis、 Prometheusリクエストのトリガー-仕事が蓄積すると消費者が増加します。
4)ネットワークの防御: 遮断器およびculling「悪い」
Envoy/Istio outlier detection(イスティオアウトリエ検出)
yaml outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
サーキットブレーカは、依存関係を落とさないように同時リクエスト/接続を制限します。
レート制限
リトレースの波が事故を増加させないように、ゲームプロバイダの入力コール/PSPルート/を制限します。
5)ジッタが付いているレトライ、タイムアウトおよびバックオフ
ルール:最初のタイムアウト、次に後退、常にジッターと限られた試行で。
擬似コード:python def backoff(attempt, base=0. 1, cap=2. 0):
import random, math sleep = min(cap, base (2 attempt))
jitter = random. uniform(0, sleep 0. 4)
return sleep + jitter
支払いの場合-idempotentキー+重複除外。
キューの場合-デッドレターと遅延リトリー。
6)キュー/ストリーミングで自己治癒
DLQ+成長アラート;分離された再処理。
制御遅れ:生産者への自動スケールの消費者(KEDA)、バックプレッシャー。
正確に一度/少なくとも一度-意識的に選択しました。操作はidempotentです。
7)現金とウォームアップ
安全な障害/ロールバックのためのバージョンキー('v2:')。
DB/PSPへの接続の暖かいプール;スイッチング前にウォームアップ(青緑/カナリア)。
「冷たい」データベースのヒットを減らすために、古くなっている間に再検証します。
8) SLOによる自動修復(シグナルアクション)
burn-rate/TTW/p95アラートを安全な自動操作に関連付けます:- カナリア/ロールバックを停止します。
- 'queue_lag_seconds'の増加を伴うワーカーのスケールアウト。
- デグレードモードを有効にする(UXの簡略化、重い機能の無効化)。
- タイムアウトのスパイク時にPSPルートを切り替えます。
- feature-flag kill-switchを起動します。
yaml alert: WithdrawalsQueueLag labels: { action: "scale_workers", target: "withdrawals-consumers", by: "+5" }
9)劣化モード(優美な劣化)
UIを簡素化(リクエスト数が少ない)、「高価な」ウィジェットをオフにします。
より多くのキャッシュ、より少ないファンアウト/集計。
LLM/recommendations-コンテキスト/モデルのサイズを小さくするには「、高速パス」を有効にします。
10)自動修正へのGitOpsアプローチ
すべての自動修復ポリシーとパラメータ(タイムアウト、しきい値)はGitにあります。
自動アクションは、Grafanaに注釈を作成し、変更ログにエントリを作成します。
カナリアポリシーやSLOゲートもコードです。
11)カオスエンジニアリング: ヒーリングが機能することを確認する
障害の注入:ネットワーク遅延、落下ハース、PSPエミュレータの障害、キューラグ。
ゲームデーのシナリオ:MTTR、自動アクションの品質、アーティファクトの存在を測定します。
結果→runabooks、しきい値、phicheflagsの更新。
12)自動治癒のための観察可能性
Exemplars: P95メトリックからトラックへのクイックジャンプ。
'trace_id'とフィールド'retry'、 'attempt'、' degrade_mode=true'でログを記録します。
リリース比較ダッシュボード(安定vsカナリア)、SLOカード。
自動アクションの監査:who/what/when、 source metrics、 result。
13)安全性とコンプライアンス
自動修復ログ/メトリックに秘密はありません。
支払活動のために-二重確認/役割。
Geo/PII-feiloverで「間違った」地域へのトラフィックを取らないでください。
14)実用的なテンプレート
Istio DestinationRule-接続プール&アウトリエ
yaml trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1000, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
フラッガー-オートフラッシュ/ロールバック付きカナリア
yaml analysis:
interval: 1m threshold: 5 metrics:
- name: request-success-rate thresholdRange: { min: 99 }
- name: request-duration thresholdRange: { max: 300 }
webhooks:
- name: smoke url: http://tester/smoke
KEDA ScaledObject-カフカラグ
yaml triggers:
- type: kafka metadata:
topic: withdrawals bootstrapServers: broker:9092 consumerGroup: w-consumers lagThreshold: "5000"
15)実装チェックリスト
1.スタートアップ/準備/生活と健康エンドポイントが設定されています。
2.制限/リソースリクエスト+PDB/アンチアフィニティ。
3.APIおよび労働者のためのHPA/KEDA;ラグ/スループットメトリクス。
4.回路遮断器、outlier-ejection、ゲート/網のrate-limit。
5.バックオフ+ジッタ、支払いトランザクションのidempotencyとレトライ。
6.バージョンキャッシュとdegrade-mode。
7.SLOゲート→オートアクション(ロールバック/スケール/再ルーティング/キルスイッチ)。
8.GitOps-policy code+監査アクション、リリースアノテーション。
9.重要なシナリオでのカオステストとゲームデー。
10.MTTR/Alert Qualityダッシュボードと自動修復レポート。
16)アンチパターン
Liveness「爪」時間依存→フラップによるプロセス。
タイムアウト/ジッタ→リクエストの嵐のないレトライ。
IO依存のサービス→「どこにもない」でCPUによるHPA。
ロールバック→データ破損時にバージョンなしで共有キャッシュ。
監査/Runbook URLのない自動アクション。
DLQ/lagのメトリックがない→静かな債務の蓄積。
オートヒーリングと「隠れ問題」の混合:オートメーションは症状を癒し、ルートは排除されません→インシデントの繰り返し。
概要
セルフヒーリングは、高品質のサンプルと制限、有能なリトレイと分離、SLO信号の自動アクション、カオスチェックと監査など、エンジニアリング分野です。この輪郭は、プラットフォームをクラッシュに耐え、MTTRを削減し、最も暑い時間でもiGamingの主要な指標(p99、支払い変換、TTW)を節約します。