Compartir a través de


ZooKeeperBasedMembershipTable Clase

Definición

Implementación de una tabla de pertenencia mediante Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

public class ZooKeeperBasedMembershipTable : Orleans.IMembershipTable
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
Public Class ZooKeeperBasedMembershipTable
Implements IMembershipTable
Herencia
ZooKeeperBasedMembershipTable
Implementaciones

Comentarios

Una breve introducción a las características de ZK usadas: los datos se representan mediante un árbol de nodos (similar a un sistema de archivos). Cada nodo se dirige mediante una ruta de acceso y puede contener datos como una matriz de bytes y tiene una versión. Cuando se crea un nodo, su versión es 0. Tras las actualizaciones, la versión se incrementa atómicamente. Una actualización también puede estar condicional en una versión actual esperada. Una transacción puede contener varias operaciones, que se realizan correctamente o no de forma atómica. al crear un cliente de Zookeeper, se puede establecer una ruta de acceso base a la que se refieren todas las operaciones.

En esta implementación: cada implementación de Orleans tiene un nodo /UniqueDeploymentId Cada estado de Silo se guarda en /UniqueDeploymentId/IP:Port@Gen Cada IAmAlive de Cada Silo se guarda en /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive se guarda en un nodo independiente porque sus actualizaciones son incondicionales.

La versión de ZK de un nodo es su ETag: la versión de la tabla es la versión de /UniqueDeploymentId que la versión de entrada del silo es la versión de /UniqueDeploymentId/IP:Port@Gen

Constructores

ZooKeeperBasedMembershipTable(ILogger<ZooKeeperBasedMembershipTable>, IOptions<ZooKeeperClusteringSiloOptions>, IOptions<ClusterOptions>)

Implementación de una tabla de pertenencia mediante Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

Métodos

CleanupDefunctSiloEntries(DateTimeOffset)

Implementación de una tabla de pertenencia mediante Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

DeleteMembershipTableEntries(String)

Elimina todas las entradas de tabla del clusterId especificado.

InitializeMembershipTable(Boolean)

Inicializa la tabla de pertenencia basada en ZooKeeper.

InsertRow(MembershipEntry, TableVersion)

Intenta insertar (agregar) de forma atómica un nuevo MembershipEntry para un silo y también actualizar TableVersion. Si la operación se realiza correctamente, se realizarán los siguientes cambios en la tabla:

  1. Se agregará new MembershipEntry a la tabla.
  2. El elemento MembershipEntry recién agregado también se agregará con la nueva eTag generada automáticamente.
  3. TableVersion.Version de la tabla se actualizará a la nueva tableVersion.Version.
  4. TableVersion etag de la tabla se actualizará a la nueva eTag generada automáticamente. Todos los cambios realizados en la tabla, la inserción de una nueva fila y la actualización de la versión de la tabla y las etiquetas electrónicas asociadas, deben producirse de forma atómica o generar un error atómico sin efectos secundarios. La operación debe producir un error en cada una de las condiciones siguientes:
  5. Un membershipEntry para un silo determinado ya existe en la tabla
  6. Error en la actualización de TableVersion porque la etiqueta etag tableVersion especificada (como se especifica en la propiedad TableVersion.VersionEtag) no coincide con la etiqueta etag tableVersion de la tabla.
ReadAll()

Lee de forma atómica el contenido completo de la tabla de pertenencia. MembershipTableData devuelto incluye toda la entrada MembershipEntry para todos los silos de la tabla y TableVersion para esta tabla. MembershipEntries y TableVersion deben leerse de forma atómica.

ReadRow(SiloAddress)

Lee de forma atómica la información de la tabla de pertenencia sobre un silo determinado. MembershipTableData devuelto incluye una entrada MembershipEntry para un silo determinado y TableVersion para esta tabla. MembershipEntry y TableVersion deben leerse de forma atómica.

UpdateIAmAlive(MembershipEntry)

Novedades la parte IAmAlive (columna) de MembershipEntry para este silo. Esta operación solo debe actualizar la columna IAmAlive y no cambiar otras columnas. Esta operación es una "escritura desfasada" o "actualización local" y se realiza sin validación de etag. Con respecto a la actualización de eTags: esta operación puede actualizar automáticamente la eTag asociada a la fila de silo especificada, pero no tiene que hacerlo. También puede dejar la etiqueta etag no cambiada ("escritura sucia"). Con respecto a TableVersion: esta operación no debe cambiar tableVersion de la tabla. Debería dejarlo intacto. No hay ningún escenario en el que esta operación podría producir un error debido a motivos semánticos de tabla. Solo se puede producir un error debido a problemas de red o falta de disponibilidad de la tabla.

UpdateRow(MembershipEntry, String, TableVersion)

Intenta actualizar atomicmente MembershipEntry para un silo y también actualiza TableVersion. Si la operación se realiza correctamente, se realizarán los siguientes cambios en la tabla:

  1. MembershipEntry para este silo se actualizará al nuevo MembershipEntry (la entrada anterior será totalmente sustituida por la nueva entrada).
  2. La eTag de membershipEntry actualizada también será eTag con el nuevo eTag generado automáticamente.
  3. TableVersion.Version de la tabla se actualizará a la nueva tableVersion.Version.
  4. TableVersion etag de la tabla se actualizará a la nueva eTag generada automáticamente. Todos los cambios realizados en la tabla, la actualización de una nueva fila y la actualización de la versión de la tabla y las etiquetas electrónicas asociadas, deben producirse de forma atómica o generar errores atómicos sin efectos secundarios. La operación debe producir un error en cada una de las condiciones siguientes:
  5. Un MembershipEntry para un silo determinado no existe en la tabla
  6. Un membershipEntry para un silo determinado existe en la tabla, pero su etag en la tabla no coincide con la etag proporcionada.
  7. Error en la actualización de TableVersion porque la etiqueta etag tableVersion especificada (como se especifica en la propiedad TableVersion.VersionEtag) no coincide con la etiqueta etag tableVersion de la tabla.

Se aplica a