BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース レジリエントなサービスを設計する - Nora Jones氏がQCon SFでNetflixのカオスエンジニアリングを論議

レジリエントなサービスを設計する - Nora Jones氏がQCon SFでNetflixのカオスエンジニアリングを論議

原文(投稿日:2017/11/16)へのリンク

QCon San FranciscoでNora Jones氏が、“Designing Services for Resilience Experiments: Lessons from Netflix”と題したプレゼンテーションを行なった。講演の主な内容は次のようなものだ – エンジニアは企業の顧客と彼らが経験していることを見失ってはいけない。レジエンスのテスト容易性を設計することは共通の責務である。構成の変更はシステム停止を引き起こす可能性がある。エンジニアは設定変更のアンチパターンを見つけ出すための明示的な監視を行なうことが必要だ。

NetflixのシニアカオスエンジニアであるJones氏の講演は、レジリエンスあるいは“カオス”テストのためのサービスの設計方法に関する説明から始まった。講演では、フェールインジェクションテストをサポートするサービスの構築、RPCフレームワークを通じたサービス間通信の実現、RPCコールのフォールバックパスの実装とその検出方法、適切な監視機構 -- 主要なビジネスメトリクスを含む -- の実装と適切なタイムアウトの実現およびそれらの検出方法、といった概念について論議された。

システムのレジリエンス向上には、ユニットテストや統合テストなど、広く認められたソフトウェア開発方法論が存在しているが、特にマイクロサービスベースのアプリケーションのような複雑な分散システムの構築においては、新たな技術であるカオス試験にも高い価値がある。

Chaos Engineering: Netflix ChAP

過去2年間で、Netflixのフェイルインジェクションテストフレームワークは、ChAP: Chaos Automation Platformへと進化した。このプラットフォームはNetflixにおいて、テスト対象サービスに対する入力トラフィックを既存のサービスAPIとコントロールサービスAPI、カオス試験APIの間で分割することにより、レジリエンス試験を自動化するカオスエンジニアリングを可能にしている。コントロールおよび試験APIに送信されるトラフィックの量は、両者の監視出力と主要なビジネスメトリクス(Netfixユーザの“1秒あたりのストリーム”数など)の直接的な比較ができるように、意図的に少なく、かつ同じサイズに保たれている。両者のコントロールおよび試験の間に大きな乖離が検出された場合には、試験を“ショート”させて停止することが可能である。これによって、顧客が影響を受けるリスクが低減される。

Jones氏は、F#で記述されたフェイルインジェクションライブラリの概要をサンプルとして紹介した上で、その実装内容に沿って説明した。カオス試験を始めようとするエンジニアのために、例外によるフェールとレイテンシの導入という、2種類のフェイルインジェクションが紹介された。エンジニアは仮説を立て、試験を設計して実行し、仮説を証明(あるいは否定)するために必要なメトリクスを監視する。

レジリエンスを確保するには、優れた監視機構が不可欠だ。システムの状態だけでなく、構成の変更も監視する必要がある。講演では、構成変更はコード修正よりも危険な場合がある、という仮説が提示された。サーキットブレーカのフォールバックやタイムアウト、リトライといったシステム構成は、同じ場所から確認および監視可能であることが必要だ。

Netflixチームでは、システム内のRPCサーキットブレーカとしてHystrixを使用している。また、静的なコンテンツやキャッシュされた(無効になる可能性のある)データ、フォールバックサービスといった重要でないサービスに対しては、対処策としてフォールバック戦略が用意されている。開発者はグローバルおよびローカルなタイムアウトの概念と方針を意識する必要がある、フェールしたRPCコールを直ちにリトライするのは一般的によい考えではない、とJones氏は警告した。タイムアウト設定とリトライ設定の関係性について理解しておくことも重要である。

ChAPプラットフォームにはフォールバックやタイムアウト、リトライに関する重要な情報を表示する“Monocle”ダッシュボードコンポーネントがある。このシステムが最初に実装された時には、Netflixスタック全体のこの情報がグローバルに表示されることで、不適切な(あるいは相反する)レジリエンス設定を簡単に特定することができた。“重要度スコア”も定義されて、1秒あたりの要求数やリトライ、フォールバックのないRPCコールによるサービス修正の優先度計算が可能になった。

Don't lose sight of your customer

Jones氏は最後に、カオスエンジニアリングチームの努力とNetflix内の他チームの自動化に関する成功例として、サービスインシデントの回避や、その他の望ましくない副作用をサービス導入前に特定し修正した話を披露して、自身の講演を締め括った。講演の中では、“顧客を見失わない”ということが、重要なメッセージとして繰り返し語られた。レジリエンステストは、優れたカスタマエクスペリエンスを提供するという、Netflixの総合的なアプローチの一部なのだ。

Nora Jones氏の講演“Designing Services for Resilience: Lessons from Netflix”のスライド資料(PDF、3MB)はQConのWebサイトにある。また、講演を収めたビデオが今後数が月内にInfoQで公開される予定だ。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT