原則:全ての要素を冗長化する
原則の背景
障害からの回復、可用性を高めることを目的とする。クラウドを利用する際の特徴として以下があるため、「冗長化」しておくことの検討が必要
- クラウドを活用する場合に、各サービスで一時的なメンテナンス作業などが告知なく実施されることがあるため一過性の障害発生する可能性がオンプレミスと比較して高い。
- クラウドサービスの場合、修理より交換することが基本的な考え方。インスタンスを別のものに変えるなど
推奨事項
仮想マシンを負荷分散サービスの内側に配置しておく
(例)パブリックサブネットにALB、プライベートサブネットにEC2を配置するイメージ
- アプリはどの仮想マシンにリクエストが転送されても問題なく処理ができるように、セッションストアはRedisにしてメモリに持たないなどの作りにしておくこと
フロントエンドとバックエンドのフェイルオーバーを同期する
(例) バックエンドのDBも切り替わった瞬間に書き込み、読み込みができること
入力を受け付けるフロントエンドと、そのデータを保持するバックエンド(DB)の切り替えを同時にできること。よくある構成として、複製されたDBはスレーブで読み込みだけしかできずにフェイルオーバーした瞬間に書き込みに失敗するようになる。
正常性エンドポイントを用意する
(例)死活監視用、関連しているサービスが起動しているかまで確認する用など用途は様々
注意点として、ヘルスチェックも負荷分散されること。異常であると拙速に判断された場合にサーバがリクエスト対象から外されることなどが考えられる。判断の閾値を小さくしすぎない、間隔を短くしすぎないなどが必要。