다음을 통해 공유


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 클라이언트를 만들 때 모든 작업이 상대적인 기본 경로를 설정할 수 있습니다.

이 구현에서: 모든 Orleans 배포에는 /UniqueDeploymentId 모든 사일로의 상태가 /UniqueDeploymentId/IP:Port@Gen 저장됩니다. 모든 사일로의 IAmAlive는 /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive의 업데이트가 무조건이므로 별도의 노드에 저장됩니다.

노드의 ZK 버전은 ETag입니다. 테이블 버전은 /UniqueDeploymentId의 버전입니다. 사일로 항목 버전은 /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)

지정된 deploymentId의 모든 테이블 항목을 삭제합니다.

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)

원자적으로 하나의 사일로에 대해 새 MembershipEntry를 삽입(추가)하고 TableVersion도 업데이트하려고 합니다. 작업이 성공하면 테이블에 다음과 같은 변경 내용이 적용됩니다.

  1. 새 MembershipEntry가 테이블에 추가됩니다.
  2. 새로 추가된 MembershipEntry는 자동으로 생성된 새 고유 eTag와 함께 추가됩니다.
  3. 테이블의 TableVersion.Version은 새 TableVersion.Version으로 업데이트됩니다.
  4. 테이블의 TableVersion etag는 자동으로 생성된 새 고유 eTag로 업데이트됩니다. 테이블에 대한 모든 변경 내용, 새 행 삽입 및 테이블 버전 및 연결된 etag 업데이트는 원자성으로 발생하거나 부작용 없이 원자성으로 실패해야 합니다. 작업은 다음 각 조건에서 실패해야 합니다.
  5. 지정된 사일로에 대한 MembershipEntry가 테이블에 이미 있습니다.
  6. TableVersion.VersionEtag 속성에 지정된 지정된 TableVersion etag가 테이블의 TableVersion etag와 일치하지 않아 TableVersion을 업데이트하지 못했습니다.
ReadAll()

멤버 자격 테이블의 전체 콘텐츠를 원자성으로 읽습니다. 반환된 MembershipTableData에는 테이블의 모든 사일로에 대한 모든 MembershipEntry 항목과 이 테이블의 TableVersion이 포함됩니다. MembershipEntries 및 TableVersion은 원자성으로 읽어야 합니다.

ReadRow(SiloAddress)

지정된 사일로에 대한 멤버 자격 테이블 정보를 원자성으로 읽습니다. 반환된 MembershipTableData에는 지정된 사일로에 대한 MembershipEntry 항목 하나와 이 테이블에 대한 TableVersion이 포함됩니다. MembershipEntry 및 TableVersion은 원자성으로 읽어야 합니다.

UpdateIAmAlive(MembershipEntry)

이 사일로에 대한 MembershipEntry의 IAmAlive 부분(열)을 업데이트. 이 작업은 IAmAlive 콜럼만 업데이트하고 다른 열은 변경하지 않아야 합니다. 이 작업은 "더티 쓰기" 또는 "현재 위치 업데이트"이며 etag 유효성 검사 없이 수행됩니다. eTags 업데이트와 관련하여: 이 작업은 지정된 사일로 행과 연결된 eTag를 자동으로 업데이트할 수 있지만 그렇게 할 필요는 없습니다. etag가 변경되지 않도록 할 수도 있습니다("더티 쓰기"). TableVersion과 관련하여 이 작업은 테이블의 TableVersion을 변경하지 않아야 합니다. 그것은 그대로 두어야합니다. 테이블 의미상 이유로 인해 이 작업이 실패할 수 있는 시나리오는 없습니다. 네트워크 문제 또는 테이블 사용 불가로 인해 실패할 수 있습니다.

UpdateRow(MembershipEntry, String, TableVersion)

원자적으로 하나의 사일로에 대한 MembershipEntry를 업데이트하고 TableVersion도 업데이트하려고 합니다. 작업이 성공하면 테이블에 다음과 같은 변경 내용이 적용됩니다.

  1. 이 사일로의 MembershipEntry는 새 MembershipEntry로 업데이트됩니다(이전 항목은 새 항목으로 완전히 대체됨).
  2. 업데이트된 MembershipEntry에 대한 eTag는 자동으로 생성된 새 고유 eTag가 있는 eTag가 됩니다.
  3. 테이블의 TableVersion.Version은 새 TableVersion.Version으로 업데이트됩니다.
  4. 테이블의 TableVersion etag는 자동으로 생성된 새 고유 eTag로 업데이트됩니다. 테이블에 대한 모든 변경 내용, 새 행 업데이트 및 테이블 버전 및 연결된 etag 업데이트는 원자성으로 발생하거나 부작용 없이 원자성으로 실패해야 합니다. 작업은 다음 각 조건에서 실패해야 합니다.
  5. 지정된 사일로에 대한 MembershipEntry가 테이블에 없습니다.
  6. 지정된 사일로에 대한 MembershipEntry는 테이블에 있지만 테이블의 etag가 제공된 etag와 일치하지 않습니다.
  7. TableVersion.VersionEtag 속성에 지정된 지정된 TableVersion etag가 테이블의 TableVersion etag와 일치하지 않아 TableVersion을 업데이트하지 못했습니다.

적용 대상