Service Fabric のアーキテクチャ

Service Fabric は複数層のサブシステムで構築されています。 これらのサブシステムを使用すると、次のようなアプリケーションを作成できます。

  • 高可用性
  • 拡張性
  • 管理可能
  • テスト可能

次の図は、Service Fabric の主要なサブシステムを示しています。

Service Fabric のアーキテクチャ図

分散システムの場合は、クラスター内のノード間で安全に通信する機能が不可欠です。 スタックのベースには、ノード間に安全な通信を提供するトランスポート サブシステムがあります。 トランスポート サブシステムの上に、フェデレーション サブシステムがあります。このサブシステムは、さまざまなノードを 1 つのエンティティ (クラスター) にクラスター化し、これによりエラーの検出、リーダー選定の実行、およびルーティングを Service Fabric が一貫して実行できるようにしています。 フェデレーション サブシステムの上層にある信頼性サブシステムは、Service Fabric のサービスの信頼性を、レプリケーション、リソース管理、およびフェールオーバーなどのメカニズムを通じて管理しています。 また、フェデレーション サブシステムは、単一のノード上でアプリケーションのライフサイクルを管理するホスティングとアクティブ化のサブシステムの基にもなります。 管理サブシステムは、アプリケーションとサービスのライフサイクルを管理します。 テスト容易性サブシステムを使用すると、アプリケーション開発者は、アプリケーションやサービスを運用環境にデプロイする前後に、エラーのシミュレーションによってサービスをテストすることができます。 Service Fabric では、通信サブシステムを使って、サービスの場所を解決する機能を提供します。 開発者に公開されているアプリケーション プログラミング モデルは、ツールを有効にするためのアプリケーション モデルと共にサブシステムの一番上の層に配置されます。

トランスポート サブシステム

トランスポート サブシステムには、ポイント ツー ポイントのデータグラム通信チャネルが実装されています。 このチャネルは、Service Fabric クラスター内の通信や Service Fabric クラスターとクライアント間の通信に使用されます。 一方向通信パターンと要求/応答通信パターンがサポートされており、これによってブロードキャストおよびマルチキャストをフェデレーション層に実装するための基盤が提供されています。 トランスポート サブシステムは、X509 証明書または Windows セキュリティを使用して通信を保護します。 このサブシステムは、Service Fabric によって内部的に使用されるもので、アプリケーション プログラミングの開発者は直接アクセスできません。

フェデレーション サブシステム

分散システムのノードのセットを論理的に判断するには、一貫性のあるシステム観が必要です。 フェデレーション サブシステムは、トランスポートのサブシステムによって提供される通信プリミティブを使用し、さまざまなノードを論理的な判断が可能な 1 つの統一されたクラスターに合成します。 これは、エラー検出、リーダー選定、および一貫性のあるルーティングなど、他のサブシステムで必要な分散システムのプリミティブを提供します。 フェデレーション サブシステムは、128 ビット トークン領域を持つ分散ハッシュ テーブル上に構築されます。 サブシステムのノード上にはリング トポロジが作成され、リング内の各ノードには、所有権のトークン領域のサブセットが割り当てられます。 エラー検出のため、レイヤーはハート ビートと調停に基づく、リース メカニズムを使用します。 フェデレーション サブシステムは、複雑な結合と出発プロトコルにより、1 つのトークンに 1 人の所有者だけが常に存在するようにします。 これにより、リーダー選定と一貫性のあるルーティングの保証を提供できます。

信頼性サブシステム

信頼性サブシステムは、"レプリケーター"、Failover Manager、および "リソース バランサー" を使用するときに、Service Fabric のサービス状態の高可用性を実現します。

  • レプリケーターは、プライマリ サービス レプリカの状態が変わると自動的にセカンダリ レプリカをレプリケートし、サービス レプリカ セット内のプライマリ レプリカとセカンダリ レプリカの一貫性が維持されるようにします。 レプリケーターは、レプリカ セット内のレプリカ間のクォーラム管理を担当します。 レプリケーターは、フェールオーバー ユニットとの対話処理によって、レプリケートする操作の一覧を取得します。Reconfiguration Agent から、レプリカ セットの構成が提供されます。 この構成は、操作がレプリケートされる必要があるレプリカを示します。 Service Fabric は、Fabric Replicator と呼ばれる既定のレプリケーターを提供しており、プログラミング モデル API はこれを使用して、サービス状態の高可用性と信頼性を実現できます。
  • Failover Manager は、ノードがクラスターに追加されたり、クラスターから削除されたりすると、使用可能なノード間で負荷を自動的に再配分します。 クラスターのノードでエラーが発生した場合、クラスターは自動的にサービス レプリカを再構成し、可用性が失われないようにします。
  • Resource Manager は、クラスター内の障害ドメイン全体にサービス レプリカを配置し、すべてのフェールオーバー ユニットの動作を保証します。 さらに、リソース マネージャーは、基になるクラスター ノードの共有プール間でサービス リソースのバランスを調整し、最適な均一負荷分散を実現します。

管理サブシステム

管理サブシステムは、エンド ツー エンド サービス、およびアプリケーション ライフサイクルを管理します。 PowerShell コマンドレットと管理 API により、アプリケーションのプロビジョニング、デプロイ、パッチ、アップグレード、およびプロビジョニング解除が、可用性を失うことなく実現できます。 管理サブシステムは、次のサービスを使用してこれを実行します。

  • クラスター マネージャー: これは、信頼性から Failover Manager と対話処理を行い、サービス配置に関する制約に基づいてノードにアプリケーションを配置するプライマリ サービスです。 フェールオーバー サブシステムのリソース マネージャーは、制約が破られていないことを確認します。 クラスター マネージャーは、プロビジョニングからプロビジョニング解除までの、アプリケーションのライフサイクルを管理します。 これは、ヘルス マネージャーと統合して、アプリケーションの可用性が、アップグレード中にセマンティック正常性パースペクティブから失われないようにします。
  • ヘルス マネージャー: このサービスにより、アプリケーション、サービス、クラスター エンティティの正常性を監視できます。 クラスター エンティティ (ノード、サービス パーティション、レプリカなど) が正常性の情報をレポートし、集中型正常性ストアに集計されます。 この正常性の情報は、クラスター内の複数のノード間で分散されるサービスやノードの特定時点での正常性スナップショットを提供するもので、これにより、必要な修正操作を実行することが可能になります。 正常性クエリ API では、正常性サブシステムにレポートされた正常性イベントに対してクエリを実行できます。 正常性クエリ API は、正常性ストアに格納されている生の正常性データを返すか、特定のクラスター エンティティの集計解釈正常性データを返します。
  • Image Store: このサービスは、アプリケーション バイナリの保管と配付を可能にします。 このサービスでは、アプリケーションのアップロード先およびダウンロード元となる単純な分散ファイル ストアを提供します。

ホスティング サブシステム

クラスター マネージャーは、ホスティング サブシステム (各ノードで実行している) に対して、特定のノードで管理が必要なサービスを通知します。 ホスティング サブシステムは、そのノード上のアプリケーションのライフサイクルを管理します。 これは、信頼性コンポーネントおよび正常性コンポーネントと対話し、レプリカが適切に配置されて正常な状態にあることを確認します。

通信サブシステム

このサブシステムは、ネーム サービスを介して、クラスター検索やサービス検索内での信頼できるメッセージ処理を提供します。 ネーム サービスは、サービス名を解決してクラスター内の場所に対応付けて、ユーザーによるサービス名とプロパティの管理を可能にします。 ネーム サービスを使用することにより、クライアントはクラスター内の任意のノードと安全に通信して、サービス名を解決し、サービス メタデータを取得できます。 Service Fabric のユーザーは、単純な名前付けクライアント API を使用して、ノードのダイナミズムやクラスターのサイズ変更に関係なく、現在のネットワークの場所を解決する能力のあるサービスおよびクライアントを開発できます。

テスト容易性サブシステム

テスト容易性サブシステムは、テスト サービス専用に設計され Service Fabric 上に構築されている一連のツールです。 このツールを使用すると、開発者は検証意義のあるエラーを容易に誘発してテスト シナリオを実行することができ、サービスがその有効期間内に直面する可能性のある状態と遷移を、完全に管理下にある安全な方法で、試行および検証できます。 また、テスト容易性は可用性を失うことなく、予測されるさまざまなエラーを繰り返すことができる、より長いテストを実行するメカニズムも提供します。 これにより、ユーザーは運用環境でテストを実行できます。