冗長化構成 — 2人同時に戦うか、ベンチで交代を待つか
サーバーは、いつか必ず壊れます。1台だけで動かしていると、その1台が止まった瞬間にサービスも止まります。そこで同じ役目のサーバーを2台以上用意しておくのが冗長化です。
たとえるなら2人のヒーローです。2人が同時に戦うやり方(アクティブ-アクティブ)と、1人が戦い、もう1人はベンチで交代を待つやり方(アクティブ-スタンバイ)があります。待つ側も、準備運動をして待つ(ホット)か、家で寝て待つ(コールド)かで、交代にかかる時間がまるで違います。図1で、3つの構成のヒーローを1人ずつ倒してみてください。
振り分け役
| 構成 | 交代まで | その間に失った | 1人倒れた後の負荷 | ふだんの費用 |
|---|---|---|---|---|
| 同時に戦う | — | — | — | 2台分(2台とも働く) |
| ホット | — | — | — | 2台分(1台は待つだけ) |
| コールド | — | — | — | 1台分+予備の置き場 |
待っている側が「温まっている」ほど、交代は速い
アクティブ-スタンバイでは、ふだん戦うのは1人だけです。もう1人は、A号が倒れたときのためだけに控えています。
ホットスタンバイの予備は、電源が入り、データも本番と同期し続けています。LBが異変に気づいたら、すぐに交代できます。コールドスタンバイの予備は電源が切れているので、起動してアプリを立ち上げ、バックアップからデータを戻すところから始めます。そのあいだ、サービスは完全に止まります。最後のバックアップより後のデータは戻らないこともあります。
そのかわり、コールドはふだんの費用が安い。ホットは、1台がまったく働かないのに2台分の費用を払い続けます。その中間として、電源だけは入れておき、データは定期的にしか送らないウォームスタンバイもあります。どれを選ぶかは「何分までなら止まってもいいか」で決めます。
2人で戦うなら「1人でも勝てる量」まで
アクティブ-アクティブは、ふだんから2台とも働くので無駄がなく、1台倒れてもサービスは一度も全停止しません。失うのは、LBが気づくまでの間に倒れたサーバーへ送った分だけです。
ただし落とし穴があります。通常時のアクセスを14件/秒にして、もう一度倒してみてください。2台で7件ずつ分けていたときは余裕でしたが、1台になると限界10件/秒のところへ14件が押し寄せ、あふれ続けます。2台とも働かせるなら、1台が倒れても残りで全部さばける量までしか、ふだん使ってはいけないのです。必要な台数に1台足しておく考え方をN+1と呼びます。
- 冗長化
- 同じ役目の機器を複数用意し、1つが壊れても止まらないようにすること。
- アクティブ-アクティブ
- 全台がふだんから処理を受け持つ構成。1台倒れたら残りが引き受ける。
- アクティブ-スタンバイ
- 1台だけが処理し、残りは交代要員として待つ構成。
- ホット / コールド
- 待機側がすぐ動ける状態か(ホット)、電源から入れる必要があるか(コールド)。中間がウォーム。
- フェイルオーバー
- 壊れた機器から、予備や残りの機器に処理を切り替えること。
- ヘルスチェック
- LBなどが定期的にサーバーへ問い合わせ、生きているかを確かめること。
- N+1
- 必要な台数(N)に予備を1台足しておく設計。1台倒れても能力が足りる。
まとめ
冗長化は「予備を持つ」だけでは終わりません。予備がどれだけ温まっているかで交代の速さと費用が決まり、全員を働かせるなら、1人倒れても足りる力を残しておく必要があります。同時に戦う双子のヒーローも、ベンチで待つ控えも、1人いなくなった後の戦いを前提に組むのです。