検索
特集

日本企業が「カオスエンジニアリングやっていく宣言」を出せた理由クックパッドに直撃(2/2 ページ)

クックパッドが2018年8月2日に公開したブログエントリ「Chaos Engineering やっていく宣言」に大きな反響があった。米国を中心に多くの企業で実践されているが、疑似的とはいえ本番環境に障害を起こさせるというカオスエンジニアリングを日本で実践するのは、まず不可能という向きが多かったからだ。なぜ、クックパッドでは実践することが可能になったのか。

Share
Tweet
LINE
Hatena
前のページへ |       

カオスエンジニアリングにまず必要なのは「定常状態」の定義


ブログのエントリ投稿後からしばらくオフラインで『世界樹の迷宮』休暇を取っており、後から反響の大きさに驚いたというヨシオリ氏

 冒頭で紹介したブログで「宣言」を出したことで大きな反響があったが、実際にサービスにカオスを注入するのは少し先のことになる。現在ヨシオリ氏らがカオスエンジニアリングの前提として取り組んでいるのが、システムの定常な状態――「Steady State」の定義と、その状態を計測する数字の設定だ。だが実は、これが意外と難しいし、ちゃんと考えているサービスは多くないという。

 「CPU使用率が何%とか、エラーが何%とか、レスポンスタイムがどのくらいかを見ている人はいますが、サービスとして正しい状態にあることをどうやって確認するか、これを定めるのはけっこう難しいと思っています」(ヨシオリ氏)

 ビジネス的なKPIとしてしばしば用いられる「入会者が1日当たり何人以上」というのともまた異なる。

 「Netflixの場合は、秒間で動画が再生された数が正常性を担保する数字になると決めています。『これが著しく変化していなければ、たとえエラーが発生していてもサービスとしては正常である』というのを定義しているんです。このように、何が正しい状況かを決めることが、カオスエンジニアリングでは大事です」(ヨシオリ氏)

 そうでなければ、環境にカオスを注入したときに正常時との比較もできない。新しいサービスを少しずつデプロイしていって、問題があれば戻す「カナリアリリース」の導入も、その観点から少し先のことと考え、Steady Stateの定義を優先して考えているそうだ。

 クックパッドでは現在、@itkq氏を中心にいくつかの値を取り始め、リアルタイムに「Steady Stateかどうか」を計測できる環境を整え始めている段階だ。準備が整ったら、多数あるマイクロサービスのうちカオスエンジニアリング「レディ」なものから、順次実施する。また、「インスタンスを落とす」というカオスだけではなく、将来的には「通信やデータベースをはじめとするミドルウェアに障害が発生したときにどうなるか」というカオスも注入する予定だ。

サービス開発者もカオスを意識したUI設計を

 「次にクリティカルパスになるのって、データベースだと考えています。緊急メンテナンスや障害などでデータベースとの接続が切れてしまい、レスポンスがなくなったときでも影響が発生しないことを担保したい」(ヨシオリ氏)

 ヨシオリ氏がやはり例として挙げるのはNetflixだ。Netflixを利用していると、たまに「マイリスト」や「レコメンデーション」の情報が出てこないことがあるが、ユーザーからすると動画の再生自体は行えるため問題はない。

 「あれって、ユーザーの情報が取れなかったときだと思うんです。Netflixはそういうときでもうまくエラーを隠しています。それと同じように、サービスのどこかで問題があったとき、復旧するのも大事ですが、それでもなお正常に動いているように見えることが大事ではないでしょうか。例えば、データベースからユーザーの情報が取れなかったときに画面が真っ白になってしまうのがいいのかどうか。仮にユーザーの情報が取れないとしても、レシピ情報を見る分には影響がないことを担保するUI作りを、HTMLやレンダリングも含めてどんどんやっていきたいと考えています」(ヨシオリ氏)

 そんな環境を作ることで、サービス開発者側にも変化が期待できる。開発時から、インフラのどこかにエラーがあったとしても動き続けるUIを作る意識付けが生じるのではないかというわけだ。

 「たとえ通信ができなかったり、サービスのレスポンスが返ってこなかったりしても動くよう、あらかじめカオスを考慮してUIを設計し、作るようになるのではないかと期待しています。結局、カオスエンジニアリングが目指すのは、『分散した複雑なシステムにおいて、どこか1カ所で、あるいはどこか遠くで障害が起きたとしてもシステム全体が使えなくなってはいけない』という状態を作り出すことではないでしょうか」(ヨシオリ氏)

ユーザーに常に正常なサービスを届けていくために

 コンテナオーケストレーション、サービスメッシュといったさまざまなサーバサイドの取り組みをエンジニア全員で進める中で、カオスエンジニアリングにも取り組むクックパッド。目的は、ユーザーにより良いサービスを常に提供することにある。

 「『障害を本番でエミュレートするなんてとんでもない』というけれど、『では、実際に障害が起こったらどうするんですか』と聞きたい。実際に障害が起きたとき、何が起こるか分からない環境で対処できるんですか。だったら今のうちに障害を起こしておいた方が楽ですよね」(ヨシオリ氏)

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る