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
88
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
43
時系列解析 輪読会資料 1章
kjman678
0
42
クリーンアーキテクチャ輪読会資料 27-29章
kjman678
0
52
Amazon Builder's Library 輪読会資料 分散システムでのフォールバックの回避
kjman678
0
69
クリーンアーキテクチャ輪読会資料 12-14章
kjman678
0
40
Amazon Builder's Library 輪読会資料 負荷制限を使用して過負荷を回避する
kjman678
0
43
Other Decks in Technology
See All in Technology
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
0
720
FDEの心得
noriakioji
5
6.4k
RelayerというPHPのフレームワークを作った
polidog
PRO
0
130
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
120
関東Kaggler会発表資料
takoi
1
280
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
480
AIのためのEthernet技術動向 (SerDes)
markunet
1
300
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
330
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
2
1.1k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
250
Sets in Go
ramalho
1
1.2k
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
440
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Designing for humans not robots
tammielis
254
26k
Automating Front-end Workflow
addyosmani
1369
210k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.4k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
480
GraphQLとの向き合い方2022年版
quramy
50
15k
Documentation Writing (for coders)
carmenintech
77
5.5k
Tell your own story through comics
letsgokoyo
1
1k
Test your architecture with Archunit
thirion
2
2.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Balancing Empowerment & Direction
lara
6
1.2k
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)」