適切な Sync Framework コンポーネントの選択
このトピックでは、一般的な同期のシナリオで使用されるコンポーネントと、Sync Framework の大まかなアーキテクチャについて説明します。
Sync Framework のコンポーネント
Sync Framework には、ランタイム、特定のデータ ストアに対応する一連の "同期プロバイダー"、プロバイダーを作成するための API が用意されています。プロバイダーとは、同期システム内でデータ ソースと他のコンポーネントが通信することを可能にするソフトウェア コンポーネントです。専用のプロバイダーが用意されているデータ ストアを同期する場合、そのプロバイダーを使用することを強くお勧めします。プロバイダーは拡張性を備えており、アプリケーションに合わせてカスタマイズすることができます。専用のプロバイダーが用意されていないデータ ストアを同期する場合、または別の実装が必要な場合は、カスタム プロバイダーが適しています。
次の図に、Sync Framework で用意されているすべてのコンポーネント間のリレーションシップを示します。
図中のコンポーネントは次のとおりです。
データベース同期プロバイダー (以前のリリースでの呼称は Sync Services for ADO.NET)。このプロバイダーは、Microsoft.Synchronization.dll、Microsoft.Synchronization.Data.dll、Microsoft.Synchronization.Data.Server.dll、Microsoft.Synchronization.Data.SqlServer.dll、および Microsoft.Synchronization.Data.SqlServerCe.dll に含まれています。次のタイプのシナリオでデータベースを同期する際に使用できます。
コラボレーションのシナリオ。たとえば、ユーザーがプロジェクトの注釈を共有できるアプリケーションでは、プロジェクト チーム メンバーには作業の可能なデータのローカル コピーが必要となることがよくあります。変更を行ったときは、別のチーム メンバーと同期して変更を交換し、さらに変更を中央サーバーに同期することができます。
オフラインのシナリオ。たとえば、販売員が顧客のオフィスから製品データにアクセスする必要があり、さらに注文をアップロードする必要があるとします。販売員は午前中に中央サーバーに同期することで、最新の製品情報と価格情報を確実に得ることができ、また夕方に同期することで、その日の注文をアップロードすることができます。
詳細については、「データベースの同期」を参照してください。オフライン プロバイダーは、Sync Framework 1.0 の前にリリースされていた Synchronization Services for ADO.NET 1.0 の一部でした。コラボレーション プロバイダーは、コア API およびランタイムを基に構築されていますが、オフライン プロバイダーはそうではありません。オフライン プロバイダーは、他の種類の Sync Framework プロバイダーが含まれたトポロジに参加できません。
ファイル同期プロバイダー (以前のリリースでの呼称は Sync Services for File Systems)。このプロバイダーは、FileSyncProvider2.dll および Microsoft.Synchronization.Files.dll に含まれています。NTFS、FAT、SMB のファイル システムでファイルとフォルダーを同期するために使用できます。同期するディレクトリはローカルまたはリモートのどちらでもかまいません。また、同じファイル システムである必要もありません。アプリケーションでは、静的フィルターにファイルを明示的に指定する方法や、*.txt などのワイルドカード文字を使用する方法で、ファイルを除外したり含めたりできます。また、サブフォルダーの内容全体を除外するようにフィルターを設定することもできます。さらに、ファイル同期の進行状況の通知を受け取るための登録を行うこともできます。詳細については、「ファイルの同期」を参照してください。
Web フィード同期コンポーネント (以前のリリースでの呼称は Sync Services for FeedSync)。このコンポーネントは、FeedSync2.dll および Microsoft.Synchronization.dll に含まれています。このコンポーネントは次の 2 つの方法で使用できます。
Web フィード同期プロバイダー サービスを使用することにより、レプリカとして FeedSync XML ファイルを表すプロバイダーを作成できます。FeedSync の詳細については、FeedSync の Web サイトを参照してください。
Web フィード プロデューサー コンポーネントおよび Web フィード コンシューマー コンポーネントを使用すると、別の種類のレプリカ (ファイル システムなど) のデータを RSS フィールドや Atom フィードと同期させることができます。
詳細については、「Web フィードの同期」を参照してください。
カスタム プロバイダー。このコンポーネントは、Synchronization2.dll、Microsoft.Synchronization.dll、SimpleProviders2.dll、Microsoft.Synchronization.SimpleProviders.dll に含まれています。カスタム プロバイダーを使用して、あらゆる種類のデータ ストアに対応した同期プロバイダーを作成できます。たとえば、顧客連絡先の追跡のためのカスタム ストレージ システムがアプリケーションに含まれている場合、簡易プロバイダーまたは完全カスタム プロバイダーを使用して、そのデータをアプリケーションに統合することができます。詳細については、「カスタム プロバイダーを使用したデータ ストアの同期」を参照してください。
Metadata Storage Service。このコンポーネントは、MetaStore2.dll および Microsoft.Synchronization.MetadataStorage.dll に含まれています。カスタム プロバイダーでは、このコンポーネントを同期メタデータの格納と処理に使用できます。特に、これ以外の方法ではメタデータを格納できないレプリカに最適です。Metadata Storage Service では、メモリおよびディスクのフットプリントが小さく、プロバイダーと一緒に再配布できる、信頼性が高い軽量のデータベースを使用します。この API では、メタデータ ストアにアクセスするためのインターフェイスとメソッドがメタデータ ストアと明確に分離されているため、プロバイダーの変更を最小限にしながら代替ストアを実装することができます。詳細については、「Sync Framework Metadata Storage Service」を参照してください。
コア API とランタイム。このコンポーネントは、Synchronization2.dll および Microsoft.Synchronization.dll に含まれています。コア API とランタイムは、オフライン データベース プロバイダーを除くすべてのコンポーネントで使用されます。このコンポーネントの詳細については、「カスタム プロバイダーを使用したデータ ストアの同期」を参照してください。
コンポーネントのインストールの詳細については、「インストール、再配布、バージョン互換性」を参照してください。
Sync Framework には、幅広い種類のアプリケーションでの同期を実現する、さまざまなコンポーネントが用意されています。このトピックでは、どのコンポーネントがアプリケーションに適しているのかを判別する助けとなるように、各コンポーネントの基本的な情報を紹介しました。複数の種類のデータ ストアを利用するアプリケーションの場合は、次に「異なるプロバイダーのデータの統合」を参照してください。
Sync Framework のアーキテクチャ
Sync Framework では、プロバイダーベースのアーキテクチャが使用されています。プロバイダーを使用することで、他の同期コンポーネントでは各データ ストアの複雑さと特定の実装を考慮する必要がなくなります。このアーキテクチャを特殊な同期メタデータと組み合わせて使用することで、Sync Framework ではプロバイダーの書き込み先となる任意の種類のデータ ストアを同期できるようになります。Sync Framework には、一般的なデータ ストア (データベースや NTFS ファイル システム) に対応するプロバイダーが用意されていますが、他の種類のデータ ストアに対応するプロバイダーを作成することもできます。プロバイダーは、Sync Framework との主要な統合ポイントです。
次の図に、Sync Framework の全体的なアーキテクチャを示します。この図に示すように、同期は常に 2 つのレプリカ ("ノード") の間で実行されますが、同期コミュニティ ("トポロジ") は、ハブ アンド スポーク型やピア ツー ピア型などさまざまな形態があります。いくつか例外はありますが、アプリケーションの要件に応じて、同期する各ペアは 2 層アーキテクチャや N 層アーキテクチャ上で同期することができます。各 Sync Framework コンポーネントのドキュメントには、適切なアーキテクチャとセキュリティの考慮事項について、詳細な情報が記載されています。
図中の要素は、次の 3 種類に分類されます。
開発者により作成された要素。
アプリケーションでは、アプリケーションの要件に基づいて、同期メソッドを呼び出し、イベントに応答し、その他のタスクを処理します。
データ ストアには、ファイル システム、リレーショナル データベース、フラット ファイル連絡先ストア、または同期が必要なその他のデータ ストアを指定できます。
データ転送プロトコルによって、2 つのプロバイダー間でデータ変更を転送する方法が決定されます。
Sync Framework に用意されている要素。
アプリケーションは、ネイティブ コードとマネージ コードのどちらを使用したかに応じて、同期セッションまたは同期オーケストレータと通信します。その後、同期セッションまたは同期オーケストレータがそれぞれの同期プロバイダーと通信します。
同期ランタイムにより同期プロセスが実行され、状態、競合、エラーがクライアント アプリケーションに通知されます。
シナリオに応じて、開発者が作成するか、Sync Framework で用意される要素。
使用するプロバイダーは、同期するデータの種類に応じて決まります。状況によっては、開発者がアプリケーション用のカスタム プロバイダーを作成する必要があります。Sync Framework には、このような作業を簡略化するために多数の API が用意されています。また、同期で最も困難な処理である競合検出などを支援するコンポーネントも数多く用意されています。
メタデータ ストアのメタデータを Sync Framework で使用することで、各プロバイダーでどの変更を選択し、サービス対象のデータ ストアに適用する必要があるかを決定します。メタデータの格納方法と使用方法は、使用するプロバイダーによって異なります。たとえば、データベース用のプロバイダーの場合、通常はデータ ストアと同じデータベースの追跡テーブル内にメタデータが格納されます。カスタム プロバイダーの場合、メタデータ ストアを作成するか、Sync Framework に含まれているサービスを使用することができます。各 Sync Framework コンポーネントのドキュメントに、メタデータに関する詳細な情報が記載されています。