ウェブサイト ホスティングパターン

ほとんどのワークロードで可用性を考慮した設計は重要ですが、求められる要件はワークロードによって異なるため、ワークロードのアーキテクチャを考える上で、そのワークロードがどのレベルの可用性を実現する必要があるかを考えることが重要となります。Google Cloud では可用性を高めるためのソリューションをいくつか提供しており、これらを適切に採用し、各ワークロードに適した構成を選択すること可能です。

求められる要件の例としては可用性、性能 / 拡張性、コスト パフォーマンス、アジリティなどが代表例ですが、これらのうち、何を重視するかによって、コンピュート、ストレージ、ネットワークといった各構成要素の適切なアーキテクチャを検討する必要があります。Google Cloud ではこれら要件を満たすためのソリューションをいくつか提供しています。これらを適切に採用し、各ワークロードに適した要件を実現することが重要となります。

コンピュートについては、Compute Engine、App Engine、Google Kubernetes Engine、Cloud Funtions、Firebase Hosting など多様な選択肢があり、非機能要件や、現行システムからの移行を考慮する場合は、移行難易度等も考慮して適切なオプションを選択する必要があります。

また、ストレージについても、保存するデータ形式やストレージ アクセスに求められるパフォーマンス等に応じて適切なオプションの選択が必要となります。

その他、データベース、ネットワークなどの要素についても同様に、ワークロード特性や求められる要件に応じて組み合わせは複数存在するため、ここではその全てを述べることは難しいですが、下記ドキュメントにて、それらサービス群の概要を整理しています。

Dynamic site hosting パターン

解決する課題・使い所

ワークロード特性や、求められる要件によって、Dynamic site hosting のアーキテクチャは異なりますが、ここでは、可用性、性能 / 拡張性、またオンプレミスなど現行環境からの移行難易度の低さを重視したアーキテクチャ( IaaS を利用するアーキテクチャ)について解説します。これら要件を満たすため、考慮する必要があるのは以下のポイントです

可用性

性能 / 拡張性

アーキテクチャ

インターネット経由での 3 層 ウェブアプリを想定して、アーキテクチャを図示します。ここではアプリケーション サーバ + リレーショナル データベース を想定します。
※ 本アーキテクチャはゾーン障害に対して、インスタンス グループの複数ゾーンデプロイ、 Cloud SQL による HA 構成等、 Google Cloud ネイティブな構成で対処する方法を示しています。可用性に関しては、より詳細な要件がある場合、 Compute Engine 上に DBMS をインストールし、 サードパーティー ソリューション等でクラスタリング構成といったオプションもあります。詳細は「マルチゾーン ウォーム スタンバイ 」パターンにて記載します。

利点

本アーキテクチャを採用することで、既存システム構成を極力変更せず、同一リージョン内で、可用性を高め、かつスケーラビリティの高いアーキテクチャを実現できます。可用性については、複数ゾーンに跨がるインスタンス グループへの負荷分散を Cloud Load Balancing で行うこと、また Cloud SQL の提供する HA 構成で実現し、性能 / 拡張性については、インスタンス グループのオートスケール機能および、 Cloud SQL のもつリードレプリカ機能、ストレージの自動増量機能で対処します


注意事項

MIG を利用したオートスケール構成を実現する場合、最小 / 最大インスタンス数は需要予測や性能試験を基に決めるようにしましょう。MIG を利用することで柔軟性の高いアーキテクチャを実現できますが、スケーラビリティ性能に限界もあるため、十分な検証が必要です。また、「 マルチゾーン ウォーム スタンバイ 」パターンでも述べていますが、Cloud SQL を使うときには、メンテナンス ウィンドウを設定し、メンテナンスの時間を事前に設定します。また、バックアップなども業務要件に応じて設定すると良いです


Sample config や Code


このパターンで作成された事例


関係するデザインパターン


参照ドキュメント

キャッシュを活用したウェブホスティング

解決する課題・使い所

ウェブ アプリケーションはウェブサーバ(多くの場合アプリケーション サーバを兼ねるため、本章では「ウェブサーバ」と総称)を中心として、様々なサーバと連携して動作します。また、時として多大な負荷の原因となる大量のアクセスの矢面に立つ必要があります。しかしながら、従来のインフラではこういった大量のアクセスに対応しきれずにサイトがダウンしてしまったり、スループットが著しく低下するといった課題があります

これに対してキャッシュを有効に活用することで、ウェブサーバが処理すべきトラフィックを最小化することや、連携するデータベースサーバ等のバックエンド(本章では、これらを便宜上「バックエンド」と総称)がボトルネックとならないよう、バックエンドへのリクエストを緩和することが可能となります。

ここでは、用途に応じてキャッシュを活用したアーキテクチャの例を解説します。

アーキテクチャ

キャッシュの導入が有効なポイントは大きくわけて以下の 2 箇所が考えられます


利点


Sample config や Code(提供可能な場合)


注意事項


このパターンで作成された事例


参照ドキュメント