クラウドネイティブ アプリケーション  

多くの企業は、オンプレミス環境においてモノリシック アーキテクチャを使用してカスタム ソフトウェア サービスを構築しています。新しい変化に適用するために、機能追加や変更を加えていくと、アプリケーションがより複雑になってしまい、費用と時間がかかる上に、展開にはリスクも伴ってきます。

こうした課題を解決するには、コンテナベースのアプリケーション サービスとクラウド ネイティブのデータベースを合わせて利用することが有効です。アプリケーションに高い俊敏性、スケーラビリティ及び可用性など様々なメリットがあり、次の環境変化への適応性を高めることができます。

Google Cloud が提供するいくつかのマネージド サービスは、コンテナベース アプリケーションとスケール可能なデータベースの両方が含まれています。ここでは、クラウド ネイティブの組み合わせと全体構成についての詳細とユースケース、システム要件に合わせた最適なデザイン パターンと、本番におけるベスト プラクティスを紹介します。

デザイン パターン詳細

Cloud Run + Cloud Firestore

解決する課題・使い所

クラウドネイティブ アプリケーションの開発と運用に求められる要因にはアジリティと運用効率性があります。変化が早い市場に対してより早くアプリケーションを開発し稼働させること、また継続的にアプリケーションの改善に注力できるように運用効率を上げていくことが重要視されています。 

使い所


アーキテクチャ

基本的な構成は、インターネット上に公開されている Cloud Run の Service から Cloud Firestore へ接続する形式になります。接続にはクライアント ライブラリや Firebase Admin SDKs を用いて接続する方法と、HTTP (REST) または gRPC により直接 Cloud Firestore API を呼び出す方法があります。提供しているクライアント ライブラリは、C#、Go、Java、Node.js、PHP、Python、Ruby の各種言語に対応しています。クライアント ライブラリや SDKs を利用する場合は、トランザクションが失敗する場合のリトライやオフラインの対応などを自動的に実施してくれます

不特定多数からのアクセスを抑止し限定的に公開する場合は、サービスを作成する際に「認証を必要とする」を選択します。これによりサービスが非公開となります。アクセスを許可するユーザーを追加し、Cloud Run Invoker (roles/run.invoker) ロールを付与します。また Google Cloud 外部から呼び出す際に Authorization Bearer ヘッダに有効な ID トークンを付与してアクセスを行います

同様にして Cloud Pub/Sub などの Google Cloud 上のサービスから Cloud Run を呼び出す構成を行う事ができます。

リージョナル サービスで提供されている Cloud Run と Cloud Firestore をマルチリージョンで構成し可用性を向上させる場合には Serverless NEG と HTTP(S) ロードバランサを組み合わせて使用します。また、Serverless NEG を組み合わせた構成では、Cloud Armor を利用してウェブアプリケーションの保護をする事が可能になります。

Cloud Run のフロントエンドに構成する HTTP(S) Load Balancing は、Serverless NEG の構成後に バックエンドサービス、URL マップ、HTTP プロキシ、フォワーディング ルールを作成して構成を行います

利点

フロントエンドのアプリケーションプラットフォームに Cloud Run を用い、バックエンドのデータストアに Cloud Firestore を用いる構成をとる事でアプリケーション開発および運用の観点に容易にアジリティや効率性を享受することが可能となります


Cloud Run 利点


Cloud Firestore 利点

アプリケーション向けのスケーラビリティが高い NoSQL データベースです。シャーディングとレプリケーションを自動的に処理し、アプリケーションの負荷に合わせて自動的にスケールする、可用性と耐久性を兼ね備えたデータベースを提供します。 Cloud Firestore は Native モードと Datastore モードの 2 つのモードを提供します。両方とも同じ基盤となるルーティング インフラストラクチャを使用します。ゆえに、プロジェクトごとにどちらか一方しか利用することができません。 新しいモバイルアプリに Cloud Firestore のリアルタイム機能を利用したい場合、もしくは Firebase 側の機能も一緒に利用したい場合は Native モードが最適なオプションです。すでに Datastore SDK を使い慣れている場合、Datastore モードを検討します。Cloud Firestore の主な利点は下記になります。


Cloud Run についての注意事項


Cloud Firestore についての注意事項


サンプル コンフィグ


参照ドキュメント

Cloud Run + Cloud Spanner

解決する課題・使い所

あらかじめ予測を立てたトラフィック設計をすることが困難な非機能要件を持ち、高速なスケーラビリティが求められるアプリケーション課題に対するアプローチです。このようなアプリケーションには、次のような課題が考えられます

アプリケーションを動作させる際の Google Cloud 製品の主な選択肢としては、Google App Engine、Cloud Run、Compute Engine、および Google Kubernetes Engine(GKE)が考えられます。それらの選択肢の中でも、環境の構築や運用の複雑さを意識する必要がないフルマネージドのサーバーレス プラットフォームで、スケーラブルにコンテナ アプリケーションをデプロイし、稼働させるのが Cloud Run です。

データベースは、ほとんどすべてのアプリケーションの主要なアーキテクチャ コンポーネントです。信頼性の高いデータベースを使用することで、アプリケーションのスケーラビリティを向上させ、データの耐久性と一貫性、サービスの可用性、およびシステムのサポートがより負荷なく行えます。Cloud Spanner は、複雑かつ変化し続けるスキーマを持つアプリケーション、高い整合性が求められるアプリケーションに適したデータ ストレージ サービスです。きわめて大容量のデータを処理できるため、大規模なアプリケーションに最適ですが、中小さまざまな規模のアプリケーションでもその威力を発揮します。


アーキテクチャ

Cloud Run と Cloud Spanner のソリューション デザイン パターンの詳細については、以下の図をご参照ください。 

Cloud Run 利点


Cloud Spanner の利点


Cloud Run についての注意事
Cloud Run は、コンテナ アプリケーションをデプロイし、稼働させるサーバーレス PaaS です。そのため、コンテナ アプリケーションとしての制約がありますので以下をご参照ください


Cloud Run についての注意事
Cloud Spanner を効率よく、最大化するには​​ガイダンスとベスト プラクティスに従い、Cloud Spanner のベスト プラクティスについては以下をご参照ください


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


参照ドキュメント

Google Kubernetes Engine + Firestore

解決する課題・使い所

高度なスケーラビリティと構成の柔軟性を提供するコンテナ オーケストレーション プラットフォームを求めているお客様にとって、Google Kubernetes Engine(GKE)は優れた選択肢になります。GKE は、コンテナベースのオーケストレーション システムである Kubernetes  のクラスタを構成し、管理するマネージド サービスです。主なユースケースは、以下のとおりです。



Cloud Run では処理しきれないリソースを必要とする演算処理があるアプリケーションやマイクロサービス アーキテクチャを検討する場合は GKE を検討してください。

次に、リレーショナルな構造が必要とされず、運用負荷をできるだけ軽減したデータベースを検討される場合、Cloud Firestore が優れた選択肢となります。リレーショナル データベースかつ大規模な書き込みを含めたトラフィックの急増にも対応することを検討するときの構成は、以下を参照してください。


アーキテクチャ

GKE と Cloud Firestore のソリューション デザイン パターンのアーキテクチャについては、以下を参照してください。

GKE から Firestore に接続する場合、Cloud Run と同様にサーバー クライアント ライブラリを利用して接続する形式になります。クライアント ライブラリに関しては、Cloud Run と同様に以下を参照してください。


Google Kubernetes Engine 利点

前述のとおり、GKE は Kubernetes のクラスタを構成し、管理するマネージメント システムです。Google Cloud 上で動作し、自動スケールや自動修復、自動アップグレード、自動プロビジョニングなどの機能により、Kubernetes を比較的容易に導入、運用することができます。GKE の主な利点は、以下のとおりです。



GKE には、ノードの構成と管理をユーザー側で行う Standard モードとノードも Google 側で管理する Autopilot モードの 2 つのモードが利用できます。現在は Autopilot モードが推奨されており、デフォルトとなっていますが、課金体系なども異なるので、両者の詳細な違いは、以下を参照してください。

GKE のオペレーション モードを選択する


Google Kubernetes Engineについての注意事項



Cloud Firestore 利点

Cloud Firestore は、高いスケーラビリティが求められるアプリケーション向けの NoSQL データベースです。シャーディングとレプリケーションを自動的に処理し、アプリケーションの負荷に合わせて自動的にスケールする、可用性と耐久性を兼ね備えたデータベースを提供します。Cloud Firestore は、Native モードと Datastore モードの 2 つのモードを提供します。両方とも同じ基盤となるルーティング インフラストラクチャを使用するので、プロジェクトごとにどちらか一方しか利用することができません。 新しいモバイルアプリに Cloud Firestore のリアルタイム機能を利用したいとき、もしくは Firebase 側の機能も一緒に利用したいときは Native モードが最適なオプションです。従来、Native モードでは秒間あたりの書き込み制限とクライアントの最大同時接続数の制限がありましたが、2022 年 10 月のアップデートで制限が撤廃されたので、より多くのユースケースで Native モードを活用できるようになりました。すでに Datastore SDK を使い慣れている場合、Datastore モードを検討します。 Cloud Firestore の主な利点は、以下のとおりです。




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


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


参照文献