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は高くなります。
問題文にこんな表現があれば → これを選ぶ
- “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つの可用性ゾーンが丸ごと止まっても、もう一方が引き受けます。ほとんどのサービスが目標にする基本の構成です。
| 配置 | サーバーの故障 | ゾーンの障害 | リージョンの障害 | コスト・複雑さ |
|---|---|---|---|---|
| 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時間かかると仮定しました。どちらも短くするほどコストがかかります。
| RPO | RTO | |
|---|---|---|
| 問うこと | 失ってもよいデータは何分・何時間ぶんか | 止まってもよい時間は何分・何時間か |
| 決めるもの | バックアップの間隔、レプリケーションの方式 | 復旧のしかた、スタンバイ環境の準備の度合い |
| 0に近づけるには | リアルタイム(同期)レプリケーションが必要 | すでに動いているスタンバイ環境が必要 |
2つの目標は、技術ではなくビジネスが決めます。注文システムは1分止まるだけでも損失が大きく、注文を1件も失ってはいけませんが、社内レポートのシステムは1日止まっても大丈夫かもしれません。目標を短くするほどコストが上がるので、システムごとに損失とコストを比べて決めます。復旧にかかるコストが、障害で失うものより大きいなら、その目標は高く設定しすぎです。
問題文にこんな表現があれば → これを選ぶ
- “障害時に許容できる最大のデータ損失”RPO(目標復旧時点)
- “障害のあと、サービスを再開しなければならない最大の時間”RTO(目標復旧時間)
- “1日1回しかバックアップしないシステムのRPO”最大24時間
- “RPOを0に近づける”リアルタイム(同期)レプリケーション
- “RTO・RPOを短くするほど”コストが上がる
目標が決まったので、次は止まらないようにする番です。まずは、リクエストが急に押し寄せたときにサーバーが耐えられるようにする方法から見ていきましょう。
Pro限定
ここまでは無料で読めます
残りの5章はPro会員向けです。各章に3D図解と「問題文にこんな表現があれば」の整理が続き、最後の章では実際に解いて確かめられます。
- 04スケーリングとオートスケーリング
- 05レプリケーションとDBのフェイルオーバー
- 06バックアップと復元
- 07災害復旧の4つの戦略
- 08レジリエンスの設計と確認
PasslyExam
概念をつかんだら、次は試験形式の問題で確かめましょう
PasslyExamは、各資格の出題範囲に合わせて作成したオリジナルの練習問題・解説・本番形式の模擬試験を提供しています。正解の選択肢がなぜ正しく、似た選択肢がなぜ誤りなのかまで解説します。登録すると毎日無料で練習問題に取り組めます。
この概念が出題される試験
- SAA-C03AWS Certified Solutions Architect - Associate
- CLF-C02AWS Certified Cloud Practitioner
- SOA-C03AWS Certified CloudOps Engineer - Associate
- SAP-C02AWS Certified Solutions Architect - Professional
- SY0-701CompTIA Security+
- AZ-900Microsoft Azure Fundamentals
- AZ-104Microsoft Azure Administrator
- NCA-100NAVER Cloud Platform Certified Associate
- NCP-202NAVER Cloud Platform Certified Professional (Network/Media, Database/Management/Analytics)
- NCP-207NAVER Cloud Platform Certified Professional (Troubleshooting)
- NCP-200NAVER Cloud Platform Certified Professional (Overview, Compute/Storage)
- N10-009CompTIA Network+