Slide 1

Slide 1 text

Summit後の打ち上げから考 える「分散システムにおける耐 障害性のある設計」 Shigeru Oda

Slide 2

Slide 2 text

Hello! Shigeru Oda AWS Community Hero AWS Samurai @OutputSeq 2

Slide 3

Slide 3 text

4月21日(金) 15:20-16:00(40分) 【AWS-27】 Everything fails, all the time: 分散システムにおける 耐障害性のある設計について の内容を紹介するLTです。

Slide 4

Slide 4 text

セッション、Expo DeepRacer GameDay AWS Jam 打ち上げ

Slide 5

Slide 5 text

Summit後のグループ討論が楽しかった!!

Slide 6

Slide 6 text

Pub とあるPub

Slide 7

Slide 7 text

Pub グループがスケールする

Slide 8

Slide 8 text

Pub-A Pubが混んできたので、グループが移動 Pub-B

Slide 9

Slide 9 text

店舗は非効率だ、立ち飲みでスケールしよう (モノリスは非効率だ、マイクロサービスでスケールしよう)

Slide 10

Slide 10 text

グループ間の情報連携が出来ない可能性がある

Slide 11

Slide 11 text

システムでも同じNWがネックになる ホテル予約 ツアー予約 飛行機予約 ポイント 支払い

Slide 12

Slide 12 text

各サービスで障害の可能性もあり、考慮が必要 ホテル予約 ツアー予約 飛行機予約 ポイント 支払い

Slide 13

Slide 13 text

リトライ機能 ホテル予約 飛行機予約 ・サーバーエラー ・タイムアウト ・スロットリング 2s 2s 2s

Slide 14

Slide 14 text

Exponential backoff(指数関数的 後退) ホテル予約 飛行機予約 ・サーバーエラー ・タイムアウト ・スロットリング 2^0=1s 2^1=2s 2^2=4s 2^4=8s

Slide 15

Slide 15 text

NW障害は Exponential backoffでも軽減できない ホテル予約 飛行機予約 ホテル予約 ホテル予約 ホテル予約 ホテル予約 ホテル予約 ホテル予約 ホテル予約 ・サーバーエラー ・タイムアウト ・スロットリング … ・AWS障害 ・AZ障害

Slide 16

Slide 16 text

Exponential backoff(指数関数的 後退) + Jitter(ばらつき) ホテル予約 飛行機予約 ・サーバーエラー ・タイムアウト ・スロットリング Min0 - Max1 Min0 - Max2 Min0 - Max4 Min0 - Max8

Slide 17

Slide 17 text

・Exponetial Backoff  sleep = min(最大停止時間, 基準睡眠時間 * 2 ** 試行回数) ・Exponetial Backoff And Full Jitter  sleep = random_between( 0,min(最大停止時間, 基準睡眠時間 * 2 ** 試行回数)) ・Exponetial Backoff And Equal Jitter  tmp = min(最大停止時間, 基準睡眠時間 * 2 ** 試行回数)   sleep = tmp / 2 + randam_between(0,temp / 2) Exponential backoff(指数関数的 後退) + Jitter(ばらつき)の種類

Slide 18

Slide 18 text

サーキトブレイカー(遮断機)の導入 ホテル予約 ツアー予約 飛行機予約 ポイント 支払い

Slide 19

Slide 19 text

通常時 ホテル予約 飛行機予約 DynamoDBにサービス名が登 録されているかチェック 登録なし

Slide 20

Slide 20 text

通常時 → 異常時 ホテル予約 飛行機予約 DynamoDBにサービス名が登 録されているかチェック 登録なし レコード登録 ・Service:飛行機予約 ・Status:1 ・TTL:Sysdate + 10分 Exponetial Backoff And Full Jitter

Slide 21

Slide 21 text

Lambdaで定期チェック(死活監視) 飛行機予約 定期チェック(死活監視) レコード登録 ・Service:飛行機予約 ・Status:1 ・TTL:Sysdate + 10分

Slide 22

Slide 22 text

異常時 → 異常時 ・ホテル予約 ・飛行機予約 DynamoDBにサービス名が登録されて いるかチェック 登録あり ・Service:飛行機予約 ・Status:1 ・TTL:Sysdate + 10分

Slide 23

Slide 23 text

異常時 →10分経過→ 正常時 ホテル予約 飛行機予約 DynamoDBにサービス名が登 録されているかチェック 登録なし

Slide 24

Slide 24 text

サーキットブレイカーを行うサービス

Slide 25

Slide 25 text

Polyglot Persitence (ポリグロット・パーシステンス) ホテル予約 ツアー予約 飛行機予約 ポイント 支払い Document DB Relation DB Key-Value DB Graph DB Relation DB

Slide 26

Slide 26 text

Sagaパターン ホテル予約 飛行機予約 ポイント 支払い エラー発生 ホテル予約(取消) 飛行機予約(取消) ポイント(取消) 正常系 正常系 正常系 取消 取消 取消

Slide 27

Slide 27 text

Sageパターンの種類 オーケストレーション オーケストレーション 2.Error 1.OK 1.Rollback

Slide 28

Slide 28 text

Sageパターンの種類 コレオグラフィ メッセージ ブローカー 1.OK Publish 1.OK Subscribe 2.NG Publish 2.OK Subscribe 1.RollBack Publish

Slide 29

Slide 29 text

私見: マイクロサービスでの耐障害性、取消処理には これらの考慮が必要と考えます。

Slide 30

Slide 30 text

私見: しかし、初期リリースからここまで必要? 最初から最高のUI/UXが必要なのか?

Slide 31

Slide 31 text

thank you