→レイテンシ技術とインフラストラクチャとAPI応答の最適化
レイテンシとAPIレスポンスの最適化
1)「レイテンシー」とは何か、なぜ重要なのか
レイテンシー-リクエストの合計遅延:ネットワーク(DNS+TCP+TLS+RTT)、バランサ/ゲートウェイ、アプリケーション、DB/キャッシュ/キュー、外部統合。P95/P99はビジネスにとって重要であり、平均的ではありません。UX、 CR、 SLOを破壊するのは「尾」です。
基本的なSLI:- 5/30分で'SLI_latency_P95=P95 (response_time)'
- 'SLI_latency_P99=P99 (response_time)'
- 'SLI_queue_time=P95 (worker_queue_time)'
- 'SLI_ext_call_P95=P95 (external_provider_latency)'
2)遅延ソースマップ(と掘る場所)
1.ネットワークとプロトコル:DNS、 TCPハンドシェイク、TLS、ヘッド・オブ・ライン(HTTP/1。1)、パケット損失、BBR/ECN。
2.ゲートウェイ/バランサー:スローヘルスチェック、無効なタイムアウト、ホットボトムス。
3.アプリケーション:ロック、GC/stop-the-world、同期I/O、競合。
4.リポジトリ:遅いデータベースクエリ、インデックスなし、コールドページ。
5.外部サービス:PSP/KYC、サードパーティのAPI(狭いSLA)。
6.キューとバックグラウンドジャブ:過負荷のワーカー、バックプレッシャーなし。
7.キャッシュ/エッジ:キャッシュミス、弱いTTL、無効な障害。
3)ネットワークおよび議定書
3.1 DNS/TCP/TLS
前面のDNSプリフェッチ/プリコネクト、PSPへの長寿命IP。
顧客のKeep-Alive/connectionのプール;サーバー上-集計接続。
TLS:再開/セッションチケット、現代の暗号パッケージ;安全でない不正な操作の0-RTTを避けます。
TCP:チャット/スモールパケットのNagle ('TCP_NODELAY')を無効にします。'initial window'をチューニングし、必要に応じてBBRを有効にします。
3.2 ○
HTTP/2:多重化はHTTP/1のHOLロックを減らします。1;スレッドの優先度を監視します。
HTTP/3/QUIC: 損失/RTTのより低い影響;モバイル/国際ネットワークで便利です。
ヘッダーの圧縮:HPACK/QPACK、しかし適度なヘッダーのサイズを保って下さい。
3.3バランシング/ルーティング
局所認識(ゾーニング)、EWMA/lost-request vsホットインスタンス。
スティッキングセッション-状態がある場合のみ;それ以外の場合はステートレス+共有キャッシュ/セッション。
4)フォーマット、ペイロード、圧縮
絞る:Brotli(テキスト)、フォールバックとしてGzip;バイナリフォーマット:gRPC/内部 APIのためのProtobuf/Avro。
ペイロードの削減:選択フィールド('fields=……')、ペジネーション、条件付きGET (ETag/If-None-Match)、デルタ応答。
GraphQL:持続クエリ、「fat」フラグメントの禁止、深さと複雑さの限界。
N+1を避ける:Joyns/preposition、アグリゲートのエンドポイントをバッチします。
5)タイムアウト、リトリート、idempotence
チェーンタイムアウトクライアント<ゲートウェイ<appa<ストレージ/外部コール。
バックオフ+ジッタ付きのレトライ、一時的なエラーのみ。レトレイの予算を公開します。
Idempotence: query key/token+save result;リトリートは、業務(特に財務)を重複させるべきではありません。
遮断器:分解されるとき開けて下さい;ヘッジテール/バックアップリクエスト(P95経由で重複送信)。
6)キュー、非同期およびバックプレッシャー
同期パスをブロックしないでください:重い操作(KYCスキャン、レポート)-バックグラウンドで。
Backpressure:キューからの消費を制限し、並行性を修正します。
バッチ/結合-小さなトランザクションを組み合わせます(たとえば、バランスを集計で更新するなど)。
Outbox/Inbox:障害が発生した場合のイベントの配信を保証します。
7)適用: ランタイムおよびプール
データベース/キャッシュ/HTTPへの接続のプール;バックエンドを「絞め」しないように制限します。
JVM:プロファイルGC (G1/ZGC)、大きな割り当てを避けます。。NET-ThreadPool/async;ノード。js-イベントループをブロックせず、CPUヘビーを取り出します。
Python:非同期ドライバ(asyncpg/httpx)、 uvloop;ワーカープールを介したCPUタスク。
ウォームアップ:JIT/キャッシュをウォームアップし、「ウォームプール」インスタンスをピークにします。
8)データベースとキャッシュ
インデックスと計画:通常の'説明'、自動真空/分析、スキャン制限。
接続プール(PgBouncer/Multiplexing)、短いトランザクション。
キャッシュ戦略:読み取り、書き込み、書き込み、書き込み、後ろ;イベントによってTTL+障害。
シャーディング/レプリカ:スレーブからの読み込み、「ホットキー」-ローカルキャッシュ(ニアキャッシュ)。
9)キャッシュとエッジ
静的/ディレクトリのCDN/edge、 'Cache-Control'、 'ETag'のキャッシュAPIレスポンス(もし安全なら)。
UX安定性のためのstale-while-revalidateとstale-if-error。
Geo-allocation:最寄りのRRR/regionはRTTを削減します。
10)建築パターンとP99の尾
ヘッジリクエスト-スレッショルド後に遅いリクエストを別のインスタンスに複製します。
リクエストの折りたたみ:データベースへの1つの「リード」リクエスト、残りは結果を待っています(嵐を避けます)。
優先順位:VIP/重要な操作-専用のプール/優先順位。
優美な劣化:オーバーロード時にマイナーフィールド/ウィジェットをトリムします。
11)構成(およそ)
11.1 NGINX(タイムアウト/圧縮)
nginx proxy_connect_timeout 1s;
proxy_send_timeout 2s;
proxy_read_timeout 2s;
send_timeout 2s;
gzip on;
gzip_types application/json text/plain text/css application/javascript;
11.2使節(ヘッジ+再試行予算)
yaml
RetryPolicy:
retry_on: 5xx,reset,connect-failure num_retries: 2 per_try_timeout: 300ms retry_back_off: { base_interval: 50ms, max_interval: 200ms }
retry_priority:
name: envoy. retry_priorities. previous_priorities
HedgePolicy:
hedge_on_per_try_timeout: true initial_requests: 1 additional_request_chance: 0. 2
11.3 gRPC(クライアント)
json
{
"methodConfig": [{
"name": [{"service": "payments. Service"}],
"timeout": "0. 8s",
"retryPolicy": {
"maxAttempts": 3,
"initialBackoff": "0. 05s",
"maxBackoff": "0. 2s",
"backoffMultiplier": 2. 0,
"retryableStatusCodes": ["UNAVAILABLE","DEADLINE_EXCEEDED"]
}
}]
}
12) Observability: 正しく測定して下さい
RED/USEメトリック+OTelトレイル:gateway-service-database-external APIによる'trace_id'。
個々のラベル:'api_version'、 'region'、 'partner'、 'endpoint'。
ダッシュボード:P50/P95/P99、キューの時間、エラーミックス、再試行率、キャッシュのヒット。
ターゲット国/ASN (TR/BR/EU)およびクリティカルパス(reg→depozit、 payout)による合成。
- コアAPI: 'P95 ≤ 250ms'、 'P99 ≤ 500ms' (30日)
- PSP webhook処理:'P99 ≤ 60'、レトラ付き
- 鮮度カタログ:'P95 lag ≤ 30'
13) FinOpsの待ち時間
ミリ秒はお金の価値があります。CR/ARPPUで$/msの賞金を見積もります。
右サイジング:常に速く≠より高価です。有能なキャッシュ/フォーマットはより安く、より速いです。
出力/エッジ:CDNは、地域からの送信トラフィックのRTTとコストを削減します。
14)最適化チェックリスト(ステップバイステップ)
1.SLOを設定し、エンドポイント/リージョン/パートナー別にテール(P95/P99)を測定します。
2.HTTP/2/3、 TLS再開、長寿命の接続をオンにします。
3.重量の答えを絞り、失う:Brotli/Gzip、オンデマンドのフィールド、ペジネーション、ETag。
4.タイムアウト/リトリート/ブレーカを設定します。idempotencyを追加します。
5.キャッシュ/エッジ:ヒットレートと正しいTTL;古いモードです。
6.DB:インデックス、計画、プール、レプリカ;N+1を除去します。
7.重い:キュー、バッチング、バックプレッシャーを非同期します。
8.クリティカルパスのヘッジ/折りたたみ/優先度。
9.ピック(トーナメント/マッチ)へのウォームアップと予測スケーリング。
10.P99とキュータイムの合成とアラート。定期的なPERFレビュー。
15)アンチパターン
1つのグローバルタイムアウト「すべてのために」と制御されていないリトレイ(DDOS自体)。
→ホットノードを必要とせずにセッションを貼り付ける。
圧縮およびフィールドフィルタなしの大きなJSON。
「ホットパス」で外部APIを遅くする同期呼び出し。
データベースにインデックス/制限がない。ORMのN+1。
キャッシュ/エッジとETagはありません。永続的な完全な応答。
1つの「引き込み式」バスケットにビジネスと技術的なエラーが混在しています。
16) iGamingコンテキスト/フィンテック: 実用的なノート
Reg→depozit (CR):ルート優先度、個々のプール、'P99 ≤ 500ms';劣化-UIの「装飾」を無効にします。
PSPの統合:concarrency limits、タイムコードによるリトレイ、warm connections、 regional egress-IP。
VIP操作:プール/優先順位を保証し、パブリックキューをバイパスします。
トーナメント/イベント:予測スケール、キャッシュのウォームアップ、プリフェッチ。
レポート:新鮮さの非同期とSLAは、生産経路をブロックしません。
合計
レイテンシーの最適化は、ネットワーク(HTTP/2/3、 TLS)、プロトコルとキャッシュ、idempotencyを備えたタイムアウト/リトレイ、DB/キャッシュ、非同期パターン、P95/P99観測性など、バランスの規律です。尾に焦点を当て「、狭い首」を排除することによって、あなたは応答を安定させ、変換を改善し、ミリ秒当たりのコストを下げます-それは本当にビジネスに影響を与えます。