Поделиться через


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

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

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

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

Изображение эволюции коллекций.

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

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

Надежные коллекции по умолчанию обеспечивают строгие гарантии согласованности, чтобы упростить рассуждения о состоянии приложения. Надежная согласованность достигается путем обеспечения завершения фиксаций транзакций только после того, как вся транзакция была зарегистрирована в кворуме большинства реплик, включая основную. Чтобы добиться более слабой согласованности, приложения могут подтвердить обратно клиенту/запросчику пока возврат асинхронной фиксации не выполнен.

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

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

Сегодня Microsoft.ServiceFabric.Data.Collections содержит три коллекции:

  • Надежный словарь: представляет собой реплицированную, транзакционную и асинхронную коллекцию пар "ключ-значение". Аналогично ConcurrentDictionary, ключ и значение могут иметь любой тип.
  • Надежная очередь: представляет реплицированную, транзакционную и асинхронную строгую очередь «первым пришёл — первым вышел» (FIFO). Аналогично ConcurrentQueue, значение может иметь любой тип.
  • Надежная конкурентная очередь: представляет собой реплицированную, транзакционную и асинхронную очередь с наилучшей возможной упорядоченностью для высокой пропускной способности. Аналогично ConcurrentQueue, значение может иметь любой тип.

Дальнейшие действия