Google Cloud セールスエンジニア 佐藤聖規氏

Googleはこのほどマイクロサービスに関する説明会を開催した。説明を行ったのは、Google Cloud セールスエンジニアの佐藤聖規氏だ。そもそも、マイクロサービスとは、小さなサービスを組み合わせて1つのアプリケーションを開発するアプローチである。

ここ数年、マイクロサービスが注目を集めている理由は、次のようなメリットにある。

  • 機能ごとに異なる最適な技術を採用可能
  • 開発の同時並行が可能
  • 機能単位でコンポーネント化されているため、再利用と置換が容易
  • チームも機能ごとに少人数で構成可能

佐藤氏は、マイクロサービスと単一のアプリケーションで構築する従来型の開発スタイル「モノリス」の違いについて、「モノリスに比べ、マイクロサービスは開発単位が小さい。また、マイクロサービスはコンポーネントの再利用や置換が可能だが、モノリスではシステムを入れ替える必要がある」と述べた。ただし、モノリスが適切なシステムもあり、チームやビジネスの状況に応じて、サービスを適切なサイズに分割することが重要だと、注意点にも言及した。

続いて、マイクロサービスを構成する3つの技術の紹介が行われた。佐藤氏は、「マイクロサービスはコンテナで作るものと思われているが、必ずしもコンテナが必要なわけではない」と語った。

マイクロサービスを支える3つの技術とは「コンテナ」「コンテナ・オーケストレーション」「ロードバランサー」だ。

コンテナ

コンテナとは、アプリケーションコードと必要なライブラリや設定などを1つにまとめたもの。アプリケーションとインフラが緩やかに結びついた状態であるため、柔軟な開発を実現すると言われている。開発環境、テスト環境、本番環境、オンプレミス、プライベートクラウド、パブリッククラウドなど、異なる実行環境間の移動も容易にする。

佐藤氏は、コンテナと比較される技術として仮想マシンを挙げ、構造の違いを示した。仮想マシンはアプリ、ライブラリ、ゲストOSから構成され、インフラ、ホストオペレーションシステム、ハイパーバイザーの上に構築される。一方、コンテナはアプリとライブラリで構成され、インフラ、ホストオペレーションシステム、コンテナランタイムの上に構築される。

仮想マシンはそれぞれOSが必要となるのに対し、コンテナは単一のOS上に構築されているため、構成がシンプルであり、起動が速く、プロセッサやメモリの消費も少ない。

  • 仮想マシンとコンテナの違い

そのほか、コンテナには「デプロイメントが容易」「コンピュートリソースを細分化して効率的に利用可能」といったメリットがある。Googleは自社サービスにコンテナを採用しており、15年以上にわたる運用実績がある。

コンテナ・オーケストレーション

Googleは、コンテナ化したアプリケーションのデプロイ・管理するためのプラットフォームとして「kubernetes」を開発、オープンソースとして公開した。kubernetesの語源はギリシャ語で、「パイロット」「操舵手」という意味を持つ。

現在は、Linux Foundationの傘下にあるCNCF(Cloud Native Computing Foundation)が管理しているが、2018年3月には、オープンソース・プロジェクトとして成熟していることが認められ、インキュベーションステージを卒業した。

kubernetesは、複数のLinux上に構築されたクラスタ上で動作する。クラスタはマスターとノードから構成され、コンテナはノード上にデプロイされる。佐藤氏は、「コンテナを使った開発や運用の課題を解決するのがkubernetes」と語った。例えば、コンテナを用いた開発・運用には、「複数のノードに対するコンテナのデプロイをどうするか」「ノードやコンテナに障害が発生した場合にどう対処するか」「アプリケーションのアップグレードをどう管理するか」といった課題がある。

  • kubernetesの構成

kubernetesはオンプレミスでもクラウドサービスでも実行可能だが、Google Cloud Platform(GCP)で動作するkubernetesのマネージドサービス「Google kubernetes Engine」も提供されている。

同サービスでは、コンテナに必要なコンピューティング、メモリ、ストレージのリソースを記述すれば、クラウドリソースがKubernetes Engineによって自動的にプロビジョニングされ、管理される。

佐藤氏は同サービスの特徴として、「シンプル」「信頼性が高い」「効率性に優れている」「GCPの各サービスと統合できる」を挙げた。

ロードバランサー

マイクロサービスが増えると、それらを管理し、ユーザーからのリクエストを適切なマイクロサービスに振り分けていくために、アプリケーションのフロントエンドにロードバランサーが必要になる。

GoogleはGoogle Cloud Platform上にロードバランサー「Google Cloud Load Balancing」を提供している。佐藤氏は、Google Cloud Platformを支えるネットワークとして、同社が光ファイバーに投資していることに言及した。米Googleは今年4月、日本・グアム・オーストラリアを接続する新たな海底ケーブルを敷設することを発表している。このケーブルは、日本とグアム間、グアムとシドニー間を2本のファイバーペアで接続する。

  • 「Google Cloud Load Balancing」を支えるGoogleのインフラ

Google Cloud Load Balancingでは、マルチリージョンのインスタンスがフロントエンドアドレスとして、1つのIPv4 VIPアドレスを持ち、グローバルで負荷分散が行われる。また、レイテンシーが低いのもGoogle Cloud Load Balancingの特徴の1つだ。ユーザーの接続を近い場所に終端し、キャッシュ可能なコンテンツをエッジから提供などを行うエッジとバックボーンのシステムが、低レイテンシーを実現しているという。

  • 低レイテンシーを実現するGoogle Cloud Load Balancingの仕組み