文档章节

cap in tns

book
 book
发布于 2017/04/10 15:54
字数 1253
阅读 13
收藏 1
点赞 0
评论 0

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同步给下一个节点,并记录被同步节点的健康状态。

C1

一致性

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:

C2

cluster视角

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

client视角

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

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

目前tns-client采用方法2

分区容忍性

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

C3

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

© 著作权归作者所有

book

book

粉丝 42
博文 18
码字总数 15217
作品 2
海淀
高级程序员
【故障|监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe

【故障|监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到...

lhrbest ⋅ 2017/03/16 ⋅ 0

处理oracle没有监听器错误

在CMD中输入以下内容. Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:Documents and SettingsAdministrator>LSNRCTL LSNRCTL for 32-bit Windows: Versio......

西昆仑 ⋅ 2010/11/21 ⋅ 0

centos7更改机器名后oracle无法使用

1、更改机器名称  ~]# hostnamectl --static set-hostname oracle 2、 ~]# su - oracle Last login: Tue Apr 12 10:11:34 CST 2016 from 192.168.30.250 on pts/0 [oracle@oracledb ~]$ l......

lcpljc ⋅ 2016/04/12 ⋅ 0

ORA-12541: TNS:no listener 的详细解决方案

错误提示: ERROR: ORA-12541: TNS:no listener 错误原因: 1、本次错误是由于使用清理注册表造成的,故慎用Windows优化大师。 2、配置过ORACLE,请不要修改机器名称。 解决方案: 一、连接主...

鉴客 ⋅ 2012/07/23 ⋅ 0

问题标签用户 ORA-04030:在尝试分配8192字节(sort subheap,sort key)时进程内存不足

先来描述一下我的环境吧:window 32bit, oracle9i,session和process的数量在正常时100左右,OS内存以前是2G,现在加到了8G,系统在4月1号之前已经正常运行2年之久,没出过啥大问题,从4月1...

vincentqchow ⋅ 2014/04/29 ⋅ 2

监听启动问题

问题:启动监听时候报错 [oracle@CRM ~]$ lsnrctl start LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 04-3月 -2012 03:42:20 Copyright (c) 1991, 2005, Oracle. All rights re......

newguest110 ⋅ 2015/10/09 ⋅ 0

oracle 日志问题。

在$ORACLE_HOME/network/log监听日志中, WARNING: Subscription for node down event still pending 设置listener.org:SUBSCRIBEFORNODEDOWNEVENT_LISTENER=OFF Fatal NI connect error 1......

熊二哈 ⋅ 2011/07/15 ⋅ 0

NativeScript 1.2.1 发布,跨平台移动端开发

NativeScript 1.2.1 发布,主要是 bug 修复: (#575) Application crashes in Android when there is an ActionBar on the first page. (#576) app.css now applied when there is page-spec......

oschina ⋅ 2015/08/22 ⋅ 5

tns 3.0.1 发布,一个 thrift 分布式组件

tns 3.0.1 发布了,tns 是一个 thrift 分布式组件。 3.0.1更新内容如下: 增加console 增加example client发布到maven中央仓库,方便开发者使用 terminal中的console: HomePage:https://g...

book ⋅ 2017/04/06 ⋅ 0

/etc/hosts错误配置,导致TNS-12535

最近在虚拟机上安装好oracle11g,然后将网卡模式从host -only模式切换到 桥接模式,OK 网卡正常切换,IP也获取到了,但是忘记将/etc/hosts里面的文件修改回来,然后,看下面 [oracle@normal...

Vimeo ⋅ 2016/06/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HiSDP —— 高效的C++软件开发平台

目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的。 缘由 当决定采用C++编程语言去开发一个软件时,紧接着所面临...

阿里云云栖社区 ⋅ 21分钟前 ⋅ 0

zookeeper-3.4.12 下载与安装教程

一、zookeeper下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ 二、启动教程 把压缩包放在指定目录下 第三: 进入 conf文件夹底下 zoo_sample.cfg 文件名改成 zoo.cfg 第四步: 进入b...

泉天下 ⋅ 22分钟前 ⋅ 0

Oracle 中文日期转换

SELECT TO_date('2011年11月11日', 'yy"年"mm"月"dd"日"') FROM DUAL; 1. Oracle无法识别中文格式,所以添加双引号。 2. 后面的格式是指字符串在转换前的格式,而不是指转换后的格式。...

江戸川 ⋅ 24分钟前 ⋅ 0

MySell:API Spring Boot

起步 类目 商品 订单

BeanHo ⋅ 26分钟前 ⋅ 0

Spring方法拦截器MethodInterceptor

参考资料 1、Spring方法拦截器MethodInterceptor 2、Sharding JDBC源码分析-JdbcMethodInvocation类的作用

哎小艾 ⋅ 29分钟前 ⋅ 0

正则表达式

元字符 元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。 匹配字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 匹配...

wangchen1999 ⋅ 29分钟前 ⋅ 0

数据库数据导入Elasticsearch案例分享

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.案例对应的源码 https://gitee.com/bboss/bboss-elastic/blob/master/bboss-el...

bboss ⋅ 30分钟前 ⋅ 0

动手---sbt(2)

参考 https://blog.csdn.net/leishangwen/article/details/46225587 建立一个chisel_max目录,文件内容如后面所述,现在开始执行命令: joe@joe-Aspire-Z3730:/media/sdb4/download/scala$ c......

whoisliang ⋅ 37分钟前 ⋅ 0

纯js实现最简单的文件上传(后台使用MultipartFile)

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xhr......

孟飞阳 ⋅ 42分钟前 ⋅ 0

iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码

iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码、FMDB、键盘动态高度、定位等 动画...

sunnyaigd ⋅ 42分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部