tns(thrift name server)是我在700Bike开发的一个thrift rpc分布式组件,可以实现高可靠、负载均衡、动态水平扩展等.

相比haproxy、zookeeper等有什么优势?我们知道网络程序唯一保证可靠的方式就是心跳包,同haproxy方式有什么区别,可以阅读wiki why

使用方式wiki上都有,这里简单说说tns cluster的特性,及设计结构。

cluster结构图

tns cluster 采用无中心化设计,也就是cluster中每个node都是均等的,在任一节点执行命令都等效,集群组件类似于redis,在节点上执行meet 即可,满足传递性,例如: 1 meet 2;2 meet 3 等效于1 meet 3; 1 meet 2

每个node均有一个ID,ID唯一,根据hostname+port生成,在集群中cluster按ID排序,组成一个环,如上图绿色环,其中ID较小的会负责检查比其稍大的ID的节点健康状态,并将自己知道的cluster list及健康状态和service list(不包含健康状态)传输到对方,实现集群信息同步,假如2节点Down了,1会标记2节点状态为down,并将自己的信息以后同步给3,因为2一旦down掉,是不可自动恢复的,只能手动恢复(重启2,并执行meet 重新上线).

如上,这种做法,一个节点有且仅有一个节点会同步信息给它,并且它也只同步信息给一个节点,集群增加节点不会增加单个node的压力。service list只会同步列表,不会同步service节点状态,避免1节点状态传递到6延迟比较高,每个tns节点自行维护service 状态,这样客户端不论从那个cluster node中同步service列表均比较实时。

tns内部结构图

如图,在nameserver中添加三个rpc server节点,service名称定义为drpc,每增加一个节点时,可以指定ping的周期,nameserver会定时调用drpc的ping方法,ping方法返回vNodes,含义为虚拟节点,用于客户端对请求负载均衡,另外nameserver也根据每次ping返回的vNodes值来判断service server是否可用,若vNodes<0,nameserver会标记service node为down,nameserver只会同步UP状态的service节点列表给客户端,增加或下线一个节点,一个周期后(客户端设定周期)也会被客户端同步到。

单个的vNodes没什么含义,在一个service下有多个node时才有含义,例如上图中drpc包含三个节点,并且每个节点vNodes分别为7、2、1,客户端负载均衡后,其中7/10的流量会流向node1,1/10会流向node3,从而实现负载均衡,客户端默认提供一个随机选择器,大家可以按自己的意愿自己实现。

线上不论是tns node还是service node均可随时增加或减少,从而实现水平动态可扩展。

详细使用帮助文档,朋友们可以参考thriftnameserver 的WIKI。


**jerry 于北京
2016-1-11**

tns(thrift 分布式组件)介绍相关推荐

  1. java hbase创建_hadoop组件介绍及python 连接Hbase

    Ambari Apache Ambari是一种基于Web的工具,支持Hadoop集群的供应.管理和监控.是Apache顶级开源项目之一,由Hortonworks公司开源. Ø 官方网站地址: http ...

  2. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  3. Adhesive框架系列文章--分布式组件客户端模块使用

    Memcached是一个很常见的分布式组件,现在有很多.NET下开源的Memcached组件的客户端实现,比如EnyimMemcachedClient.在Adhesive框架中实现了一个分布式组件客户 ...

  4. 07/08_flink shell,基本原理及应用场景、特点、架构图、集群解剖、JobManager、TaskManagers、tasks和操作链、Session/job集群、组件介绍等、应用场景

    1.7.Flink scala shell代码调试 1.7.1.Flink scala shell代码调试语法 1.8.Flink基本原理及应用场景 1.8.1.Flink特点 1.8.2.Flink ...

  5. [深度学习] 分布式Pytorch介绍(三)

    [深度学习] 分布式模式介绍(一) [深度学习] 分布式Tensorflow介绍(二) [深度学习] 分布式Pytorch介绍(三) [深度学习] 分布式Horovod介绍(四)  一  Pytorc ...

  6. 云小课|MRS基础原理之ClickHouse组件介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:在2016年开源的 ...

  7. 云小课 | MRS基础入门之HDFS组件介绍

    摘要:HDFS是MapReduce服务中的基础文件系统,全称为Hadoop的分布式文件系统(Hadoop Distributed File System),可支持实现大规模数据可靠的分布式读写. 本文 ...

  8. Spring Cloud中的分布式组件五花八门,我到底该怎么学?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/zwx900102/article/ details/121727985 分布式架构的演进 在软件行业,一个应用服务随着功能越来 ...

  9. RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

    RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件介绍 RDIFramework.net,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部 ...

最新文章

  1. 任正非最新讲话:华为专家队伍怎么建?
  2. 【MM】 基于收货的发票校验
  3. Everest 0.6 添加开机自启动程序
  4. 机械装备计算机控制技术考试题,武汉理工大学机电工程学院研究生课程考试试题(肖峻)...
  5. 响应式Bootstrap后台管理系统模板UI框架
  6. java opencv 之人脸识别
  7. 交换机TFTP配置备份
  8. TI DSP C64X 优化基本方法
  9. 张亚勤:天才少年的勇敢成长
  10. GEE|导出到google drive的文件太大,每次下载都中断的解决方法
  11. 华为手机坏了数据怎么导出_苹果手机的语音备忘录怎么导出来?
  12. 安卓和苹果对于https域名下的引用http域的文件
  13. 放不下的原理_想要彻底忘记一个人,明白“洛克定律”的真实原理就可以
  14. ul,ol,dl区别
  15. 【HTML 教程系列第 18 篇】详解什么是 HTML 中的表格 table
  16. html百度静态页面代码,静态百度页面_html/css_WEB-ITnose
  17. JavaSEDemo25Map
  18. 《惢客创业日记》2018.10.06(周六)同学会的礼物
  19. 无意中参加了infoQ的一期活动,获得了所有奖项,哈哈哈。。。
  20. (密码学实验)两种基本古典密码设计与实现—C语言—随机全排列应用

热门文章

  1. 修改ubuntu崩溃转储的设置
  2. php中单引号和双引号的区别,哪个速度更快?为什么?
  3. 从实例学习多态(Polymorphism [pɔli'mɔ:fizm])
  4. 检索数据表中重复的记录
  5. 大数据教程(9.1)流量汇总排序的mr实现
  6. 在java中使用redis
  7. mysql插入数据显示中文乱码
  8. 【内存泄露】Memory Leaks 内存优化
  9. haiyang457 原创软件安装包代表作集合电子书
  10. 如何解决XML文件中的警告提示“No grammar constraints (DTD or XML Schema) referenced in the document.”...