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
0
75
Amazon Builder's Library 輪読会資料 ジッターを伴うタイムアウト、再試行、およびバックオフ
参加しているコミュニティ、Challeng-Every-Monthの輪読会で作成した資料。
koji
April 13, 2020
Tweet
Share
More Decks by koji
See All by koji
20250914_Vibe Coding初学者向け勉強会_Devinについて
kjman678
0
29
時系列解析 輪読会資料 1章
kjman678
0
35
クリーンアーキテクチャ輪読会資料 27-29章
kjman678
0
42
Amazon Builder's Library 輪読会資料 分散システムでのフォールバックの回避
kjman678
0
64
クリーンアーキテクチャ輪読会資料 12-14章
kjman678
0
33
Amazon Builder's Library 輪読会資料 負荷制限を使用して過負荷を回避する
kjman678
0
38
Other Decks in Technology
See All in Technology
小さく、早く、可能性を多産する。生成AIプロジェクト / prAIrie-dog
visional_engineering_and_design
0
370
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
150
First-Principles-of-Scrum
hiranabe
3
1.6k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
製造業から学んだ「本質を守り現場に合わせるアジャイル実践」
kamitokusari
0
450
Oracle Cloud Infrastructure:2025年12月度サービス・アップデート
oracle4engineer
PRO
0
200
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
140
#22 CA × atmaCup 3rd 1st Place Solution
yumizu
1
130
Java 25に至る道
skrb
3
180
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
560
技術選定、下から見るか?横から見るか?
masakiokuda
0
180
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
2.3k
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
94
Tell your own story through comics
letsgokoyo
0
770
BBQ
matthewcrist
89
9.9k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
72
Producing Creativity
orderedlist
PRO
348
40k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
We Have a Design System, Now What?
morganepeng
54
8k
Heart Work Chapter 1 - Part 1
lfama
PRO
4
35k
Odyssey Design
rkendrick25
PRO
0
450
Evolving SEO for Evolving Search Engines
ryanjones
0
93
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
230
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)」