Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Amazon Builder's Library 輪読会資料 ジッターを伴うタイムアウト、再試...
Search
koji
April 13, 2020
Technology
84
0
Share
Amazon Builder's Library 輪読会資料 ジッターを伴うタイムアウト、再試行、およびバックオフ
参加しているコミュニティ、Challeng-Every-Monthの輪読会で作成した資料。
koji
April 13, 2020
More Decks by koji
See All by koji
20250914_Vibe Coding初学者向け勉強会_Devinについて
kjman678
0
37
時系列解析 輪読会資料 1章
kjman678
0
38
クリーンアーキテクチャ輪読会資料 27-29章
kjman678
0
49
Amazon Builder's Library 輪読会資料 分散システムでのフォールバックの回避
kjman678
0
66
クリーンアーキテクチャ輪読会資料 12-14章
kjman678
0
36
Amazon Builder's Library 輪読会資料 負荷制限を使用して過負荷を回避する
kjman678
0
40
Other Decks in Technology
See All in Technology
AI とサービス・デザイン / AI and Service Design
ks91
PRO
0
180
脅威をエンジニアリングの糧にして:恐怖を乗り越えた先にあったもの / Turn threats into fuel for engineering: what lay beyond overcoming fear
nrslib
1
330
テストコードのないプロジェクトにテストを根付かせる
tttol
0
210
A Harness for Behaviour: how to get AI to generate code that does what we intend, or "TDD in the age of AI"
xpmatteo
0
470
Spring Boot における AOT Cache 活用テクニックと 起動時間改善事例
ntt_dsol_java
0
160
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
260
Anthropic AIネイティブ・スタートアップ構築のプレイブック を理解する
nagatsu
0
200
Kaggle未経験社員をメダリストに育てる「AIドラゴン桜」
lycorptech_jp
PRO
0
630
20260528_生成AIを専属DSに_Howの次にすべきことを考える
doradora09
PRO
0
220
はじめてのAI-DLC
yoshidashingo
2
590
AI駆動開発でなんでもハンズオン環境をつくってみた
yoshimi0227
0
160
権限管理設計を完全に理解した
rsugi
2
220
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
170
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Automating Front-end Workflow
addyosmani
1370
210k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
390
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.5k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Design in an AI World
tapps
1
220
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
710
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
410
Transcript
abl 輪読会 ジッターを伴うタイムアウト、再試行、およ びバックオフ 1 1. はじめに 障害の発生 2. タイムアウト
3. 再試行とバックオフ 4. ジッター 5. まとめ
2 はじめに 障害の発生 • サーバー、ネットワーク 等、障害の発生要因は 様々。 • 故障しないシステムはない。 •
障害を少しでも減らすために、タイムアウト、再試行、 バックオフを実装。
3 タイムアウト 1/4 • ベストプラクティスはリモートの呼び出しにタイムアウ トを設定すること。 • タイムアウトの設定値を決めるのが難しい。 大きいとリソースが消費される。 小さいと再試行の数が増えて遅延が発生。
4 タイムアウト 2/4 • リモート呼び出しのタイムアウトの基準は、末端に近 いサービスの遅延を指標にするのがベストプラクティ ス。 • Amazonでは許容するタイムアウトの割合を決めて、 遅延のパーセンタイルを調べる手法を取っている。
5 タイムアウト 3/4 • ただし、以下の場合機能しない欠陥がある。 ◦ ネットワークの遅延がある場合。 ◦ p99.9もp50も大差ないほど遅延の基準値が小さ い場合
→ 間隔の追加で回避可能 ◦ Linux のSO_RCVTIMEOはエンドツーエンドのソ ケットタイムアウトとしては不適切。
6 タイムアウト 4/4 ◦ DNSやTLSハンドシェイクはタイムアウトが全ての リモートの呼び出しを処理しない。 • タイムアウト値約0.2秒だとデプロイ直後にタイムアウ トが発生したので、デプロイ直後はタイムアウト値を 増やして問題を解消した。
7 再試行とバックオフ 1/3 • 再試行はリソースを消費する(=利己的)。 • 障害が小さいときは再試行で解消するが、障害が大 きくなると再試行により負荷が上がって障害を悪化さ せる。 •
解決策はバックオフ(待機時間をもうける事)。 etc. 上限を設けたエクスポネンシャルバックオフ
8 再試行とバックオフ 2/3 • その他、再試行の問題点 ◦ 分散システムのレイヤーごとに再試行を行うと、 再試行の回数が増加して負荷も増加。 ◦ スタックの最上位レイヤーで再試行すると、他の
レイヤーでのリクエストが無効になる。
9 再試行とバックオフ 3/3 ◦ 適切なAPI設計をしないと再試行によりリソースを 消費してしまう。 ◦ べき等性* があれば安全 (EC2
RunInstances API) *同一のパラメーターで 1 回以上リクエスト してもリソースの状態が同じであること) ◦ 再試行する意味のある障害で再試行する。
10 ジッター • バックオフ後の複数の再試行のタイミングが被ると過 負荷又は競合が発生する。 • ジッターにより再試行のタイミングを分散させれば過 負荷も回避できるし、サーバー容量を下げられること もある。 •
利用者がイラっとこないところにジッターを追加すると よい。
11 まとめ • 分散システムはリモートでの一時的な障害や遅延を 防げない。 • タイムアウト、再試行、バックオフ、ジッターでシステ ムの不可を軽減できる。 • システムの依存関係が正常と確認できたときに再試
行するのが有効。
12 (参考) エクスポネンシャル バックオフ (重) None なにもなし Exponential エクスポネンシャル バックオフ
sleep = min(cap, base * 2 ** attempt) Decorr 非相関ジッター sleep = min(cap, random_between(base, sleep * 3) Full Jitter ジッター sleep = random_between(0, min(cap, base * 2 ** attempt) (軽) Equal Jitter 等ジッター temp = min(cap, base * 2 ** attempt) sleep = temp / 2 + random_between(0, temp / 2) 又は、クラウド・ネイティブのお作法( 2)「リトライ」 ~効率的なリトライ手法「 Exponential Backoff and jitter」とは何か
13 参考 【Python】簡単にリトライを実装できるretryの使い方 シンプルなリトライ バックオフ(3秒) エクスポネンシャル バックオフ(1,2,4,8,16,32秒...) ジッター(1~5秒) プロセスAとプロ セスBのリトライ
が被って実行さ れる プロセスAとプロ セスBのリトライ が被って実行さ れる プロセスAとプロ セスBのリトライ が被らない
14 その他 参考情報 • 冪等と安全に関する誤解 • What is P99 latency?
• ざっくり知る「結果整合性(Eventual Consistency)」