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


ZooKeeperBasedMembershipTable Класс

Определение

Реализация таблицы членства с помощью Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

public class ZooKeeperBasedMembershipTable : Orleans.IMembershipTable, Orleans.Messaging.IGatewayListProvider
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
    interface IGatewayListProvider
Public Class ZooKeeperBasedMembershipTable
Implements IGatewayListProvider, IMembershipTable
Наследование
ZooKeeperBasedMembershipTable
Реализации

Комментарии

Краткий обзор используемых функций ZK: данные представлены деревом узлов (аналогично файловой системе). Каждый узел обращается по пути и может содержать данные в виде массива байтов и имеет версию. При создании узла его версия составляет 0. После обновлений версия увеличивается атомарным образом. Обновление также может быть условным для ожидаемой текущей версии. Транзакция может содержать несколько операций, которые завершаются успешно или завершаются атомарным сбоем. При создании клиента zookeeper можно задать базовый путь, в котором все операции относительны.

В этой реализации: каждое развертывание Орлеана имеет состояние узла /UniqueDeploymentId каждого Silo сохраняется в /UniqueDeploymentId/IP:Port@Gen каждый IAmAlive Silo сохраняется в /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive, так как его обновления являются безусловными.

Версия ZK узла — это ETag: версия таблицы — это версия /UniqueDeploymentId, версия записи silo — это версия /UniqueDeploymentId/IP:Port@Gen

Конструкторы

ZooKeeperBasedMembershipTable()

Реализация таблицы членства с помощью Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

Свойства

IsUpdatable

Указывает, обновляет ли этот объект IGatewayListProvider возвращаемые сведения или всегда возвращает один и тот же список gw. (в настоящее время не обновляется только статическая конфигурация на основе StaticGatewayListProvider. Все остальные.)

MaxStaleness

Указывает частоту обновления IGatewayListProvider для привязки к максимальному устаревание возвращаемой информации.

Методы

DeleteMembershipTableEntries(String)

Удаляет все записи таблицы заданного идентификатора развертывания.

GetGateways()

Возвращает список шлюзов (силосов), которые могут использоваться клиентом для подключения к кластеру Orleans. Универсальный код ресурса (URI) имеет вид gwy.tcp://IP:port/Generation. Дополнительные сведения о формате URI см. в разделе Utils.ToGatewayUri и Utils.ToSiloAddress.

InitializeGatewayListProvider(ClientConfiguration, Logger)

Инициализирует поставщик шлюза на основе ZooKeeper

InitializeMembershipTable(GlobalConfiguration, Boolean, Logger)

Инициализирует таблицу членства на основе ZooKeeper.

InsertRow(MembershipEntry, TableVersion)

Atomically пытается вставить (добавить) новый MembershipEntry для одного сило, а также обновить TableVersion. Если операция завершится успешно, в таблицу будут внесены следующие изменения:

  1. В таблицу будет добавлен новый membershipEntry.
  2. Добавленный membershipEntry также будет добавлен с новым уникальным автоматически созданным eTag.
  3. TableVersion.Version в таблице будет обновлена до новой версии TableVersion.Version.
  4. Тег etag TableVersion в таблице будет обновлен до нового уникального автоматически созданного eTag. Все эти изменения в таблице, вставка новой строки и обновление версии таблицы и связанных etags должны происходить атомарным образом или завершаться атомарным сбоем без побочных эффектов. Операция должна завершиться ошибкой в каждом из следующих условий:
  5. MembershipEntry для заданного сило уже существует в таблице
  6. Обновление объекта TableVersion завершилось сбоем, так как заданный etag TableVersion (как указано в свойстве TableVersion.VersionEtag) не совпадал с тегом TableVersion etag в таблице.
ReadAll()

Атомарным образом считывает полное содержимое таблицы членства. Возвращенная запись MembershipTableData включает все записи MembershipEntry для всех силосов в таблице и TableVersion для этой таблицы. Членства и TableVersion должны быть считываться атомарным образом.

ReadRow(SiloAddress)

Атомарны считывает сведения о таблице членства по заданному сило. Возвращенная запись MembershipTableData включает одну запись MembershipEntry для заданного сило и TableVersion для этой таблицы. MembershipEntry и TableVersion должны быть считываться атомарным образом.

UpdateIAmAlive(MembershipEntry)

Обновления часть IAmAlive (столбец) объекта MembershipEntry для этого сило. Эта операция должна обновлять только collumn IAmAlive и не изменять другие столбцы. Эта операция является "грязной записью" или "обновлением на месте" и выполняется без проверки etag. Что касается обновления eTags: эта операция может автоматически обновлять eTag, связанный с заданной строкой с расширением silo, но это не обязательно. Он также может оставить etag не измененным ("грязная запись"). Что касается TableVersion: эта операция не должна изменять TableVersion таблицы. Он должен оставить его нетронутым. Нет сценария, в котором эта операция может завершиться сбоем из-за семантических причин таблицы. Это может завершиться ошибкой только из-за проблем с сетью или недоступности таблицы.

UpdateRow(MembershipEntry, String, TableVersion)

Atomically пытается обновить MembershipEntry для одного сило, а также обновить TableVersion. Если операция завершится успешно, в таблицу будут внесены следующие изменения:

  1. MembershipEntry для этого silo будет обновлен до нового MembershipEntry (старая запись будет полностью заменена новой записью).
  2. ETag для обновленного MembershipEntry также будет eTag с новым уникальным автоматически созданным eTag.
  3. TableVersion.Version в таблице будет обновлена до новой версии TableVersion.Version.
  4. Тег etag TableVersion в таблице будет обновлен до нового уникального автоматически созданного eTag. Все эти изменения в таблице, обновление новой строки и обновление версии таблицы и связанных etags должны происходить атомарным образом или завершаться атомарным сбоем без побочных эффектов. Операция должна завершиться ошибкой в каждом из следующих условий:
  5. MembershipEntry для заданного сило не существует в таблице
  6. MembershipEntry для заданного силона существует в таблице, но его etag в таблице не соответствует предоставленному etag.
  7. Обновление объекта TableVersion завершилось сбоем, так как заданный etag TableVersion (как указано в свойстве TableVersion.VersionEtag) не совпадал с тегом TableVersion etag в таблице.

Применяется к