Введение в надежные коллекции в службах с отслеживанием состояния Azure Service Fabric

Надежные коллекции позволяют создавать высокодоступные и масштабируемые облачные приложения с низкой задержкой точно так же, как приложения для одного компьютера. Классы в пространстве имен Microsoft.ServiceFabric.Data.Collections предоставляют набор коллекций, которые автоматически обеспечивают состояние высокой доступности. Разработчикам нужно только создать интерфейсы API для надежных коллекций и разрешить надежным коллекциям управлять реплицированным и локальным состояниями.

Основное различие между надежными коллекциями и другими технологиями обеспечения высокой доступности (например, Redis, службы таблиц и очередей Azure) заключается в том, что состояние хранится локально в экземпляре службы и одновременно делается высокодоступным. Это означает следующее.

  • Все операции чтения выполняются локально, что позволяет достичь низкой задержки и высокой пропускной способности при чтении.
  • Все операции записи создают минимальное количество сетевых операций ввода-вывода, что позволяет достичь низкой задержки и высокой пропускной способности при записи.

Image of evolution of collections.

Надежные коллекции можно рассматривать как развитие классов System.Collections. Это новый набор удобных коллекций для разработчиков, предназначенных для облачных приложений и приложений для нескольких компьютеров. Таким образом, надежные коллекции являются:

  • реплицируемыми (изменения состояния реплицируются для обеспечения высокой доступности);
  • асинхронными (интерфейсы API работают асинхронно, что позволяет избежать блокировки потоков при операциях ввода-вывода);
  • транзакционными (интерфейсы API используют абстракцию транзакций, что позволяет легко управлять несколькими надежными коллекциями в службе).
  • постоянными или временными (данные сохраняются на диск для защиты от крупномасштабных перебоев, например отключения питания в центре обработки данных). Некоторые надежные коллекции также поддерживают временный режим (с некоторыми нюансами), при котором все данные хранятся в памяти, например реплицируются в кэш в памяти.

Коллекции Reliable Collections изначально гарантируют высокую целостность данных, благодаря чему вам будет легче анализировать состояние приложений. Высокая целостность достигается за счет того, что фиксация транзакции завершается только после регистрации всей транзакции в большинстве кворума реплик (включая первичные реплики). Для достижения более низкой целостности приложения могут отправить подтверждение клиенту (или инициатору запроса) до того, как вернется асинхронная фиксация.

API надежных коллекций являются развитием API параллельных коллекций (находятся в пространстве имен System.Collections.Concurrent ):

  • работают асинхронно (возвращают задачи, потому что, в отличие от параллельных коллекций, операции реплицируются и сохраняются);
  • нет выходных параметров, вместо них используется ConditionalValue<T> для возвращения bool и значения; ConditionalValue<T> имеет сходство с Nullable<T>, но не требует, чтобы значение T было структурой.
  • являются транзакционными (используется объект транзакции, благодаря чему пользователь может группировать действия с несколькими надежными коллекциями в одну транзакцию).

Сейчас пространство имен Microsoft.ServiceFabric.Data.Collections содержит три коллекции:

  • надежный словарь (реплицируемая, транзакционная и асинхронная коллекция пар "ключ-значение"; как и в ConcurrentDictionary, ключ и значение могут быть любого типа);
  • надежная очередь (реплицируемая, транзакционная и асинхронная очередь, функционирующая строго по методу FIFO; как и в ConcurrentQueue, значение может быть любого типа).
  • Надежная параллельная очередь — реплицируемая, транзакционная и асинхронная упорядочивающая очередь для обеспечения высокой пропускной способности. Как и в ConcurrentQueue, значение может быть любого типа.

Следующие шаги