Clustering provider in Orleans

Clustering provider in Orleans

(Jin Qing’s Column, Nov. 3, 2021)

When deployed to a cluster of nodes,
Orleans internally implements a protocol to manage it’s silos,
including discovery, failure and reconfigure,
which is called cluster membership management.

Orleans has clustering membership providers for: Azure, SQL server, Zookeeper.

Clustering provider is one of key aspects of silo configuration.

Orleans.Clustering.Kubernetes

OrleansContrib/Orleans.Clustering.Kubernetes
is a clustering provider for running Orleans cluster on Kubernetes.

Tell silo to use Kubernetes as the Cluster Membership Provider:

var silo = new SiloBuilder()
        ...
        .UseKubeMembership()
        ...
        .Build();

Interface

UseKubeMembership() instantiates a KubeMembershipTable which implements
IMembershipTable.

    public interface IMembershipTable
    {
        Task InitializeMembershipTable(bool tryInitTableVersion);
        Task DeleteMembershipTableEntries(string clusterId);
        Task CleanupDefunctSiloEntries(DateTimeOffset beforeDate);
        Task<MembershipTableData> ReadRow(SiloAddress key);
        Task<MembershipTableData> ReadAll();
        Task<bool> InsertRow(MembershipEntry entry, TableVersion tableVersion);
        Task<bool> UpdateRow(MembershipEntry entry, string etag, TableVersion tableVersion);
        Task UpdateIAmAlive(MembershipEntry entry);
    }

Implement

KubeMembershipTable
access Kubernetes API server to read and write silo entry CRD.

  • InitializeMembershipTable()
    • TryInitClusterVersion()
      • _kubeClient.GetNamespacedCustomObjectAsync
      • _kubeClient.CreateNamespacedCustomObjectAsync
  • DeleteMembershipTableEntries(string clusterId)
    • _kubeClient.DeleteNamespacedCustomObjectAsync
  • InsertRow(…)
    • _kubeClient.GetNamespacedCustomObjectAsync
    • _kubeClient.ReplaceNamespacedCustomObjectAsync
    • _kubeClient.CreateNamespacedCustomObjectAsync
  • ReadAll()
    • GetClusterVersion()
      • _kubeClient.ListNamespacedCustomObjectAsync
    • GetSilos()
      • _kubeClient.ListNamespacedCustomObjectAsync
  • ReadRow(SiloAddress key)
    • _kubeClient.GetNamespacedCustomObjectAsync
  • UpdateIAmAlive(MembershipEntry entry)
    • _kubeClient.GetNamespacedCustomObjectAsync
    • _kubeClient.ReplaceNamespacedCustomObjectAsync
  • UpdateRow(…)
    • _kubeClient.ReplaceNamespacedCustomObjectAsync
  • CleanupDefunctSiloEntries(DateTimeOffset beforeDate)
    • _kubeClient.DeleteNamespacedCustomObjectAsync

The operators to NamespacedCustomObject are:

  • Delete
  • Get
  • Create
  • Replace
  • List

CRD

Two CRDs, ClusterVersion and Silo are defined in files:

  • ClusterVersionCRD.yaml
  • SiloEntryCRD.yaml

Custom resource objects are stored in etcd of Kubernetes.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值