Actions / Navigation / close / 20
マイIBM ログイン ニュースレター

GraphQL Federationとは

2024年2月7日

共同執筆者

Chrystal R. China

Writer, automation & ITOps

Michael Goodwin

Editorial lead, Automation & ITOps

GraphQL Federationとは

GraphQL Federationは、開発者が単一のAPIを複数のGraphQLサービス(オープンソースのクエリ言語であるGraphQLで記述されたサービス)で使用できるようにする分散アーキテクチャー・アプローチです。

Federationは、スキーマ(バックエンドとフロントエンド運用の間の契約)を、より管理しやすいコンポーネントとマイクロサービスに分割し、チームがスキーマの一部を独自に構築、展開、管理できるようにする一方で、クライアントが操作できる統一されたデータ・グラフを維持します。

Federate GraphQL環境では、GraphQLゲートウェイは、複数のスキーマ(サブグラフまたはサービスとも呼ばれます)を1つのグラフ(またはルーター)に統合します。各サブグラフはスキーマ全体の一部を定義し、独自のタイプとフィールドのビジネス・ロジックとデータ取得を処理します。その後、ゲートウェイはスタンドアロンのサブグラフをつなぎ合わせてスーパーグラフにし、クライアントが単一のGraphQLスキーマを操作しているかのように、サービス全体のデータ・ソースをクエリできるようにします。

 

ビジネス街をバックにスマホを持つ手

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

GraphQL Federationの進化

Federationは、複数のGraphQLスキーマを組み合わせる主な方法の1つは、異なるスキーマとリゾルバーを手動で組み合わせるスキーマ・スティッチングでした。開発者は、スキーマをどのようにマージするか、およびデータがどのようにスティッチングするかを定義する必要がありました。スキーマ・スティッチングは、GraphQLスキーマの統合ソリューションを提供しましたが、複雑でエラーが発生しやすいため、管理が困難でした。

これらの問題に対処し、スキーマ・スティッチング・プロセスを合理化するために、製品とアプリ・エンジニアリングのためのGraphQL実装であるApolloのエンジニアは、Apollo Federationを開発しました。Apollo Federationは、異なるサービスのタイプ間の接続を定義するために、「キー」、「外部」、「要件」、および「拡張」のキーワードを導入しました。新しい相互参照機能により、開発者はApollo Gatewayを使用して、過度に複雑なスティッチング・ロジックに依存せずに一貫性のあるデータ・グラフを構築できるようになりました。

しかし、Apollo GraphQL Federationは、単なる新しいツールとライブラリーのセットではありませんでした。また、アーキテクチャーと、サービスが通信して分散グラフを形成する方法を説明したシステムの仕様でもありました。これにより、他の実装とツールでもFederationの原則を採用できるようになり、Federation GraphQL APIを構築するための標準が確立されるようになりました。

GraphQL Federationは誕生以来、数多くの改良を重ねてきました。たとえば、Managed Federationは、手動介入やシステムのダウンタイムを必要とせずに、メトリクスの収集を容易にし、サブグラフの変更に応じた自動ゲートウェイ更新を有効にします。

また、サービス間のスキーマのマージとクエリの実行を簡素化するイノベーションである Federation 21の開発、スキーマ構成の制御を強化するためのモジュール性の向上、追跡とデバッグを容易にするエラーの可視性の向上も進歩しています。

AI Academy

ハイブリッドクラウドでAI対応を実現

IBMのエキスパートが主催するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資に優先順位を付けるために必要な知識を習得できます。

ApolloとOpen Federationの比較

Apollo Federationは、合理化されたAPIエコシステムを構築するための大きな進歩であり、フェデレーションITアーキテクチャーの導入を検討している企業の選択肢となっています。

それでも、ApolloベースのFederationの手法では、開発者は単一ベンダーの実装に縛られます。Apollo Federation環境では、ApolloまたはApollo準拠のバックエンド・テクノロジーであるApollo定義のディレクティブとタイプのみしか受け入れることができないからです。言い換えれば、Apollo Federationは、新しいテクノロジーが登場しても、システムの柔軟性を制限することがよくあります。

Apollo Federationの統合レイヤー機能を維持しながら柔軟性を最適化したい開発者は、Open Federationを好むかもしれません。Open Federationのアプローチにより、システムはGraphQL以外のAPIを含めて、あらゆるAPIベンダーやタイプのデータを組み合わせることができます。IBM API Connectなどのツールを使用することで、企業は互換性の制限なしにIT資産をカスタマイズおよび拡張でき、さまざまな技術コミュニティからのイノベーションを採用できます。

GraphQL Federationの仕組み

GraphQL は、リソースを過剰プロビジョニングまたはプロビジョニング不足になることなく、クライアントが必要なデータを正確に要求するのに役立つため、運用効率の最適化を目指す企業にとって最適なオプションとなります。

その柔軟性から、GraphQLがAPI用のクエリ言語およびランタイムとしてますます注目されていることも理解できます。2しかし、Webアプリやモバイル・アプリが洗練されるにつれて、単一のモノリシックなGraphQLサーバー(およびそのすべての依存関係)を展開することは困難になる可能性があります。Federationは、異種のサブグラフが1つの一貫したGraphQLサービスとして連携できるようにすることで、GraphQLエコシステムを簡素化します。

Federated GraphQLアーキテクチャの実装には、次の主要なプロセスが含まれます。

サブグラフ・スキーマの定義

サブグラフ・スキーマを定義するには、ドメイン境界を特定し、それらの境界がどのように相互作用するかを決定することが含まれます。

フェデレーション・アーキテクチャーでは、各サブグラフ・スキーマはデータ・グラフ全体の特定の部分を表します。これには、サービスまたはドメインに適用されるタイプ、構成、クエリ、ミューテーション、およびサブスクリプションが含まれます。たとえば、製品サービスには製品レビューなどのタイプを含むサブグラフ・スキーマがあり、ユーザー・サービスにはユーザープロファイル・タイプがある場合があります。

サブグラフ・スキーマは、標準のGraphQLスキーマとほぼ同じ方法で定義されますが、Federation固有のディレクティブが追加されています。Federationディレクティブは、システムがスキーマ間でエンティティーを拡張する方法と、ゲートウェイがサービス全体で特定のフィールドを解決する方法についての指示を提供します。また、エンティティーを参照するためのキーも定義します。

一例として、 @keyディレクティブは、フェデレーション・グラフ全体でタイプを識別するフィールドを指定します。このディレクティブは、ゲートウェイに、指定されたタイプを所有するサービスからエンティティーを取得するように求めます。@extendsディレクティブは、あるサブグラフ・スキーマで定義されたタイプが別のサブグラフスキーマに由来するタイプを拡張し、別のサービスでのタイプの拡張(追加フィールドを含む)を容易にすることを示します。

サブグラフ・サービスのセットアップ

サブグラフ・サービスは、対応するサブグラフAPIのビジネス・ロジックを実装するバックエンド・サービスです。各サブグラフ・サービスは、データ・グラフの一部を定義し、そのドメインに関連するクエリとミューテーションを処理します。それぞれのリゾルバーは、適切なデータソース、データベース、またはREST APIから関連データを取得します。

また、サブグラフ・サービスはそのGraphQLエンドポイントをフェデレーション・ゲートウェイに明らかにし、フェデレーション・ゲートウェイはそれを使用して、フェデレーション・スキーマ全体を構成します。これらのサービスは、言語がGraphQLをサポートしていることを前提に、任意のプログラミング言語で記述することができます。

フェデレーション・ゲートウェイの構成

フェデレーション・ゲートウェイは、スキーマ構成とクエリ計画を調整します。フェデレーション・サーバーの助けを借りて、ゲートウェイは個々のサブグラフ・サービスを偽装し、統合されたAPIをクライアントに提示します。

フェデレーション・ゲートウェイを構成するために、チームは通常、各サブグラフ・サービスの場所を指定し、スキーマの取得、クエリ計画、実行、エラー処理に必要なインフラストラクチャーをセットアップします。導入すると、ゲートウェイはサブグラフ・サービスからスキーマを継続的に取得し、フェデレーテッド・スキーマの最新バージョンが確保されるようにします。

フェデレーション・アーキテクチャのデプロイと監視

サブグラフ・サービスとフェデレーション・ゲートウェイが構成されると、管理者はシステム全体をデプロイします。これには、ハードウェアとクラウド・リソースのプロビジョニング、デプロイメント・パイプラインのセットアップ、システム・パフォーマンスの監視、高いリソース可用性の確保が含まれます。

Federated GraphQL環境を最適化するには、一貫したリアルタイム監視が不可欠であることは明らかです。慎重に監視することで、チームはパフォーマンスのボトルネック、システム・エラー、計画外のダウンタイムを、より大きな問題を引き起こす前に検知して解決することができます。監視により、サブグラフ・サービスとフェデレーション・ゲートウェイの正常性の追跡も可能になります。

GraphQL Federationのメリット

GraphQL Federationは、大規模な分散システム向けのGraphQL APIの開発における大きな進歩をもたらしました。これにより、チームはエンドユーザー・エクスペリエンスを中断することなく、その作業を統合されたAPIにシームレスに統合しながら、GraphQLスキーマのさまざまな部分に独立して作業できるようになります。

GraphQL Federationには、マイクロサービス・アーキテクチャーの展開とキャッシュから製品開発と運用の洞察まで幅広いユースケースがあり、Netflix、Airbnb、GitHub、Expediaなどの企業で採用されています。

GraphQL Federationは、以下も促進します。

拡張性

フェデレーション環境では、開発者は特定のデータ・ドメインに対する責任を複数のサービスに分散できるため、個々のサービス(およびその機能)をより俊敏に調整および拡張できるようになります。

懸念の分離

フェデレーション・サービスは独立して管理できるため、チーム・メンバーは互いに干渉することなく、それぞれのドメインで作業できます。

効率の向上

REST API環境とは異なり、GraphQL Federationでは、クライアントは必要なすべてのリソースとデータを1回のリクエストで取得できるため、冗長性が排除され、リソースのデプロイが最適化されます。

関連ソリューション

関連ソリューション

IBM webMethods

ハイブリッド・マルチクラウド・プラットフォームであるIBM webMethodsを使用してアプリケーションを統合し、作業を自動化します。

webMethodsはこちら
インテグレーション・ソフトウェアとソリューション

IBMインテグレーション・ソリューションでビジネスの可能性を解き放つ、アプリケーションとシステムを接続してクリティカルなデータに迅速かつ安全にアクセスできます。

クラウド統合ソリューションの詳細はこちら
クラウド・コンサルティング・サービス

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

強力な統合ツールでデジタル・トランスフォーメーションへの取り組みを合理化しましょう。IBMの先進ソリューションで、貴社のビジネス・アプリケーションがどのように接続し、自動化され、セキュリティーが保護されるかをご覧ください。

統合を始める 専門分野に特化したソリューションを探る
脚注

1 「Apollo GraphQL Introduces Federation 2 to Get More Organizations to the Graph」、BusinessWire社、2021年11月3日。

2 「Why GraphQL Needs an Open Federation Approach」、The New Stack社、2023年11月16日。