BETA

不確実性から産まれたカオスエンジニアリング - ブラック・スワンとアンチフラジャイル -

投稿日:2019-01-06
最終更新:2019-01-06

少し前から、カオスエンジニアリングという用語をよく聞きますが、先日はじめて「カオスエンジニアリング完全に理解した」となったので、その話を書きます。特に手法としてのカオスエンジニアリングはよく知られていますが、不確実性を軸にして理解するとかなり見通しがよくなり、なぜ本番で直接障害を起こせるのか?という辺りを共感しながら理解できたので、そういった事についての話を書きます。カオスエンジニアリングの(メタ)アーキテクチャ、というか。

※「完全に理解した」程度の理解なので、カオスエンジニアリングを実践してどうこう、という話ではありません。初心者の発言としてご理解ください。また、事実関係でおかしな点があればコメントお願いします。

要旨

  • 想定可能なランダムネスをリスク、想定不可能なランダムネスを真の不確実性と呼ぶことがある
  • 真の不確実性で、かつ強い影響を持つものは沢山あるが、しかし統計その他の手法は全ての局面で無力ではない(「わからない事」がある一方で、「わかる事」もある)
  • フラジャイルはリスクに弱い、ロバストはリスクに強いが真の不確実性に弱い、レジリエンスは真の不確実性にも強い
  • ただしフラジャイル・ロバスト・レジリエンスはいずれも不確実性がマイナスに出る、アンチフラジャイルはそうではなくプラスに出る
  • ブラック・スワンで本当に言いたかった事は、結局はアンチフラジャイルであれという事(のはず)
  • カオスエンジニアリングが産まれた背景には、「アンチフラジャイルでありつづける」という目的がある
  • 「アンチフラジャイルであること」の意味も効用もとても幅広く、単純なエンジニアリングに限ったものではない

きっかけはブラック・スワン - 不確実性

最終的に行き着くところはカオスエンジニアリングの話なのですが、少し回り道をします。
AmazonのCEOであるジェフ・ベゾスという人が愛読していたという本があります。

ブラック・スワンというのは、黒い白鳥の事で、要はそれまでの観測では白鳥というのは白い鳥ばかりだったので「黒い白鳥はいない」と思われていたのが、生物学的には白鳥というほか無い黒い鳥が現れてしまった、黒い白鳥というものが存在してしまった、というような事例のことです。
これが転じて、一般にそれまでの知識だけでは到底説明できないような事象たち(であって、事後にはさも当然であるかのように説明でき、かつ衝撃の大きなもの)を「ブラック・スワン」と呼んでいるのですが…
この本の紹介に曰く、

■人間には不確実性を扱えない根本的欠陥があることを解明!
原書が刊行されたのは2007年4月。前著『まぐれ』同様、発売直後から、人間の思考プロセスに潜む根本的な欠陥を、不確実性やリスクとの関係から明らかにして、経済・金融関係者の話題をさらった。さらに、「サブプライムローン危機」が発生すると、「誰一人予想もしなかったインパクトのある事象」が起こる原因を原理的に明らかにした書として爆発的に読まれ、全米で150万部超の大ヒットを記録している。
(略)

それでこの本の書評を見てみるのですが、まあなんと、同じ本を読んでいるとは思えないぐらい、謎の感想ばかりが出てくるのです。Amazonのカスタマーレビューなんかを見ると、かなり謎です。
すべて、Amazonのレビューからですが、

昨年の地震前はリスクを低く見積もり、今は過大に心配していることが読んだ後でも実感させられます。
地震の前に読んでいたら全く異なる読後感だったと思わせる内容です。

今回の地震を反省として、ブラックスワンを読み直すと実は非常に効果的な災害対策ができるのではないかと思います。

ブランド、宗教、自己啓発、信用、エセ科学。貨幣すら、信用できない時代に、
何をどこまで疑うべきか。を、問う本書は一読に値する。
Amazonのレビューを鵜呑みにして失敗ばかりしてるあなたにはうってつけの書。

未来のことはわからない。悪いことも起きるし、ラッキーなことも起こる。
社会科学はこの前提を忘却し、他者をも自らをも欺き、明日のことがわかるなどと僭称している。わかるわけがなかろうが・・・・。
本書の結論はそんなところ。

うーん、具体的に何を主張しているのか、全くわからない!本当にみんな同じ本を読んだのだろうか
一部、本の内容に踏み込んで書いているレビューもあるものの、具体的に何を言っているのかが読者にさっぱり伝わっていない感じがあります。特にビジネス書の場合は、レビューにおいてはレビュー者が感銘を受けた部分が端的に表現されがちなものですが、その表現の中身が無いという点において、かなりびっくりします。これは面白い。
とはいえ、ジェフ・ベゾスが単なるニヒリズムを書いた本を持ち上げるとは到底思えません。また、この著者も実際にかなりの額を稼いでいるので、その裏付けが全く無いとも思えません。
しかし、ここまで来ると、もはや本書を読んでしまうとカンニングをした気持ちになってしまうので、なんとしても直接読まずに推測をしてから本書を読みたいという気持ちになってしまいます。

というような屈折した感情を受けて、他にもいくつかの書評を見てみたりして、なんとなくこんな感じかな?と思ったのは…

実際にわかる事・わからない事の丁寧な説明

(1)フラクタル/べき乗則的な考え方と旧来のベルカーブ的統計の比較
(2)非線形的な予測の難しさと線形的な予測の比較
みたいな事を通して、本の中では、わかる事とわからない事を結構丁寧に述べているのではないでしょうか。(仮説)

「わからない事」の本質的な難しさ

とくに、わからない事の部分に関しては、

  • 1000日のデータが1001日目の暴落を説明できない件など、統計その他による説明ができない事象が確かに無視できない規模で存在している
  • 一方で、そのような事象は原理的に説明が難しい
  • 旧来の理論ではその事象の後にはアドホックな説明によってさも事前に分かっていた事であるかのように説明される

という事を言っていて、「究極的にメタ化すればどのような理論であってもその理論で説明できない何かがある」という事(に近い事)を主張しているように見えます。

多くの書評は、実際この「わからない事」は本質的に難しい、というところで止まっているようにも見えます。それを重んじる人もいれば、それだけでは何も分からないという人もいる、そういう感じに見えるのです。
ただ、あらゆる事象を究極的なレベルで見てしまうと、実際には何もメリットはありません。説明できない何かが確実に存在するという事を踏まえて、その上でどう建設的に考えるかということが大事です。

例えば統計に関しては、本当に全てを説明できる訳ではなくて、例外が致命的になり得るけれども、それでも統計を完全に捨てる事には全く意味が無い、というような。(正規分布してないものに正規分布を適用して分散(偏差値)で議論する事に意味がない、みたいな話は当然ですが)

 

ただ、これらは、ブラック・スワンという本を通して結局最も言いたかった/重みのある内容は一体何だったのか?ということの答えではないと思うのです。
その質問の一つの答え(≒上で述べた【どう建設的に考えるかということ】の一つ)は、以下のような不確実性を超えて得られるものについての思索なのかな、と思っていました。

不確実性を超えて得られるもの

わかる事・わからない事の丁寧な説明、という内容からは、特に

  • 原理的に想定可能なリスク
  • 原理的に想定不可能な真の不確実性(敢えてリスクと区別します)

というような概念が得られます。こうしたリスク/不確実性において、(確率的にはともかくとして)失敗した時のマイナスがたかが知れていて、成功した時のプラスが飛び抜けていれば、賭ける価値があります。
つまり、プラスになるような不確実性を積極的に掴みに行く、というような戦略ですね。

 

まあでも、それだけではないだろうと思いながら、謎を抱えて過ごしていたわけです。(原著読めよ)

ロバスト or アンチフラジャイル

ここで、全然関係ない話題で、ロバストとアンチフラジャイルの違いについて考える事になりました。(元ネタはQiitadon)

AシステムリリースでBシステム動かなくなってAシステムロールバックってあり得そうだけど、でもその場合はBシステムに手を入れる選択の方が多そうで、生じる問題は増えても結果的にAシステムのロールバックではなくなるというメカニズムもありそう。
不具合は、マイクロサービスに分割した方が生じやすそうだとは思う。
分割されてても機能的に結合してはいるはずなので、テストしないといけないけど、多分漏れやすくなる。多分モノリシックの方が、分割した機能の結合相当のテストケースは書かれやすいし。
ただ、マイクロサービスに分割した方が、片方がエラーである事を前提にした実装をしそうなので、その辺は分割した方がロバストになりそう。

このような趣旨のトゥートを受けて、

問:ロバストとアンチフラジャイルの違いについて述べなさい

これで、改めてアンチフラジャイルについて調べていて、1年ちょっと前のアンチフラジャイルなチームを目指してという記事が出てきました。
端的には、ロバストは想定されたエラーに強い(小さい損が出る)、アンチフラジャイルは想定外のエラーで利益が出る、ということです。
ここでようやく、カオスエンジニアリングに繋がります。
一般に「なにかをやる」という事を広義で捉えると、「成功に向けての課題を得る事」と思う事ができます。このとき、カオスエンジニアリングみたいな事は、例えば「想定外の出来事で耐障害性を稼げる」というような意味でアンチフラジャイルであると言えるのです。

この主張が本論なのですが、ここで改めて、ロバスト・アンチフラジャイル(・フラジャイル・レジリエンス)について、先程のブラック・スワンの文脈で考えてみましょう。

  • フラジャイルは、想定の有無と関係なくエラーですぐに損が出る状態
  • 想定されたエラーには強い(損が少ない)が想定外の事象に無力なロバストは、金融危機みたいなものには脆い(ブラック・スワンのテーマのひとつ)
  • 想定内のエラーだけでなく想定外の事象に対しても出来る限り早く損の無い状態を作るのがレジリエンス
  • それらに対して、根本的に想定外の事象で益が出る、究極的にはどう転んでも良い方向に転がるようなあり方がアンチフラジャイル

という事になります。実は、先程のブラック・スワンについての考察の最後に書いた「不確実性を超えて得られるもの」というところが、アンチフラジャイルの萌芽になっているのですね。

ブラック・スワンの認知からアンチフラジャイル性の獲得へ

このアンチフラジャイル、超絶理想論というか、ちょっと頭のめでたい理論のようにも聞こえます。
ただ、これは例えば「裸足で歩く国で靴を売る話」などもある意味で同じであると言えるのです。裸足で歩く人しかいない国を、「そこに靴のマーケットは無い」と思うか、「みんな靴を履いてないからブルーオーシャンである」と思うか、それはまさに頭の使い方次第です。
靴を履く事が常識である国においては、裸足で歩く国(文化)の存在というのはブラック・スワン的な側面があります。このような物事に対して接するとき、前者のような考え方をしているとブラック・スワン的な事象が悪い方に展開しがちであり、後者のような考え方をしているとブラック・スワン的な事象を良い方に展開させやすくなるでしょう。これも広義においてはアンチフラジャイルという事ですね。

このアンチフラジャイル、じつはまさにブラック・スワンの「次」だったのです。
同じ著者の著作として、…

それで、「なるほど、そういう思考・感覚の文脈があって、それでカオスエンジニアリングが産まれたのか!」となったわけです。完全に理解した。
本質的には、スヌーピーの言うように「配られたカードで勝負する」という事ではあるのですが、アクシデントなど普通に考えればマイナスの出来事を、どうプラスに落とし込んで実際にプラスにするか、という事なのです。
そういう構造を、より広い範囲で作ること。
カオスエンジニアリングも、この文脈で産まれたのです。いきなり本番環境で障害を起こせば、ずいぶん思い切った事をするなあという事ですが、一見傷になりそうなアクシデントすらも全体の向上に活かすための仕組みと思うと、ある意味で自然に解釈ができるということです。

そうすると、先程述べたカオスエンジニアリングのメリットというのも、必ずしも耐障害性という事に限りません。例えば処理の遅さによる障害に対策をすれば思わぬボトルネックの発見・解消や応答の高速化という利益を得る可能性があります。他にも、不要な機能の洗い出し、新たな導線の発掘、といった事にすら繋がる可能性があります。

実際に運用したら確実にいつか起きるであろう障害を実験的に(しばしば予測のつかないような形で)起こして、場合によっては一部のお客様を巻き込んででも、ビジネス本流でその状況が再現しても問題ないようにする、あるいはそこにチャンス(商機)を見出す。

よく言われる「ランダムに障害を埋め込む」、それは確かに手法としてはそうなのですけど、結局やりたかった事はそういう事だったのですね。

特に感動したのは

以下の話自体はカオスエンジニアリングと直接関係がないのですが…
端的に”ブラック企業精神”とでもいうのか、「お客様の話は必ず肯定で聞いてから、条件が必要ならその場で条件を説明して前向きに話す」という交渉術のようなものがあります。
お客様からの追加の要件みたいなものは、基本的にはお金がもらえる事なので肯定されるべき事のはずですが、その場の感情などでつい否定的に応答されがちです。
ただ、それはある意味でフラジャイルな応答であって、これをアンチフラジャイル的にすると、その場で条件を説明して切り返すことで前向きな方向で物事を進めることができます。
もちろん、失敗すると痛い目に合うのですが、こういった会話の内容がリスクや真の不確実性を持っているという事を認識した上でアンチフラジャイルを目指すという事が、単純な人間の感情の取扱いみたいな事を超えた本質的な内容であった、ということに気づいたのでした。

まとめ(=要旨)

  • 想定可能なランダムネスをリスク、想定不可能なランダムネスを真の不確実性と呼ぶことがある
  • 真の不確実性で、かつ強い影響を持つものは沢山あるが、しかし統計その他の手法は全ての局面で無力ではない(「わからない事」がある一方で、「わかる事」もある)
  • フラジャイルはリスクに弱い、ロバストはリスクに強いが真の不確実性に弱い、レジリエンスは真の不確実性にも強い
  • ただしフラジャイル・ロバスト・レジリエンスはいずれも不確実性がマイナスに出る、アンチフラジャイルはそうではなくプラスに出る
  • ブラック・スワンで本当に言いたかった事は、結局はアンチフラジャイルであれという事(のはず)
  • カオスエンジニアリングが産まれた背景には、「アンチフラジャイルでありつづける」という目的がある
  • 「アンチフラジャイルであること」の意味も効用もとても幅広く、単純なエンジニアリングに限ったものではない

おまけ

Antifragileに焦点をあてて、カオスエンジニアリング以外にも、例えばマイクロサービスなどのAntifragile性について言及した記事がありました:
https://developers.redhat.com/blog/2016/07/20/from-fragile-to-antifragile-software/

マイクロサービスとアンチフラジャイルの話がよくあるから、ロバストと言った時にアンチフラジャイルとの違いの話が出たんだな―と今更。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

だべだべ - @sasanquaneufの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!