Google Cloud のマイクロサービス アーキテクチャ

Google Cloud Japan Team
※この投稿は米国時間 2021 年 11 月 19 日に、Google Cloud blog に投稿されたものの抄訳です。
コンテナ化、コンテナ オーケストレーション、クラウドネイティブなサーバーレス サービスなどの技術の進化により、スケーラビリティや信頼性に優れたマイクロサービス アーキテクチャを基に分散ソリューションを開発できるようになりました。
マイクロサービス アーキテクチャとは
マイクロサービス アーキテクチャ(多くの場合、マイクロサービスと略される)は、アプリケーション開発におけるアーキテクチャ スタイルの一つです。マイクロサービスによって、大きなアプリケーションをそれぞれが独自の責任範囲を持つ独立した小さなサービスに分割できます。単一のユーザー リクエストを処理するために、マイクロサービス ベースのアプリケーションは多数の個別のマイクロサービスを呼び出して、レスポンスを作成できます。
コンテナは、依存関係に気を取られることなくサービスの開発に集中できるため、マイクロサービスに非常に適しています。最新のクラウドネイティブ アプリケーションは、通常、コンテナを使用してマイクロサービスとして構築されます。
Google Cloud を使用すると、マネージド コンテナ サービスである Google Kubernetes Engine(GKE)、またはフルマネージド型のサーバーレス サービスである Cloud Run を使用して簡単にマイクロサービスをデプロイできます。ユースケースに応じて、Cloud SQL とその他の Google Cloud プロダクトやサービスを統合し、マイクロサービス アーキテクチャをサポートすることもできます。
モノリシック アーキテクチャとマイクロサービス アーキテクチャの違い
モノリシック アーキテクチャでは、ソリューションは 1 つの大きなシステムとして構築され、多くの場合、単一のコードベースが使用されます。モノリスの技術や言語、フレームワークを変更するのは極めて困難です。というのも、すべてのコンポーネントが密結合し、相互に依存しているからです。そのため、比較的小さな変更でも、開発やデプロイに長い時間がかかります。
マイクロサービス アーキテクチャでは、ソリューションはビジネス機能に基づいた一連の独立したモジュールとして構築されます。それぞれのモジュール、つまりサービスが小さい(「マイクロ」である)ため、全体的なビルドや開発の時間が短縮され、CI / CD パイプラインの作成が容易になります。機能単位が小さいため、簡単に技術やフレームワークを変更したり、サービスごとに異なる言語を使用したりできます。通常、障害は特定のサービスに限定されているため、障害の切り分けが容易に行えます。また、サービスを独立してスケーリングできるので、アプリケーション全体をスケールアウトすることなく、より多くのリソースが必要なサブシステムをスケールアウトできます。
マイクロサービスのユースケース
モノリシックなウェブ アプリケーションを移行するか、またはマイクロサービス アーキテクチャを使用して新しいアプリケーションを開発するシナリオについて考えてみましょう。マイクロサービス アーキテクチャは、Pub/Sub モデルを使用したイベント ドリブンであることが多く、あるサービスがイベントをパブリッシュし、他のサービスがそのイベントをサブスクライブして、そのイベントに対するアクションを実行します。
このシナリオの例では、注文、梱包、配送、通知の 4 つのサービスがあります。
ユーザーがウェブサイトで注文を行うと、注文サービスが注文を受け取って予備処理をいくつか行い、イベントを Google Pub/Sub に送信します。
注文サービスのイベントをサブスクライブしている梱包サービスと通知サービスは、それぞれ注文の梱包処理を開始し、お客様にメール通知を送信します。
梱包サービスは、注文梱包イベントを Pub/Sub に送信します。これらのイベントをサブスクライブしている配達サービスは、配送処理を行い、イベントを Pub/Sub に送信します。通知サービスはこのイベントを使用して、注文の配送情報を含む別のメッセージをお客様に送信します。


もちろん、このようなウェブサイトをデプロイする方法は複数ありますが、最適な選択肢は、チーム固有の要件や優先度によって異なります。この例で注目すべきは、通知サービスが Cloud Functions を使用して通知を送信するためのロジックを実行し、Firestore データベースを使用してユーザーのメールアドレスを検索している点です。配送と注文サービスは Cloud Run に、そして梱包サービスは GKE にデプロイされています。また、これらすべてのサービスは Cloud SQL データベースに接続されています。
マイクロサービスのユースケースとしては、他にも次のようなものが挙げられます。
メディア コンテンツ: マイクロサービス アーキテクチャを使用すると、画像アセットと動画アセットをスケーラブルなオブジェクト ストレージ システムに保存し、ウェブやモバイルアプリに直接配信できます。
トランザクションと請求書: 支払い処理と注文は個別のサービスとして分離できるため、請求書発行のサービスが中断した場合でも支払いの受け入れが継続されます。
データ処理: マイクロサービス プラットフォームは、既存のモジュール化されたデータ処理のクラウド サポートを拡張できます。
Google Cloud へのコンテナの移行についてさらに詳しくは、こちらのガイドをご覧ください。
#GCPSketchnote をさらにご覧になるには、GitHub リポジトリをフォローしてください。同様のクラウド コンテンツについては、Twitter で @pvergadia をフォローしてください。thecloudgirl.dev もぜひご覧ください。
- Google デベロッパー アドボケイトPriyanka Vergadia