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.

Clustering provider in Orleans相关推荐

  1. Orleans解决并发之痛(四):Streams

    Orleans 提供了 Stream扩展编程模型.此模型提供了一套API,使处理流更简单和更健壮.Stream默认提供了两种Provider,不同的流类型可能使用不同的Provider来处理,Simp ...

  2. Orleans解决并发之痛(三):集群

    Orleans本身的设计是一个分布式的框架,多个Silo构成集群,Grains分布在多个Silo中.一旦一个Silo挂了,原来归属这个Silo的Grains会自动在其他Silo中激活.生产环境下还是需 ...

  3. Orleans解决并发之痛(二):Grain状态

    Grains是Orleans应用程序的构建块,它们是彼此孤立的原子单位,分布的,持久的, 一个典型的Grain是有状态和行为的一个单实例,每个Grain实例的在单线程内执行,Grain之间共享数据通过 ...

  4. Orleans 初接触(一) 入门例子

    [返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.Orleans入门例子 这个例子是跟着<Orleans入门例子>(https://www.cnblogs. ...

  5. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  6. 微软的奥尔良项目简介

    在2014年的Build开发者大会上,微软研究院(Microsoft Research)公开了一个叫做"奥尔良"的项目.这篇博客的目的就是对这个项目做一个初步的介绍,并引导感兴趣的 ...

  7. 一文彻底掌握Apache Hudi异步Clustering部署

    1. 摘要 在之前的一篇博客中,我们介绍了Clustering(聚簇)的表服务来重新组织数据来提供更好的查询性能,而不用降低摄取速度,并且我们已经知道如何部署同步Clustering,本篇博客中,我们 ...

  8. Orleans 高级特性-目录

    Orleans 高级特性-目录 这里将介绍一些Orleans的高级特性,适合对Orleans已经有不少了解的用户,先列出一个索引,博客文章慢慢补充 1.使用Immutable 优化复制 2.自定义序列 ...

  9. 集群策略--集群(clustering)

    集群(clustering)这个词使用非常混乱.这里我们首先给出一个较为科学的阐述,并以这个阐述为主线来叙述.探讨相关问题. 集群可分为三种类型:科学集群.高可用性集群.负载均衡集群. 科学集群(Sc ...

最新文章

  1. java修饰静态_Java-static修饰符及静态代码块
  2. 自动管理Windows2003好用的“远程桌面”
  3. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 构造函数分析 | makeDexElements 函数分析 )
  4. Python源码剖析[16] —— Pyc文件解析
  5. Autocad下载 安装 和谐 与 卸载
  6. TRDD got lost again
  7. ad18原理图器件批量修改_Altium Designer 15原理图设计基础
  8. go read text file into string array
  9. 修复完整运营版-苹果cms影视电影小程序源码
  10. 技术人必读:如何让自己成长为IT项目管理者
  11. 杭电计算机2011年硕士研究生笔试详解
  12. 谷歌浏览器无法携带cookie
  13. python mql4跟单_MT4软件本地跟单方法的实现 -
  14. 计算机电源性能怎么调,笔记本电脑如何将电源模式更改为高性能模式? -
  15. 伍斯特学院计算机专业排名,美国大学计算机专业排名!
  16. 2022年最新最全uniapp入门学习,零基础入门uniapp到实战项目,unicloud数据后台快速打造uniapp小程序项目
  17. 1:MTK 6737 Flash配置
  18. 元宇宙都市传说02:《头号玩家》的隐喻
  19. 【小5聊】代码管理工具之git等代码账号使用凭据管理器查看windows凭据
  20. 细说php作者高洛峰免费收徒

热门文章

  1. mysql5.7 mysqladmin_mysql5.7安装脚本中使用mysqladmin报错
  2. [分享]Win7 32位与64位/x86与x64的区别
  3. 【Linux系统】第一篇:基础指令篇
  4. 手机发烫是为何—— App 电量测试定位方法
  5. 没有人是一座孤岛丧钟为谁而鸣
  6. js保留小数点后两位(js 小数点后两位)
  7. 谈谈所谓直播签约费吧
  8. 中国的植被覆盖度数据获取方法
  9. nginx重启后重新连接提示连接失败
  10. 分析5万多场英雄联盟比赛,教你如何轻松用python预测胜负