IT の基礎
可用性と冗長化
可用性は、システムが使える時間の割合です。部品を直列につなぐと全体の稼働率は下がり、同じ部品を並列に並べて冗長化すると上がります。
可用性は、システムが使える時間の割合で、稼働率 99.9% なら 1 年のうち約 8 時間 46 分は止まってよいという意味です。全体の稼働率は部品の組み方で決まります。どれか 1 つが止まると全体が止まる直列の構成では部品より下がり、同じ役割の部品を並べてどれかが動けばよい並列の構成では部品より上がります。PCA の問題で「単一障害点をなくす」「複数のゾーンに置く」が正解になるのは、この並列の効果を使うためです。
稼働率を停止時間に直す
稼働率は、動いていた時間を測った期間全体の時間で割った値です。1 年 (525,600 分) のうち 525 分止まれば、稼働率は約 99.9% になります。99.9% と 99.99% は数字の差が小さく見えますが、許される停止時間は 10 倍違います。9 の数で「スリーナイン (99.9%)」「フォーナイン (99.99%)」とも呼びます。
| 稼働率 | 1 年 (365 日) で止まってよい時間 | 1 か月 (30 日) で止まってよい時間 |
|---|---|---|
| 99% | 3 日 15 時間 36 分 | 7 時間 12 分 |
| 99.9% | 8 時間 46 分 | 43 分 |
| 99.95% | 4 時間 23 分 | 22 分 |
| 99.99% | 53 分 | 4 分 |
| 99.999% | 5 分 | 26 秒 |
SLO は自分たちの目標、SLA は契約上の約束
SLO (サービスレベル目標) は、自分たちのサービスで目指す稼働率などの目標値で、チームの中で決めます。SLA (サービスレベル契約) は、利用者との契約で約束する値で、下回ったら返金などの補償をします。約束を破らないよう、SLA は SLO より低めに置くのがふつうです。
Google Cloud の SLA は、サービスごとに月単位の稼働率で公開されています。Compute Engine の SLA では、VM 1 台 (メモリ最適化以外のマシン) が 99.9%、複数のゾーンに置いた VM が 99.99% です (Premium Tier の場合。ストックホルムのリージョンだけは 99.95%)。下回った月は、翌月以降の請求からクレジットとして差し引かれます。SLO の決め方は可観測性と信頼性の運用、障害からの復旧の設計は可用性と災害復旧で扱います。
単一障害点は冗長化でなくす
単一障害点 (SPOF、Single Point of Failure) は、そこが壊れると全体が止まる部品です。サーバーが 1 台しかなければ、そのサーバーが単一障害点です。冗長化は、同じ役割の部品を複数置いて、1 つが壊れても残りで処理を続けられるようにすることです。
冗長化した構成では、振り分ける側のロードバランサが新しい単一障害点にならないかも確かめます。Google Cloud のロードバランサは、Google のインフラ全体に分散して動くマネージドなサービスなので、利用者が 2 台目を用意する必要はありません。また、サーバーを 2 台置いても同じゾーン (データセンターの区画) にあれば、ゾーンごと止まったときに両方止まります。ゾーンについてはリージョン・ゾーンと可用性で扱います。
直列は稼働率の掛け算、並列は止まる確率の掛け算
Web サーバー、アプリのサーバー、データベースのように、要求が順に通る部品は直列です。全部が動いているときだけ全体が動くので、全体の稼働率は各部品の稼働率の掛け算になります。99.9% の部品を 2 つ直列にすると 99.9% × 99.9% = 99.8001% で、部品 1 つより下がります。
並列に並べた部品は、全部が同時に止まったときだけ全体が止まります。99.9% の部品が止まっている確率は 0.1% なので、2 つが同時に止まる確率は 0.1% × 0.1% = 0.0001% です。全体の稼働率は 100% からこれを引いた 99.9999% になります。
下の計算機で、部品の稼働率、数、組み方を変えて、全体の稼働率と年間の停止時間を確かめてください。
この計算は、部品どうしが無関係に壊れることを前提にしています。同じ電源やネットワークを使う部品は一緒に止まるので、実際の稼働率は計算より低くなります。公開されている SLA も、この計算の値をそのまま約束するものではありません。Compute Engine の SLA では、複数のゾーンに置いた VM は 99.99% です。冗長化するときは、部品を別のゾーンやリージョンに分けて、一緒に止まる原因を減らします。
PCA の問題で「1 つのゾーンが止まってもサービスを続けたい」とあれば、VM を複数のゾーンに分けて置き、ロードバランサで振り分ける構成を選びます。「リージョン全体の障害にも耐えたい」なら、同じ考え方で複数のリージョンに分けます。分ける範囲が広いほど、一緒に止まる部品は減り、費用と構成の手間は増えます。
IT の基礎の章はここまでです。次の章「Google Cloud の土台」では、まず学習用の環境を作るところから始めて、ここまでの知識を Google Cloud の上で確かめていきます。