コンテンツに移動
デベロッパー

GKE を使って GraphQL を拡張する Apollo

2022年3月13日
https://storage.googleapis.com/gweb-cloudblog-publish/images/ScaleGraphTumb.max-500x500.jpeg
Google Cloud Japan Team

※この投稿は米国時間 2022 年 3 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。

どのような企業にも、出発点となるツール、成長の手段や踏み台となるツール、途中で採用するツールがあります。GraphQL は数多くの企業で採用されているオープンソースのクエリ言語で、企業やそのユーザーがクエリを今の時代に合った形で行えるようにするためのものです。この動画では、Apollo が、GraphQL によるソリューションの提供を通じてビジネスニーズに対応しながら、どのようにして成長と変革を遂げてきたかが語られています。

この動画と記事では、Apollo による Google Cloud を基盤とした革新的な GraphQL ソリューションの提供を紹介します。

GraphQL とは

GraphQL はオープンソースの API クエリ言語で、デベロッパーがグラフ インターフェースを通じてデータにアクセスできるようにするためのものです。クライアントサイドでは、ユーザーが GraphQL を通じて API にリクエストを送ります。サーバーサイド では、GraphQL のランタイム環境で、データに対して定義された型システムを用いてクエリが実行されます。

GraphQL には、あらゆるデータが 1 つの論理グラフを通じて利用できるようになるために、冗長性が低減し、使いやすい API で誰もがデータを使えるようになるというメリットがあります。

Apollo が GraphQL で実現していること

Apollo では、オープンソース クライアントやサーバーを含む GraphQL の実装を、企業が大規模に GraphQL を採用・利用できるようにするためのツールやサービスとともに提供しています。

GraphQL を採用する多くの企業は、少しずつ試してみることから始めています。利用の拡大に合わせて、Apollo は、さまざまな場面全体でGraphQL を拡張しながら管理できるツールを提供します。たとえば Apollo Federation を使うと、別々のチームがそれぞれのニーズに応じて GraphQL の実装を行い、その後それを一つにまとめて、チームをまたいですべてデータを使った一元化されたグラフにすることができます。

Apollo が提供する Software as a Service(SaaS)アプリケーションでは、GraphQL のスキーマが時間とともに変化する様子をモニタリングし、誰がどのようにデータ グラフにアクセスしているのかを把握することが可能で、大規模なGraphQLに必要な一般的なツールが提供されます。

Google Cloud 上での構築

Apollo ではアーキテクチャの実装を目的として、次のような Google Cloud のコンポーネントが数多く使われています。

  • Pub/Sub

  • Google Kubernetes Engine

  • Cloud Functions

  • Cloud Spanner

  • BigQuery

  • CloudSQL

  • Cloud Storage

  • Bigtable

  • …その他多数

Apollo のアーキテクチャで特に興味深いのは、そのアーキテクチャのうち Google Cloud をベースにしたもののほとんどが、単一クラスタ内のものであるという点です。チームが複数であれ、プロダクトが複数であれ、すべてが一つの Google Kubernetes Engine(GKE)クラスタ内で管理されます。

この単一クラスタ アーキテクチャは、まさに Apollo がこれまで成長を続けてきた成果です。Apollo のチームは早い時点から、単一クラスタで十分にあらゆるニーズに応えることができると考えてました。チームは、十分な柔軟性を備えたプラットフォームである GKE を活用して、この強力な基盤にすべて同じクラスタ内の機能を追加し続けました。  この単一クラスタによるアプローチには特有の利点があり、Apollo はこれをうまく活用してきました。このアプローチによって、アーキテクチャのさまざまな部分にわたるロギングとモニタリングが単純になり、カスタムのツール化と自動化を一貫した形で行うことが可能になります。その結果、Apollo のアプリケーションには一元化されたプラットフォームが提供されるようになります。

単一クラスタによる手法を機能させるために特に留意すべきこととして、そのクラスタ内で別々の本番環境やステージング環境を作るといったように、名前空間を使ってコンポーネントを分離することが挙げられます。GKE には、GKE クラスタ内にある同じインスタンス タイプのワーカーノードをグループ化するノードプールの概念が使われています。こうしたノードプールと Kubernetes の taint や 容認機能を使って、Apollo は GKE クラスタをカスタマイズし、ワークロードが適切なハードウェアに割り当てられ、そこで実行される数多くのワークロードで生じるニーズが満たされるようにしています。

未来を見据えて

Apollo のビジネスは急速に拡大し、チームは使用しているツールと、ツールに関してこれまでに学んできたことについて慎重に考える必要があると考えました。

たとえばエンジニアリング マネージャー Adam Zionts 氏はインタビューで、自分たちの Kafka がそのニーズに応える最良のソリューションであった時のこと、そして現在はワークロードを軽減してコア ビジネスに注力できるようにするための新たなソリューションに注目していることについて語っています。

これまでのところ、アーキテクチャに対する Apollo の 単一GKE クラスタ アプローチは有効であることが明らかになっています。これは GKE が持つノードプールの柔軟性と Kubernetes が持つ名前空間、taints、容認機能によるものです。

Apollo のビジネスが拡大する中、同社はエンジニアリング チームが、アーキテクチャが引き続き機能するようにする体制を整えています。

アーキテクチャに関する今回の記事はいかがでしたか?YouTube のプレイリスト Architecting with Google Cloud もぜひご覧ください。

 - デベロッパー アドボケイト Kaslin Fields

投稿先