Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Chaos Night #1 複雑なシステムへようこそ

Chaos Night #1 複雑なシステムへようこそ

Meiko Hori

July 20, 2022
Tweet

More Decks by Meiko Hori

Other Decks in Technology

Transcript

  1. 自己紹介 Meiko Hori 堀 明子 Customer Reliability Engineer @ Autify •

    略歴 ◦ SIerに十数年所属。客先常駐 SES暮らし ▪ Webアプリ開発/システム運用/プロジェクトリーダー ◦ 2020年8月よりAutifyに参画 ◦ 書籍「カオスエンジニアリング」共訳 • 趣味 ◦ 絵と音楽(作る/歌う/聴く) ◦ 旅と食(北アフリカから中米まで)
  2. Autifyとわたしのお仕事 Contract Data Support Data Company Data Analytics Customer Success

    Platform お客様の状況把握 Prod DB お客様 プロダクト お客様の活用支援 CSM カスタマーサクセスチーム 「お客様の支援を支援する」データ基盤 を作ってます。詳細はブログへ https://blog.autify.com/ja/autify-cs-to ol-and-activities-2 CRE
  3. どんなことが起こりうる? • 外部システムの予期せぬ振る舞いにより、それに依存する要素が 期待通りの動作をしなくなった ◦ Hyrumの法則 ある程度以上のAPIのユーザーがいれば、契約で約束されたこと はもはや力を持ちません。観測されるシステムのあらゆる振る舞 いに対し、他者が依存するようになるのです。 •

    呼び出し元側へ想定外のエラーコードが返却された結果、ユーザー にとって不可解な画面が表示された • 特定の条件下でリトライロジックが機能しなかった などなど 複雑なシステムでは、これらが積み重なった結果思い がけない大きな障害に繋がる場合がある
  4. どんなことが起こりうる? • 外部システムの予期せぬ振る舞いにより、それに依存する要素が 期待通りの動作をしなくなった ◦ 例:Hyrumの法則 ある程度以上のAPIのユーザーがいれば、契約で約束されたこと はもはや力を持ちません。観測されるシステムのあらゆる振る舞 いに対し、他者が依存するようになるのです。 •

    呼び出し元側に想定外のエラーコードが返却された結果、ユー ザーにとって不可解な画面が表示された • 特定の条件下でリトライロジックが機能しなかった などなど どうやって 「予期せぬ」「想定外の」「特定の条件下」 を見つけよう? 🤔
  5. 実験 vs テスト テスト • システムについて既に知られた特性が、期待通りであることを確認する • 主に、検証を行いたい対象が明らかになっているものに効果的 実験 •

    仮説を立て、その仮説の反証を試みる ◦ 反証されなかった場合は、仮説の信用度が上がる ◦ 反証された場合は、新たなシステムの特性に関する学びが得られる • システムの 未知の特性 を見つけるのに効果的 カオスエンジニアリングの アプローチは主に実験寄り
  6. ベリフィケーション(検証)vs バリデーション(妥当性確認) バリデーション(妥当性確認) • 個々の要素が期待通りに実装されていることの検証に重きを置く • 水道水の妥当性を確認するには ◦ 水道の配管や浄化、給水のシステムなど、水が届けられる過程にある全ての要 素が期待通りの状態であるかを検査する

    ベリフィケーション(検証) • ビジネスケースと 総合的な出力 に重きを置く • 水道水を検証するには ◦ 蛇口から出てくる水(出力)が正常かどうか水質検査する カオスエンジニアリングの アプローチは主に検証、 ベリフィケーション寄り
  7. カオス実験の進めかた カオスエンジニアリングの原則にのっとると ... 1. システムの「定常状態」を定める:正常な振る舞いを示す測定可能な出力を使用 2. 定義した「定常状態」に関する仮説を立てる:制御グループ(対照群)と実験グループのいず れにおいても継続すると想定 3. 実験グループに対し、実世界の事象(イベント)を反映する変数を導入する

    4. 制御グループと実験グループの間に定常状態に関する差異を調べ、仮説の反証を試みる a. 仮説が反証されなければ、仮説の確からしさが上昇する → 自信の向上 b. 仮説が反証されれば、新たな発見が得られる → 未知だったシステムの特性が 既知に!
  8. カオス実験の進めかた カオスエンジニアリングの原則にのっとると ... 1. システムの「定常状態」を定める:正常な振る舞いを示す測定可能な出力を使用 2. 定義した「定常状態」に関する仮説を立てる:制御グループ(対照群)と実験グループのいず れにおいても継続すると想定 3. 実験グループに対し、実世界の事象(イベント)を反映する変数

    を導入する 4. 制御グループと実験グループの間に定常状態に関する差異を調べ、仮説の反証を試みる a. 仮説が反証されなければ、仮説の確からしさが上昇する → 自信の向上 b. 仮説が反証されれば、新たな発見が得られる → 未知だったシステムの特性が 既知に 「定常状態」とは? 出力を測定する仕組み は備わっている? 変数には何を入れれば よい?
  9. 実験をしようと思った時点で、考えることがいっぱい システムの出力として観測できるもので、エンドユーザーに提供して いるビジネス価値に沿った内容で表現できると理想的 (Netflixの場 合は、秒間ストリーミング開始件数:Streams Per Secondのような メトリクスを利用している) 定常状態がメトリクスの形で表現されるのであれば、継続的に取得 できる可観測性のインフラを整えることから

    「定常状態」とは? 出力を測定する仕組み は備わっている? 変数には何を入れれば よい? すでに具体的な懸念が仮説に表現されているのであれば、そこから 始めるとよい。一般的な実験としてはレイテンシの注入やプロセスの 終了など、多様なものをサポートするツールがある 一律に適用可能な解はない。チームで議論をするところからはじめよう
  10. 参考資料 • Principles of Chaos Engineering(カオスエンジニアリングの原則) ◦ https://principlesofchaos.org/ • Getting

    Started with Chaos Engineering • Nora Jones, Casey Rosenthal & James Wickett • GOTO 2020 ◦ https://www.youtube.com/watch?v=vkxVaqS7q2Q • Rethinking How the Industry Approaches Chaos Engineering ◦ https://www.infoq.com/presentations/rethinking-chaos-engineering/ • カオスエンジニアリング – 回復力のあるシステムの実践 ◦ https://www.oreilly.co.jp/books/9784873119885/