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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
koji
April 13, 2020
Technology
0
76
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
31
時系列解析 輪読会資料 1章
kjman678
0
36
クリーンアーキテクチャ輪読会資料 27-29章
kjman678
0
44
Amazon Builder's Library 輪読会資料 分散システムでのフォールバックの回避
kjman678
0
65
クリーンアーキテクチャ輪読会資料 12-14章
kjman678
0
34
Amazon Builder's Library 輪読会資料 負荷制限を使用して過負荷を回避する
kjman678
0
39
Other Decks in Technology
See All in Technology
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
170
Agile Leadership Summit Keynote 2026
m_seki
1
680
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
200
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
350
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
190
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
220
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
Tebiki Engineering Team Deck
tebiki
0
24k
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
220
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
410
Featured
See All Featured
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
57
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
830
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
950
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Being A Developer After 40
akosma
91
590k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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)」