Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Amazon Builder's Library 輪読会資料 ジッターを伴うタイムアウト、再試...
Search
koji
April 13, 2020
Technology
90
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
48
時系列解析 輪読会資料 1章
kjman678
0
43
クリーンアーキテクチャ輪読会資料 27-29章
kjman678
0
53
Amazon Builder's Library 輪読会資料 分散システムでのフォールバックの回避
kjman678
0
71
クリーンアーキテクチャ輪読会資料 12-14章
kjman678
0
41
Amazon Builder's Library 輪読会資料 負荷制限を使用して過負荷を回避する
kjman678
0
45
Other Decks in Technology
See All in Technology
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.2k
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.4k
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
230
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
300
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.7k
しろおびから始める!ログ活用の第一歩
shumei_ito
0
880
Essential architectural thinking (revised edition)
ufried
0
110
今こそ知りたいAmplifyGen2
mkdev10
2
160
自分で立ててみるLLMサービス
y_sera15
0
160
hackers_champloo_2026_tidb
makocchi
0
110
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
360
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
700
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
WENDY [Excerpt]
tessaabrams
14
40k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
560
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
620
Paper Plane (Part 1)
katiecoart
PRO
2
11k
The Limits of Empathy - UXLibs8
cassininazir
2
710
Scaling GitHub
holman
464
140k
Fireside Chat
paigeccino
43
4.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
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)」