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. Если операция завершится успешно, в таблицу будут внесены следующие изменения:
|
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. Если операция завершится успешно, в таблицу будут внесены следующие изменения:
|