マイクロサービス

マイクロサービスという用語は、人によってとらえる意味が変わります。システム アーキテクチャについて語った場合に、マイクロサービスをホワイトボード上に描かれる「箱」と捉える人もいます。一方で、より公式的な定義、つまり、システム内の他のマイクロサービスとは無関係に開発、デプロイ、運用できる外向きの API により確定される機能を持つ、ネットワーク アドレスが割り振り可能なエンドポイントと解釈する人もいます。App Engine サービスまたは Anthos Service Mesh サービスなどの開発プラットフォームによりもたらされるマイクロサービスのコンセプトに沿った理解をする人もまだいます。

Google では、マイクロサービスに関する定義を強制することはありません。Google は、お客様とお客様のアーキテクチャをサポートするサービス指向のモニタリング ツールを提供することにより、お客様がデジタル トランスフォーメーションでシステムのモニタリングを大規模に行えるよう支援したいと考えています。コードを 1 行も変更せずに、お客様がシステムをモニタリングするためのベスト プラクティスを採用できるよう Google がサポートします。

これを実現するため、Cloud Monitoring は、可能なタイミングでマイクロサービスを自動的に検出し、Google Kubernetes Engine ベースのマイクロサービスを定義するためのガイド付き機能を備え、最大限の柔軟性を確保するための完全カスタム ソリューションを提供します。

自動検出されたマイクロサービス

最新の開発フレームワークの中には、マイクロサービスに関する極めて独自性の強いコンセプトを掲げるものもあります。このようなフレームワークを利用するアーキテクチャでは、サービスがいつデプロイ、更新、または検出されるかを Cloud Monitoring が自動的に検出します。Cloud Monitoring は、あるプロジェクトによって生成されたメタデータ ストリームの定数分析を通じてこれを実現します。

Cloud Monitoring は、以下の開発フレームワークを適用して構築されたマイクロサービスを自動的に検出できます。

  • App Engine: App Engine には、App Engine サービス(旧称「モジュール」)と呼ばれるマイクロサービスの色濃い概念が反映されています。各サービスは、独自の app.yaml 構成ファイルによって区別されます。

  • Anthos Service Mesh: Cloud Monitoring は、単一の GKE クラスタ上に構築されたサービス メッシュをサポートしています。この構成では、Anthos Service Mesh サービスは GKE サービスに直接対応します。ユーザー管理型とシステム管理型の両方の Anthos Service Mesh サービスが自動的に検出されます。

  • Google Kubernetes Engine でのオープンソース Istio: GKE は、GKE の「アドオン」機能を使用してオープンソース(OSS)Istio をサポートします。GKE アドオンを使用すると、Istio コンポーネントのマネージド インストールとマネージド アップグレードを利用できます。Anthos Service Mesh と同様に、OSS Istio サービスは GKE サービスに直接対応します。

自動検出されたマイクロサービスのダッシュボード

自動検出されたすべてのマイクロサービスに対して、サービス ダッシュボードが自動的に作成されます。サービス ダッシュボードには、サービスのメタデータの詳細、アラートのタイムライン、SLO のステータス、サービスに関連するログが表示されます。これらの各コンポーネントの詳細については、マイクロサービス ダッシュボードの使用をご覧ください。

自動検出されたマイクロサービスのサービス ダッシュボード。

GKE ベースのマイクロサービス

GKE と、GKE の基盤となる Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を行う柔軟性に優れたコンテナ オーケストレーション システムです。Kubernetes の多くの上級ユーザーを調査してみると、コミュニティで合意されているマイクロサービスの概念は 1 つではありません。Kubernetes の名前空間を基盤としてマイクロサービスを作成しているユーザーもいれば、レプリカセットなどのワークロードを使用してマイクロサービスに対応しているユーザーもいます。

ユーザーは Kubernetes のさまざまな使用形態を考案しており、マイクロサービスが必ずしも Kubernetes Service に対応するとは限りません。

ユーザーはさまざまな方法で Kubernetes 上のアプリケーションを管理しているため、Cloud Monitoring で GKE ベースのマイクロサービスを自動的に検出することはできません。このため、ユーザーがマイクロサービスを識別できるように、Google ではガイド付きの方法を提供しています。開始するには、[サービスを定義] というラベルのリンクをクリックします。

GKE サービスは [サービスの概要] ダッシュボードで定義できます。

スライドトレイには、名前空間から Pod に至るまで、クラスタ内のすべての GKE エンティティが一覧表示されます。また、類似した名前のエンティティを区別するメタデータ ラベルも表示されます。フィルタバーを使用すると、マイクロサービスに対応するエンティティを見つけることができます。エンティティを選択して名前を指定するか、デフォルトの名前を使用します。

GKE サービスを定義するには、リストからエンティティを選択します。

これで、サービス指向のモニタリング機能で使用できる GKE ベースのマイクロサービスを特定できました。新しく作成したサービスの詳細が Console に表示されていれば、オペレーションが成功しています。また、Console には、サービス指向モニタリングのベスト プラクティスの詳細、最初の SLO の作成、サービス ダッシュボードの表示など、想定される次のステップへのリンクも表示されます。

サービスを作成したら、SLO を構成し、サービスのダッシュボードを表示できます。

GKE ベースのマイクロサービスのダッシュボード

定義済みの GKE ベース マイクロサービスごとに、サービス ダッシュボードが自動的に作成されます。自動検出サービスのダッシュボードと同様に、これらのダッシュボードにはメタデータの詳細、アラート タイムライン、SLO の概要、関連ログが表示されます。また、ダッシュボードには、さまざまな指標群を表示するために選択可能なサービスの指標群が表示されます。ダッシュボードの下部には、サービスを構成する Pod のリンクを含む概要が表示されます。これらの各コンポーネントの詳細については、マイクロサービス ダッシュボードの使用をご覧ください。

新しく作成された GKE サービス用にサービス ダッシュボードが作成されます。

GKE ベースのサービス(API)の定義

Cloud Monitoring API の一部である SLO API を使用して、GKE ベースのマイクロサービスを定義することもできます。これらのサービスは API で、GKE エンティティを識別する Telemetry.resourceName 値とともに Custom サービスタイプとして表します。

プログラムでサービスを作成するには、次のような構成を services.create メソッドに送信します。

{
  "displayName": "hello-world-microservice",
  "custom": {},
  "telemetry": {
    "resourceName":
"//container.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/clusters/cluster-2/k8s/namespaces/default/services/hello-server"
  }
}

より一般的にいうと、resourceName フィールドの形式は "//container.googleapis.com/projects/PROJECT_ID/zones/ZONE/clusters/CLUSTER_NAME/k8s/namespaces/NAMESPACE_NAME/ENTITY_TYPE/ENTITY_NAME" です。

プログラムでサービスを管理する方法については、API の使用をご覧ください。

カスタム マイクロサービス(API)の作成

SLO API では、ある SLO 群の親になる REST コンテナを作成する場合にも Custom サービスタイプを使用できます。これは、現在サポートされていないサービスタイプに対して SLO を定義するとき、またはマイクロサービスに本質的に対応しないビジネス指標に SLO を定義するときに便利です。

プログラムでサービスを作成するには、次のような構成を services.create メソッドに送信します。

{
  "displayName": "hello-world-service",
  "custom": {}
}

プログラムでサービスを管理する方法については、API の使用をご覧ください。