6.2 可用性設計
High Availability Design
高可用性(High Availability)は、システムが継続的に稼働し、障害発生時も迅速に復旧できる能力である。クラウドでは、マルチAZ、マルチリージョン、オートスケーリングを組み合わせて実現する。
可用性の指標
| 可用性 | 年間ダウンタイム | 月間ダウンタイム |
|---|---|---|
| 99%(2ナイン) | 3.65日 | 7.2時間 |
| 99.9%(3ナイン) | 8.76時間 | 43.8分 |
| 99.99%(4ナイン) | 52.6分 | 4.4分 |
| 99.999%(5ナイン) | 5.26分 | 26秒 |
可用性を1桁上げるごとに、必要なコストと複雑性は指数関数的に増加する。ビジネス要件に基づいて適切な可用性レベルを選択することが重要 [1]。
マルチAZ / マルチリージョン
@startuml
skinparam backgroundColor #FEFEFE
cloud "ユーザー" as User
rectangle "リージョン A (東京)" as RegionA #DBEAFE {
rectangle "AZ-a" as AZa #93C5FD {
rectangle "Web" as WebA #60A5FA
rectangle "App" as AppA #60A5FA
}
rectangle "AZ-c" as AZc #93C5FD {
rectangle "Web" as WebC #60A5FA
rectangle "App" as AppC #60A5FA
}
database "RDS\n(Multi-AZ)" as RDS #60A5FA
rectangle "ALB" as ALB #93C5FD
}
rectangle "リージョン B (大阪)" as RegionB #D1FAE5 {
rectangle "スタンバイ環境" as Standby #6EE7B7
database "RDS\n(リードレプリカ)" as RDSRep #6EE7B7
}
User --> ALB : Route 53\nフェイルオーバー
ALB --> WebA
ALB --> WebC
RDS <--> RDSRep : 非同期レプリケーション
note bottom of RegionA
マルチAZ: 99.99%
AZ障害に耐性
end note
note bottom of RegionB
マルチリージョン: 99.999%
リージョン障害に耐性
DR対応
end note
@enduml
図1: マルチAZ/マルチリージョン構成
| 構成 | 耐障害性 | コスト | 複雑性 |
|---|---|---|---|
| シングルAZ | サーバー障害 | 低 | 低 |
| マルチAZ | AZ障害 | 中 | 中 |
| マルチリージョン | リージョン障害 | 高 | 高 |
オートスケーリング
@startmindmap skinparam backgroundColor #FEFEFE * オートスケーリング ** スケールアウト/イン *** 水平スケーリング *** インスタンス数増減 *** ステートレス前提 ** スケールアップ/ダウン *** 垂直スケーリング *** インスタンスサイズ変更 *** ダウンタイム発生 ** トリガー *** CPU使用率 *** メモリ使用率 *** リクエスト数 *** カスタムメトリクス *** スケジュール left side ** ベストプラクティス *** 最小/最大台数設定 *** クールダウン期間 *** ヘルスチェック統合 *** 予測スケーリング ** 3大クラウド *** AWS: Auto Scaling Groups *** Azure: VMSS *** GCP: MIG @endmindmap
図2: オートスケーリングの概念
オートスケーリングの注意点
1. ステートレス設計が前提(セッションは外部ストアに)
2. スケールアウトには時間がかかる(ウォームアップ)
3. 最小台数を0にすると初回リクエストが遅延
1. ステートレス設計が前提(セッションは外部ストアに)
2. スケールアウトには時間がかかる(ウォームアップ)
3. 最小台数を0にすると初回リクエストが遅延
出典
[1] AWS. Reliability Pillar. https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/
[2] Microsoft. Design for high availability. https://docs.microsoft.com/azure/architecture/framework/resiliency/
[2] Microsoft. Design for high availability. https://docs.microsoft.com/azure/architecture/framework/resiliency/