Reliable Collection では、高可用性でスケーラブルな、待機時間が短いクラウド アプリケーションを、単一のコンピューターのアプリケーションを作成しているかのように作成できます。 Microsoft.ServiceFabric.Data.Collections 名前空間のクラスは、状態の可用性を自動的に高める、一連のコレクションを提供します。 開発者は Reliable Collection API に対してプログラミングするだけで、Reliable Collection によって、レプリケートされたローカルの状態が管理されます。
Reliable Collection とその他の高可用性テクノロジ (Redis、Azure Table service、Azure Queue サービスなど) の主な違いは、状態をローカルでサービス インスタンスに格納したまま、高い可用性を実現している点です。 これは、次のことを意味します。
- すべての読み取りはローカルで実行されるため、待機時間が短くスループットが高い読み取りになります。
- すべての書き込みでネットワーク IO 回数が最小に抑えられるため、待機時間が短くスループットが高い書き込みになります。
Reliable Collection は System.Collections クラスが自然に進化したものと考えることができます。つまり、開発者の作業を複雑にせずに、クラウド アプリケーションや複数コンピューター アプリケーション向けに設計された一連の新しいコレクションです。 そのため Reliable Collection は
- レプリケートされる:状態の変更がレプリケートされるため、高可用性を実現できる。
- 非同期:API は非同期であるため、IO の実行時にスレッドがブロックされない。
- トランザクション:API ではトランザクションの抽象化が使用できるため、サービス内で複数の Reliable Collection を簡単に管理できる。
- 永続化または揮発性:データはディスクに永続化できるため、大規模な障害 (例: データセンターの電源障害) が発生しても影響を受けない。 一部の Reliable Collection では、揮発性モードもサポートされています (注意事項あり)。このモードでは、レプリケートされたメモリ内キャッシュなど、すべてのデータがメモリ内に保持されます。
Reliable Collection では追加設定なしで強力な整合性が保証されるため、アプリケーションの状態を判断するのが簡単です。 強力な整合性は、プライマリ レプリカを含むレプリカのマジョリティ クォーラムにトランザクション全体が適用された後にのみ、トランザクション コミットが完了するようにすることで実現されています。 弱い整合性を実現するには、非同期コミットが戻る前に、アプリケーションがクライアントや要求元に確認応答できます。
Reliable Collection API は同時実行コレクション API ( System.Collections.Concurrent 名前空間内にあります) が進化したものです。
- 非同期:同時実行コレクションとは異なり、操作がレプリケートおよび永続化されるため、タスクを返します。
- out パラメーターを使用しない:
ConditionalValue<T>を使用して out パラメーターではなく、boolおよびおよび値を返します。ConditionalValue<T>はNullable<T>に似ていますが、構造体にするには「T」は必要ありません。 - トランザクション:トランザクション オブジェクトを使用することで、トランザクション内で複数の Reliable Collection に対してユーザーがグループ操作を実行できます。
現在、 Microsoft.ServiceFabric.Data.Collections には次の 3 つのコレクションが含まれています。
- Reliable Dictionary:レプリケートされた、トランザクションに使用する非同期のキーと値のペアのコレクションです。 ConcurrentDictionaryと同様に、キーと値のいずれにも任意の型を使用できます。
- リライアブル キュー:レプリケートされた、トランザクションに使用する非同期の厳密な先入れ先出し型 (FIFO) のキューです。 ConcurrentQueueと同様に、値には任意の型を使用できます。
- Reliable Concurrent Queue:高スループットのためにレプリケートされたトランザクションの非同期のベスト エフォートで順序付けされるキューを表します。 ConcurrentQueue と同様に、値には任意の型を使用できます。