シングルクラウドでの可用性の向上
では、技術的な課題であるマルチクラウドとすることでの可用性の向上(複数のクラウドを利用したシステム分散)について考えます。ただし、1つのクラウド利用でも、可用性を向上するための分散配置構成は可能となります。まずは、1つのクラウド利用において高可用性を実現しているリージョンやアベイラビリティゾーン(データセンターを抽象化した概念。各クラウドで名称は異なりますが、本書では共通した概念として紹介する場合、AZ(Availability Zone)と表記します)について紹介します。
リージョン
クラウドは、世界中の多数のデータセンターを利用して提供されています。クラウドで共通している用語としてリージョンがあり、リージョンは、クラウドがサービスを提供している拠点(国と地域)を指します。日本では、各クラウドから次の名称のリージョンが提供されています。
リージョン同士は、それぞれが地理的に離れた場所へ配置され、完全に独立しています。なお、AWSやGoogle Cloud、OCIは東京(Tokyo)や大阪(Osaka)という都道府県名が含まれていますが、関東圏や関西圏を利用して、リージョン内でも広域に分散配置されている複数のデータセンター群で構成されています。
AZ
これらのデータセンター群はリージョンの中にある論理的な区分となり、実態はデータセンターを抽象化した概念となりますが、各クラウドでは異なる名称となっており、AWSではAZ(Availability Zone)、Azureでは可用性ゾーン、Google Cloudではゾーン、OCIでは可用性ドメイン(Availability Domains)と呼ばれています。クラウドベンダーやリージョンによっても異なりますが、1つのリージョンには1つ以上のAZが存在します。また、1つのAZは1つ以上の近接したデータセンター群で構成されています。つまり、1つ以上のデータセンター群がAZを構成し、複数のAZが集まったものがリージョンとなります。
AZについては、地理的な分離のみではなく、電源の系統も分離されており、一カ所の停電によりAZ内のすべてのデータセンター群が一斉にダウンしないように設計されています。複数のAZの地理的・電源的独立により、1つのリージョンであっても、障害への耐久性、信頼性が高くなっており、2つ以上のAZを利用することで冗長構成を組むことができます。
単一のAZのみでシステムを構築していた場合、オンプレミスの単体のデータセンターでシステムを構築していた場合と耐障害性は変わりません。耐障害性を高めてシステム全体の可用性を高めるには、複数のAZを利用してシステムを構築する必要があります。
複数のAZにサーバー、データベースなどをあらかじめ冗長化し配置しておくことで、耐障害性や可用性を確保できます。停電や地震等の災害の影響で1つのAZが停止しても、リージョン内の別のAZでサービス提供を継続できます。このような冗長構成は、マルチAZ構成と呼ばれます。次の図は、AWSにおいて、アプリケーションサーバー、データベースを利用するシステムをマルチAZ構成にする場合の基本的な構成です。ロードバランサーから2 台のアプリケーションサーバーに負荷分散し、AZ間で冗長化・データ同期されたデータベースにアクセスする構成になります。どちらかのAZで障害が発生しても、もう一方のAZでサービス提供を継続します。なお、データベースについては、書き込み可能なプライマリのAZのデータベースに障害が発生した場合は、セカンダリのデータベースがプライマリに昇格するように設計、実装します。データベースは、AWSが提供する機能によりAZをまたいでデータ同期が行われます。
なお、AZ内でも可用性を向上させる分散配置が可能です。例として、OCIは可用性ドメイン(Availability Domains)の中に複数のフォルト・ドメイン(FD)が含まれています。FDとは、可用性ドメイン内のハードウェアおよびインフラストラクチャをグループ化し分離したものです。FDではアンチアフィニティ(特定の仮想マシンが常に異なるホストで実行される必要があること)が提供されており、単一の可用性ドメイン内でインスタンスが同じ物理ハードウェア上に存在しないように分散できます。1つのFDに影響するハードウェア障害やメンテナンスは、ほかのFD内のインスタンスに影響しないため、複数のFDに分散配置させることで、システム全体の可用性を向上させることができます。
なお、OCIのFDに類似したAZ内での分散配置機能は、AWSではパーティションプレイスメントグループまたはスプレッドプレイスメントグループ、Azureでは可用性セットと呼ばれる機能で提供されています。
また、リージョン間は各クラウドのバックボーンネットワークで、高帯域幅で接続されています。これにより、複数のリージョンにまたがってグローバルにアプリケーションを提供することも可能になっています。
VPCとサブネット
なお、リージョン、AZと関連する用語として、VPC(Virtual Private Cloud)とサブネットがあります。VPCとは、「パブリッククラウド内の特定の場所(リージョン、アベイラビリティーゾーン)において、サービス契約者のリソースに契約者自身だけがアクセスできるようにするための仮想的なネットワーク区画を区切るサービス」のことです。論理的に分離された区画となるため、ほかのVPCやサービスと接続していない限り、ほかの利用者からは分断され、独立して利用できる区画となります。AWSとGoogle CloudではVPC、AzureではVNET(Virtual Network)、OCIではVCN(Virtual Cloud Networks)と呼ばれており、名称は異なっています。
サブネットとは、IP アドレス範囲(CIDR ブロック)が割り当てられたネットワーク区画を区切るサービスです。1つのVPCは、複数の「サブネット」というネットワーク区画で構成されます。VPCは、大きな用途単位(業務サービス用途、運用管理用途など)で分離し、VPC内のネットワーク要件(インターネットと直接接続するか、サーバー種別など)の違いをサブネット単位で区切って制御するケースに利用します。
AWSでは、リージョンの中にVPCが存在して、AZの中にサブネットが存在します。
Azureでは、リージョンの中にVNETとサブネットが存在します。AWSとは異なり、サブネットは可用性ゾーンをまたいで作成できます。
Google Cloudは、VPCがグローバルな存在となり、全世界のリージョンをまたいでVPCを作成できます。リージョンの中にサブネットがあり、サブネットはAzureと同様にゾーンをまたいで作成できます。ただし、リージョンをまたいでサブネットを作成することはできません。
Google Cloudの大きな特徴として、複数の国や地域向けにグローバルなサービス提供をする場合に、複数リージョンを利用しながら1つのVPCで対応できる点があります。ロードバランサーの配下に複数リージョンのサーバーを配置して、グローバルにリクエストを分散させることが可能です。
OCIでは、リージョンの中にVCNが存在しています。サブネットは、可用性ドメイン(Availability Domains)に固有のもの、また可用性ドメイン(Availability Domains)をまたいだもの(リージョナル・サブネット)が作成可能です。なお、可用性ドメイン(Availability Domains)の障害を考慮したリージョナル・サブネットが推奨されています。
AWS、Azure、Google Cloud、OCIそれぞれの構成は次のようになります。複数リージョンを利用する場合は、AWS、Azure、OCIについてはリージョン単位でVPCやVNET、VCNを追加します。Google Cloudについては、VPC内にリージョンを追加します。リージョン内でサブネットを追加する点はどのクラウドサービスでも共通となります。