tns (thrift nameserver) provides distributed solutions for thrift, support find services, high availability, load balancing, the gray release, horizontal scaling, and so on.

cap

C:一致性
A:可用性
P:分区容忍性

Architecture in tns

集群采用无中心化设计,按节点ID排序并顺时针组成一个环,如图C1,节点按固定频率将其知道的cluster list、status和service list同步给下一个节点,并记录被同步节点的健康状态。

一致性

cluster视角

在tns中,不可变约束包括cluster node列表、cluster node健康状态、service node 列表。

tns 针对以上不可变约束满足最终一致性

增加node(cluster、service)

假设数据同步周期为T,链接某个cluster node并增加一个node(cluster、service),在最长T周期后数据会被同步给下个节点,以此类推,假设集群节点数为N,最终一致时间最长为(N-1)T

移除node(service)

tns目前只支持移除service node,对于cluster node的移除功能暂不支持。

对于移除service node,tns需要经历两个阶段:Leaving阶段和Tombstone阶段

  • Leaving阶段

    • 被移除的service node会被立即变更状态为Leaving,并取消对应的ping任务
    • 在周期T内,状态会被传输到下个节点
    • 最终在(N-1)T内,状态会被传输到所有节点
  • Tombstone阶段

    • tns中有一Tombstone任务,每隔10分钟运行一次
    • 每次运行检查service node状态

      • 若状态为Leaving,将状态变更为Tombstone
      • 若状态为Tombstone,直接移除
  • 处于Leaving状态的节点仍会同步给其它节点;处于Tombstone状态的节点不会同步给其它节点;这两种状态均不接受状态更新;

为什么是10分钟?

保证Leaving状态广播到整个集群;保证在真正移除前,集群所有节点处于Tombstone状态。

假设时间比较短,处于Leaving状态的service node,可能还没来得及广播给整个集群,状态即被变更为Tombstone,处于此状态的数据不会进行同步,最终导致集群某个节点没收到移除通知;另外,处于Tombstone状态的service node,节点一旦被执行移除,其上一个节点待移除数据可能处于Leaving甚至是UP状态,数据可能会被同步回来,最终导致集群出现错误。

tns中,同步的周期被设置为5秒,数据广播到所有节点的最长时间为5(N-1),所以理论上集群节点数量N可以达到120个,结合tns的负载特点,基本不会用到这么多节点

client视角

目前版本客户端不考虑一致性问题,未来可能会增加单调读一致性,但需求不大

tns-client会定时从cluster同步数据,在这个周期内,可能会出现数据不一致。例如某时刻一个service node被移除或已经down 掉,并且未及时被tns-client同步过来,可能会导致client使用一个错误的service node来之行业务,拒绝链接等等,在tns-client中提供了brokenNode接口来移除一个故障节点

可用性

故障检测

tns采用增量故障检测算法来检测集群故障。

一个Up节点单次故障不会被立即标记为Down,而是被标记为Down_1,如果Down_1节点下次检测仍是故障,则会被标记为Down_2,如果Down_2节点下次检测仍是故障,则会被标记为Down,此后不会在对该节点之行故障检测。如图C2:

cluster视角

tns中,集群节点数量N>0即可写。

client视角

tns中,集群节点数量N>0即可读,同时因为tns是一个最终一致性的系统,节点的down机,会在(N-1)T内广播到整个集群,同时tns-client定时从某个cluster node同步数据也是定时操作,所以同步时某个节点可能不可用,此种情况可以采取两种措施:

  1. 换个节点立即重试
  2. 等待下一个同步周期(选择到一个健康节点)

目前tns-client采用方法2

分区容忍性

一般认为在同一个机房不会出现分区,在跨机房场景中会出现分区现象;同时在同机房内节点的上下线也被认为是特殊的分区。如图C3:

tns不满足跨机房的分区容忍性,如果跨机房部署,出现分区情况,在没有人为增加、移除节点的情况下没有问题,tns中节点的增加、移除操作均为人工操作,所以这样部署问题也不大,只要在操作前检查下集群状态即可,操作后检查下结果是否已经被广播到整个集群。

CAP in tns相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. MAP/CAP信令常见消息

    SRI(MAP):Sending Routing Information,请求路由信息. MSC根据MS发起呼叫携带的MSISDN(被叫号码)向被叫MS归属HLR查询用户当前的路由信息.该消息通常包含 ...

  3. Go 学习笔记(11)— 切片定义、切片初始化、数组和切片差异、字符串和切片转换、len()、cap()、空 nil 切片、append()、copy() 函数、删除切片元素

    1. 切片定义 Go 语言切片是对数组的抽象. Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容 ...

  4. oracle rac ora 12537,解决11gR2 Rac ORA-12537: TNS:connection closed 一例

    Solaris 10, oracle 11.2.0.3, RAC, 非ASM, 使用SCAN和DNS 状况: # tnsping ISUITE TNS Ping Utility for Solaris ...

  5. cap mysql_.NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法

    问题还原 引用了 DotNetCore.CAP.MySql MySql.Data.EntityFrameworkCore 在使用MySql相关对象的时候会出现如下冲突,在命名空间加入伪空间名称是不能解 ...

  6. 谈谈对数据库中ACID、CAP、BASE的认识

    2019独角兽企业重金招聘Python工程师标准>>> ACID.CAP.BASE的区别与联系 这得从关系型数据库关系型数据库(RDBMS)和非关系型数据库(NoSQL)说起. RD ...

  7. 【GoLang】深入理解slice len cap什么算法? 参数传递有啥蹊跷?

    先上结论 1.内置append函数在现有数组的长度 < 1024 时 cap 增长是翻倍的,再往上的增长率则是 1.25,至于为何后面会说. 2.Go语言中channel,slice,map这三 ...

  8. ZooKeeper和CAP理论及一致性原则

    ZooKeeper和CAP理论及一致性原则 一.CAP理论概述 CAP理论告诉我们,一个分布式系统不可能同时满足以下三种 一致性(C:Consistency) 可用性(A:Available) 分区容 ...

  9. cap理论与分布式事务的解决方案

    现在很火的微服务架构所设计的系统是分布式系统.分布式系统有一个著名的CAP理论,即一个分布式系统要同时满足一致性(Consistency).可用性(Availablility)和分区容错(Partit ...

最新文章

  1. java+flash在线拍照和编辑,保存到服务器(Spring3.2.2+swf+jquery)
  2. 掌握 React 与 React Native
  3. EOSIO:EOSIO最新版1.4.0创建测试账户
  4. 常见的反爬虫和应对方法 (转)
  5. 老毛子Padavan网段LAN修改
  6. 马尔科夫随机场 matlab,matlab马尔可夫随机场
  7. StretchDIBits 函数
  8. r7000屏幕亮度linux,联想legion R7000笔记本linux使用体验
  9. 语音识别工具Sphinx4
  10. 微信小程序 身份证号码验证 15/18位身份证号码验证的正则表达式总结(详细版)
  11. Not Adjacent Matrix、Same Differences、Arranging The Sheep
  12. SendGrid -- Stressful Subject
  13. 爬虫实战(一)-新版知乎网页分析获取登录url
  14. App Store 审核指南 2017-12-13
  15. 5款OCR文字识别软件推荐_分享好用的OCR(图片转文字)工具
  16. 第二章:恶意软件动态分析基础
  17. 2015年校招求职之旅
  18. 专升本管理学知识点总结——组织
  19. php gd库 圆形头像,基于 GD 库生成圆形头像
  20. iOS触摸屏幕后发生了什么

热门文章

  1. 14.关于原子性的相关介绍
  2. Linux: debian/ubuntu下安装Neo4j
  3. eplices如何导入外部代码_java环境配置的理解
  4. 宇通客车java_6米采血车
  5. SpringBoot获取请求的参数
  6. linux 邮件中继转发,linux – 如何使sendmail中继本地邮件?
  7. 信鸽 ios tag推送 php,iOS 关于信鸽推送点击推送通知的处理
  8. linux存储实用程序,技术|使用 Linux 实用程序 gPhoto2 备份手机存储
  9. Android图片颜色比例,Android开发学习之路-图片颜色获取器开发(1)
  10. 云端服务器如何调整分机显示,云电话总机分机设置_Enjoytalk云通信