同じ利用経路を比較する
十進キロバイトによる架空例です。最初は100回の呼び出しで各100 kB、変更案は20回で各50 kBとします。転送量は10000から1000 kBへ90 %減ります。ただし、遅延も同じ割合で減るとはいえません。計算対象は応答本文だけで、リクエストやヘッダーは含みません。
| 架空の測定項目 | 変更前 | 変更案 |
|---|---|---|
| 呼び出し回数 | 100 | 20 |
| 応答あたりの転送量 | 100 kB | 50 kB |
| 総転送量 | 10000 kB | 1000 kB |
| 経路全体の時間 | 実測が必要 | 実測が必要 |
並列化の前に処理を減らす
- 必要な項目だけ取得し、仕様に沿ってページをたどります。一括処理には上限と部分成功の扱いが必要です。ページを大きくしても速くなるとは限りません。
- 文脈と鮮度の条件を満たす接続や応答は再利用します。同時実行数を制限し、サーバー処理と待ち行列も測定します。
- 全体の期限と試行回数の上限を決めます。一時障害の再試行にはランダムな待機を加え、複数の層が重ねて再試行していないか確認します。
完了済みの操作を繰り返さない
クライアントのタイムアウトは、サーバー側の取り消しを証明しません。作成や支払いを再実行する前に、状態と提供側の冪等性の仕組みを確認します。実際に近い負荷で、経路全体の時間、エラー、データの正しさを比較します。
一次資料
- IETF RFC 9110 — HTTP Semantics [EN]
- AWS Builders’ Library — Timeouts, retries and backoff with jitter [EN]
1つのAPIレスポンスの背後にある処理を検査する。
1つのGraphQLクエリが多数のダウンストリーム呼び出しをトリガーする可能性がある。クライアントから見えるレイテンシは、リゾルバー、リスト、およびトラバースされたリレーションシップのコストを隠蔽する可能性がある。
- クライアントからダウンストリームサービスへの操作をトレースする。
- フィールドコストと実際に有効なボリュームを比較する。
- キャッシュ前にリストと繰り返しクエリをバインドする。
一次資料:OWASP — GraphQL Cheat Sheet. 関連する方法:実践ガイドを読む.
Retry-After:待機・予算・再試行判断
この言語版の詳しい参照メモは英語で提供しています。
Reducing API calls includes controlling repetition
An API optimisation should count attempts reaching the dependency rather than only requests initiated by the screen.
- Trace SDK and proxy retries under one logical identifier.
- Avoid shortening server instructions merely to fit a budget.
- Verify an uncertain write’s state before creating a new intention.
Explore Retry-After and the retry model →
References reviewed · RFC 9110 · §9.2.2, §10.2.3 · RFC 6585 · §4 · AWS
