コンセプト解説

高可用性・災害復旧

サーバーは故障し、データセンターは停電し、人はうっかりデータを消してしまいます。高可用性は、そんなことが起きてもサービスを動かし続けること。災害復旧は、それでも止まってしまったときに、決めておいた時間のうちに元に戻すことです。クラウドプロバイダーごとに名前は違いますが、骨組みは同じです。まず骨組みを見て、プロバイダーごとの違いは章ごとに見ていきましょう。

クラウドプロバイダー一般用語AWSAzureGoogle CloudNAVER Cloud

Google Cloudを基準に表示しています。各章でGoogle Cloudのサービス名と、ほかのプロバイダーとの違いもあわせて表示します。

01

障害は必ず起きる:可用性の数字と単一障害点

可用性は、サービスが使える状態だった時間の割合です。99.9%はかなり高く見えますが、1年に直すと約8時間45分止まるという意味です。9が1つ増えるたびに、許される停止時間は10分の1に減り、そのぶんコストも設計の難しさも上がります。

可用性1年に止まる時間1か月に止まる時間
99%約3日15時間約7時間
99.9%約8時間45分約43分
99.95%約4時間22分約22分
99.99%約52分約4分
99.999%約5分約26秒

直列につなぐと下がり、並べると上がる

サービスは、いくつものコンポーネントがつながってできています。Webサーバー、アプリサーバー、DBを順に通ってはじめて応答が返るなら、3つとも動いていなければなりません。だから全体の可用性は、それぞれのコンポーネントの可用性の掛け算です。99.9%のものを3つつなぐと、約99.7%に下がります。逆に、同じサーバーを2台並べておくと、両方が止まらない限り止まらないので、その層は99.9999%まで上がります(2台の障害が互いに独立していると仮定した場合)。下の図で、層ごとに2台に増やしてみましょう。

全体の可用性
99.7% (年間約26.3時間)

Web → アプリ → DB を通ってはじめてサービスになる · 左上 = 層ごとの可用性

コンポーネントがそれぞれ99.9%でも、3つを直列につなぐと3つとも動いていなければならないので、全体は99.7%に下がります。逆に、同じサーバーを2台並べておくと、両方が止まらない限り止まらないので、その層は99.9999%になります(障害が互いに独立していると仮定した計算です)。

1つ止まるだけで全体が止まってしまう場所を単一障害点(SPOF)と呼びます。高可用性の設計とは、単一障害点を見つけて1つずつなくしていく作業です。サーバーだけではありません。DB、ロードバランサー、ネットワークの経路、さらには「このサーバーの設定を知っているただ1人の人」も単一障害点になりえます。

SLAは保証ではなく、補償の約束

クラウドのサービスは、それぞれSLA(サービスレベルアグリーメント)で月間の稼働率を約束しています。ただしSLAは「必ずこれだけ動く」という保証ではなく、「守れなかったら料金の一部をクレジットで返す」という約束です。止まっていたあいだの損失を埋めてくれるわけではないので、自分のサービスの可用性は設計で作る必要があります。同じサービスでも、サーバー1台のときより、複数のゾーンに分けて置いたときのほうがSLAは高くなります。

試験の定番の計算です。直列は掛け算(99.9% × 99.9% ≈ 99.8%)、冗長化は1 − (1 − a)²(99.9%を2台 → 99.9999%)。「最もコスト効率よく可用性を上げるには」と聞かれたら、いちばん弱い単一障害点から冗長化します。

問題文にこんな表現があれば → これを選ぶ

  • “1つ止まると全体が止まるコンポーネント”単一障害点(SPOF)
  • “99.9%のコンポーネント3つを直列につないだ全体の可用性”約99.7%(掛け算)
  • “同じサーバーを2台置くと可用性は”上がる — 両方止まらない限り止まらない
  • “SLAが守られなかったときに受け取るもの”サービスクレジット(損失の補償ではない)
  • “可用性99.99%の1年間のダウンタイム”約52分

単一障害点をなくそうと、サーバーを2台に増やしました。では、その2台が同じ建物にあったらどうでしょう?

02

障害の大きさ:サーバー、ゾーン、リージョン

障害には大きさがあります。サーバー1台のディスクが壊れることもあれば、データセンター1か所が停電・火災・ネットワーク障害で丸ごと止まることもあり、まれに地域全体が自然災害や大規模な障害で止まることもあります。1回の障害が影響を及ぼす範囲を影響範囲(ブラスト半径、blast radius)と呼びます。

クラウドは、この範囲を可用性ゾーンとリージョンに分けて見せてくれます。リージョンは東京や大阪のような地域で、その中に、電源・冷却・ネットワークがそれぞれ独立したデータセンターの集まりである可用性ゾーンがいくつもあります。ゾーン同士は同期レプリケーションができるくらい近く(遅延は数ミリ秒)、1つのゾーンの災害がほかのゾーンに広がらないくらいには離れています。

配置
障害
配置
2つのゾーンに1台ずつ
結果
サービス継続

サーバー2台をどこに置くかで、耐えられる障害の大きさが変わる

2台を別々のゾーンに分けて置いたので、1つのゾーンが丸ごと止まっても、もう一方が引き受けます。ほとんどのサービスが目標にする基本の構成です。Google Cloudは、ゾーンをリージョン内の単一障害ドメインとみなし、複数のゾーン・複数のリージョンへのデプロイを推奨しています。

配置サーバーの故障ゾーンの障害リージョンの障害コスト・複雑さ
1つのゾーンに複数台耐える止まる止まる低い
複数のゾーンに分けて耐える耐える止まる中程度 — ほとんどの場合の基本
複数のリージョンに分けて耐える耐える耐える高い — レプリケーションの遅延・コスト

ほとんどの本番サービスは、複数のゾーンを基本にしています。同じリージョンの中なので遅延が小さく、DBを同期レプリケーションでき、ゾーンの障害にも耐えられます。リージョンの障害まで耐える必要がある場合(法律・規制、とても大きなサービス)に限って複数のリージョンに広げます。その方法が、7章の災害復旧の戦略です。

問題文にこんな表現があれば → これを選ぶ

  • “データセンターが1つ止まってもサービスを続ける”複数の可用性ゾーンに分けて配置
  • “地域全体の災害でもサービスを続ける”別のリージョンにコピー(災害復旧)
  • “サーバー2台を同じゾーンに置いた構成の弱点”ゾーンの障害で一緒に止まる
  • “ゾーン間で同期レプリケーションができる理由”同じリージョンの中なので遅延が小さい
  • “1回の障害が影響を及ぼす範囲”影響範囲(ブラスト半径、blast radius)

どこまで耐えるかを決めるには、まず目標が必要です。止まってもよい時間と、失ってもよいデータは、どれくらいでしょうか?

広告

03

何をどこまで守るか:RTOとRPO

災害復旧を設計するとき、最初に決める数字が2つあります。RPO(目標復旧時点)は「障害が起きたとき、どれだけのデータを失ってもよいか」を時間で表したもので、RTO(目標復旧時間)は「どれだけ長く止まっていてもよいか」です。

障害の時点を真ん中に置いて見ると、わかりやすくなります。さかのぼって、最後にデータを守っておいた時点(最後のバックアップやレプリケーション)までが失うデータ、つまりRPOです。先に進んで、サービスを再開するまでが止まっている時間、つまりRTOです。ここがつまずきやすいところで、RPOは「過去」、RTOは「未来」を向いています。下の図で、データの守り方と復旧のしかたを変えてみましょう。

データの守り方
復旧のしかた
RPO
24時間
RTO
8時間

障害の時点から、さかのぼるとRPO、先に進むとRTO · 時間の目盛りは対数、数字は例

RPOは「障害が起きたとき、どれだけのデータを失ってもよいか」を時間で表したものです。「1日1回バックアップ」なら、障害の直前までにたまった最大24時間ぶんのデータを失う可能性があります。RTOは「どれだけ長く止まっていてもよいか」です。「新しく作ってバックアップから復元」には約8時間かかると仮定しました。どちらも短くするほどコストがかかります。

RPORTO
問うこと失ってもよいデータは何分・何時間ぶんか止まってもよい時間は何分・何時間か
決めるものバックアップの間隔、レプリケーションの方式復旧のしかた、スタンバイ環境の準備の度合い
0に近づけるにはリアルタイム(同期)レプリケーションが必要すでに動いているスタンバイ環境が必要

2つの目標は、技術ではなくビジネスが決めます。注文システムは1分止まるだけでも損失が大きく、注文を1件も失ってはいけませんが、社内レポートのシステムは1日止まっても大丈夫かもしれません。目標を短くするほどコストが上がるので、システムごとに損失とコストを比べて決めます。復旧にかかるコストが、障害で失うものより大きいなら、その目標は高く設定しすぎです。

「最大15分のデータ損失を許容」→ RPO 15分。「4時間以内にサービスを再開」→ RTO 4時間。RPOは「データ」、RTOは「時間(停止)」と覚えましょう。

問題文にこんな表現があれば → これを選ぶ

  • “障害時に許容できる最大のデータ損失”RPO(目標復旧時点)
  • “障害のあと、サービスを再開しなければならない最大の時間”RTO(目標復旧時間)
  • “1日1回しかバックアップしないシステムのRPO”最大24時間
  • “RPOを0に近づける”リアルタイム(同期)レプリケーション
  • “RTO・RPOを短くするほど”コストが上がる

目標が決まったので、次は止まらないようにする番です。まずは、リクエストが急に押し寄せたときにサーバーが耐えられるようにする方法から見ていきましょう。

Pro限定

ここまでは無料で読めます

残りの5章はPro会員向けです。各章に3D図解と「問題文にこんな表現があれば」の整理が続き、最後の章では実際に解いて確かめられます。

  1. 04スケーリングとオートスケーリング
  2. 05レプリケーションとDBのフェイルオーバー
  3. 06バックアップと復元
  4. 07災害復旧の4つの戦略
  5. 08レジリエンスの設計と確認

PasslyExam

概念をつかんだら、次は試験形式の問題で確かめましょう

PasslyExamは、各資格の出題範囲に合わせて作成したオリジナルの練習問題・解説・本番形式の模擬試験を提供しています。正解の選択肢がなぜ正しく、似た選択肢がなぜ誤りなのかまで解説します。登録すると毎日無料で練習問題に取り組めます。