可用性を分かり合うのは難しい

tech-blog.monotaro.com
大変参考になりました。

で、そのSREのプロの方が、このように書いています。

可用性99.5%の世界を想像できるでしょうか。ブラウザでいろいろなサイトを表示すると1000回中5回がエラーになります。

個人的な意見ですが、「可用性99.5%」と「1,000回中5回」はリンクしないと思うんですよね。

教科書の定義によれば、可用性は、機械を動かしてから壊れるまでの時間と、壊れてから直るまでの時間の比率で求めるものです。
995時間動いた後に、5時間止まったら99.5%です。2つの時間は平均を用いますから、合計1,000時間の中で壊れていた時間が分散していても平均を取れば99.5%になるでしょう。
で、たまたま、同じ人数が等間隔でアクセスしてくれた場合は1,000回中5回になるかもしれません。例えば995:5の場合において、1時間あたり必ず1人ずつ来て、画像がないWebページを3つ見るとします。この場合は、1,000時間運用すれば3,000回のアクセスが来て15回が使えません。しかし、現実の世界においては「わからない」というのが正解ではないでしょうか。


ただ、算定に用いるのは回数ではなくて時間だという定義の話をしたかったわけではありません。


とても信頼性が高いシステムがあったとして、わずかな停止の間に大量のアクセスがあったとします。
で、そのアクセスを人がやっていたら、例えば人がブラウザにURLを入れたり、ブックマークを使ったり、他のページのリンクをクリックしたのでしょう。システムは「少し待ってからやり直してください」というエラー画面を出します。人々はその指示に忠実に従う場合もあるかもしれません。ただ、最近は再送要求を機械がやる場合もあります。機械は疲れを知らないし飽きが来ないので回復するまでに繰り返しアクセスを続けます。また、人だったとしても、人があせっていてブラウザのボタンを連打すれば、再送要求が増幅します。故障当初からアクセスを始めた人に加えて、その後に新規にアクセスを始めた人も要求に加勢します。
そして、増幅した要求を受け止められなくなると、システムは長期停止となります。サーバーは故障から自動復旧するなどしてわずかな停止時間で再開しても結局サーバーのプログラムは処理しきれません。高級なシステムを入れたからといって、止まるときは止まるのです。
これを書いている今は2022年ですから、携帯電話会社の大規模通信障害が記憶に新しいです。
結果として大きなお詫びを支出することになりましたが、もともとそのようなことはないように信頼性の高い設計を依頼し、高額を支払っていたに違いありません。
深夜に障害を起こしてなぜ輻輳が発生するのかと話題になりましたが、夜ふかしする人々がプラチナチケットの購入争いをするかのように連打をしていたわけではないのです。再送要求を出していたのはスマートフォンのソフトウェアでした。

だから、どのような信頼性レベルのシステムがあったとしても、故障期間中に想定を超えるアクセスがあれば正常な応答を返す割合は落ちるのです。携帯電話機会社の場合はデータベースが落ちるという障害も重なり、回復に相当な時間がかかりました。だから、1,000回中、何回エラーになるかは「場合による」が正解です。可用性が90%でも95%でも99%でも「場合による」です。数字が多少変わっても比例はしません。

きっと、「全世界のネットワークを平均した場合」あるいは「言うまでもなく平均5回のことである」といった筆者なりの想定があるのでしょう。平均99.5%が相場だという論旨そのものはその通りかと思います。

ただ、個人的には可用性という言葉の用法が気になります。
可用性、可用率、稼働率、耐障害性、信頼性など、IT業界の人がいろいろな表現をしますが、これを顧客が理解して投資しているとは到底思えないんですね。
情報処理の資格試験では、システムを2つ3つ並列したり直列したりした場合の稼働率を求める問題が出ますが、今時のシステムは複数すぎてそんな簡単には可用性を求めることができません。
分かり合えないくらいなら、可用性を指標とするのはやめたほうがいいと思う今日この頃です。

顧客は裏切られた気分になる

堅牢なシステムを作る依頼をして高いお金を払った会社があるとします。それでもサーバーは落ちましたと聞いたらどういう反応を示すでしょうか。堅牢な設計にしたと聞いていましたが嘘だったのでしょうか。システム会社に説明を求めます。

スーパーの特売の日は対象の商品を大量に仕入れるし、店員もフル稼働でレジをすべて開けて備えます。それでも買い物客が殺到したら整列してもらったり整理券を配ります。品数に限りがあることをあらかじめ告知します。それでも行列が長くなったとき、いくら安いとはいえ、並ぶのが嫌な客はそもそも列に並ばなかったり、並んでいる列から離れます。

システム会社はこれとは少し違うと説明します。今回サーバーが落ちた状況を銀行の取り付け騒ぎに例えます。突然、人が殺到するし、その人たちは諦めないのです。スーパーで買える日用品とは異なり、今引き出せなかったら銀行が潰れると思って店舗に殺到します。しかし現金を払い出せません。

銀行が払い出せないのはなぜか。経営に失敗したとか、預金横領のような不祥事が公表されたとか、経済環境が突然変わったとか、いずれにしろ店鋪窓口の人には不可抗力だと言います。

説明を聞いていて、堅牢なシステムの持ち主は疑問が持ちました。もしかしたら払い出せない理由に銀行のシステム障害はないのか。そして、今回サーバーが落ちた自社にあてはめても、預金に比べれば不要不急な商材であるからサーバーの利用者があせることはないし、自社の社員は不祥事を起こしていない。原因はシステム障害だったのではないか。

やはり堅牢にする方法にミスがあったに違いないと思うようになりました。どうせい手間暇かけても、落ちるときは落ちますって、あれ、インフルエンザワクチンの時に聞いた話と同じだろうか。

システム会社の人は例え話による説明に失敗し、ますます怒らせてしまうことになりました。自分たちが悪いのに、仕方がないと言いくるめようとしたかのに受け止められたからです。

システム会社の説明は、依頼に応じたときも、例え話をしたときにも問題点がありました。また気が向いたら続きを書くことにします。