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
March 15, 2020
0
64
Amazon Builder's Library 輪読会資料 分散システムでのフォールバックの回避
参加しているコミュニティ、Challeng-Every-Monthの輪読会で作成した資料。
koji
March 15, 2020
Tweet
Share
More Decks by koji
See All by koji
20250914_Vibe Coding初学者向け勉強会_Devinについて
kjman678
0
29
Amazon Builder's Library 輪読会資料 ジッターを伴うタイムアウト、再試行、およびバックオフ
kjman678
0
75
時系列解析 輪読会資料 1章
kjman678
0
35
クリーンアーキテクチャ輪読会資料 27-29章
kjman678
0
42
クリーンアーキテクチャ輪読会資料 12-14章
kjman678
0
33
Amazon Builder's Library 輪読会資料 負荷制限を使用して過負荷を回避する
kjman678
0
38
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Why Our Code Smells
bkeepers
PRO
340
58k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
290
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
410
RailsConf 2023
tenderlove
30
1.3k
GitHub's CSS Performance
jonrohan
1032
470k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
150
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Become a Pro
speakerdeck
PRO
31
5.8k
Deep Space Network (abreviated)
tonyrice
0
33
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Transcript
abl輪読会 第6回分散システムでのフォー ルバックの回避 20/3/15(日) 21:00- 発表者:koji/メガネ男 著者 Jacob Gabrielson アマゾン
ウェブ サービスのシニ アプリンシパルエンジニア ABL URL https://aws.amazon.com/jp/builders-library/avoiding-fall back-in-distributed-systems/?did=ba_card&trk=ba_card 1
はじめに • 重大な障害への対応策 1. 再試行 障害発生後ただちに、又は間をおいて実行。 2. 積極的な再試行 平行してリクエストを送り、負荷を安定させる。 3. フォールバック 機能を限定した状態への移行。 Amazonは基本実装しない
4. フェイルオーバー (Amazonは)フォールバックと非フォールバック機能 を両方実装し、本番環境でテストし続ける。 2
はじめに • 長期にわたり大きな影響を及ぼす。しかもフォールバック機能そのものの改善も 難しい。 ゆえにAmazonではフォールバック機能を使わない。 • 現実では非常事態でシステムがダウンすると、拙いながらも代わりの方法を利用 するだろう。 例えば空港の案内板システムがダウンしたら、職員が手書きでホワイトボードに フライト時間を書き込むだろう。
同じ様な発想で、一般的なエンジニアもフォールバック機能を使っている。 3
単一マシン(=非分散型)のフォールバック 1/2 • 非分散型の場合、重要なアプリケーションは、メモリ割り当てエラーが発生した場 合でも、システムが止まらないように動作し続けなければならない。 • malloc()処理で対応しようとしても、メモリ不足でクラッシュ寸前なので対処しよう がないし、実際に起こるメモリ不足をシミュレーションするのは難しくフォールバック 機能はテストしづらい。 フォールバック機能自体も失敗することがある。
4
単一マシン(=非分散型)のフォールバック 2/2 • malloc()処理にメモリを食われるし、システムに予測不能な負荷がかかる可能性 がある。 めったに機能しないフォールバック機能にバグがあったら危険。 クラッシュさせる方がよほどよい。 • Amazonでは、事前にヒープメモリーを割り当てておいて、malloc()処理を使わな いようにしている。
例:(PR) EC2 5
分散フォールバック 1/3 • 分散型マシンなら、お客さんが実際使っているアプリケーションがメモリ不足に なっても、他のマシンのリソースを借りられるので、単一型マシンよりも可用性が高 い。 • だからと言って、フォールバック機能を採用するのは問題である。 分散型の場合、単一型にくらべ、テストもセットアップもより困難。 復旧にも時間がかかる。
バグも見つけ辛い。 6
分散フォールバック 2/3 • Amazonも2001年に痛い目にあった。 ウェブサーバーからサプライチェーンデータベースに直接データを参照させると、 データベースが負荷に耐えられない。 そこで、ウェブサーバー上に個別のキャッシングレイヤーを追加した。 7
分散フォールバック 3/3 • エラーが発生した場合、データベースに直接参照するようなフォールバック処理も 構築していたが、キャッシュがほぼ同時にすべて失敗したため機能しなかった。 その結果、ウェブサーバーが全体がダウン。 おまけに配送センターまで停止。 • フォールバック機能が実装されていたばっかりに、より事態は悪化した。 8
Amazon がフォールバックを回避する方法 1/3 • そこでAmazonは以下の対策を講じました。 • エラーが発生しにくいシステムの構築。 (PR) 可用性の高いAmazon DynamoDB!
• フォールバックによりデータベースに負荷をかけるのではなく、例えば再試行に よって、参照側に障害を処理させるようにする。 • (PR) IMAでは、EC2のインスタンスで走らせるための認証情報を提供する必要が あるが、インスタンスに積極的にプッシュしてこれを保有させることで、リクエストに 応じる時に発生する負荷を減らす仕組みを取っている。 9
Amazon がフォールバックを回避する方法 2/3 • フォールバック処理と非フォールバック処理を両方実装し、どちらも機能している ことを定期的に本番環境で確認する。 この場合はフォールバックというより、フェイルオーバーに分類される。 10
Amazon がフォールバックを回避する方法 3/3 • 再試行は、エラーに対して高い可用性をもたらす。 • ただし、タイムアウトと再試行は混同しやすい。 • そこで、Amazon では全体的な再試行率を監視する
メトリクスと、再試行が頻繁に発生した場合にチームに 警告するアラームを維持している。 • 並行してリクエストを出すことで、(すでに負荷がかかっているので)再試行による 余分な負荷の発生がなくなる。 これは分散システムのクォーラムの読取または書込において実行される。 11
まとめ • Amazon では、テストが難しいフォールバック戦略を避けている。 • 並行してリクエストを送る等の積極的な再試行により、余分な負荷の発生しない 仕組みを作り、プライマリシステムの可用性を向上させるようにしている。 • どうしてもコードの挙動がおかしく、フォールバックしそうな場合に備え、本番環境 で可能な限り頻繁にフォールバックを実行することで、フォールバックがちゃんと動
作するようにしている。 12