tns(thrift 分布式组件)介绍

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**

时间: 2024-10-22 01:57:12

tns(thrift 分布式组件)介绍的相关文章

Docker生态系统系列之一:常用组件介绍

本文讲的是Docker生态系统系列之一:常用组件介绍,[编者的话]本篇文章是介绍Docker生态系统的第一篇,不仅从概念上介绍了容器化.服务发现和全局配置存储.网络工具.调度.集群管理和编排这几部分内容,而且配以清晰易懂的例子进行讲解说明,非常值得读者称赞.Docker是现在使用最多的容器化软件.与其它已经存在的容器化系统相比,Docker可以更加简单的创建和管理容器,并与其它开源软件集成. 简介 容器化是一个以可移植和可预测的方式来部署分布式应用的过程,它会将应用组件以及依赖打包为一个标准.独

[置顶].NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究,所以今天以及接下去的几篇文章就专门介绍这个组件.不仅仅是它小,轻量级,优雅,而且一直在持续更新中.本人对这个感触很深是源于4年前自己在做一个数据过滤软件时,自己也设计了一套验证过滤的东西,虽然勉强能用,但太复杂了,复杂到我看到就想吐...指导我遇到了FluentValidation,彻底颠

《OpenStack实战》——1.4 OpenStack组件介绍

1.4 OpenStack组件介绍 1.1节介绍了OpenStack基本的功能,本节我们将会分析组成OpenStack框架的基本组件. 表1-1列举了多个OpenStack组件或核心项目.虽然还有更多现处在不同开发阶段的项目,但表1-1中所列的是OpenStack的基本组件.最新的OpenStack服务路线图可以在OpenStack路线图网页(www.openstack.org/software/roadmap/)中找到. 表1-1 核心项目 现在你应该了解了OpenStack及其作用,让我们快

.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

原文:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)     在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究,所以今天以及接下去的几篇文章就专门介绍这个组件.不仅仅是它小,轻量级,优雅,而且一直在持续更新中.本人对这个感触很深是源于4年前自己在做一个数据过滤软件时,自己也设计了一套验证过滤的东西,虽然勉强

详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)_实用技巧

前面介绍了六种.NET组件,其中有一种组件是写文件的压缩和解压,现在介绍另一种文件的解压缩组件SharpZipLib.在这个组件介绍系列中,只为简单的介绍组件的背景和简单的应用,读者在阅读时可以结合官网的相关介绍和在本地实际操作. 相关的组件功能非常强大,在笔者的介绍中只是提及到简单的应用,需要了解更多的操作和特性,可以根据官网介绍,或者查看DLL文件的相关类和方法,以此来扩展相关的业务需要. SharpZipLib是一个完全在C#中为.NET平台编写的Zip,GZip,Tar和BZip2库.

开源容器集群管理系统Kubernetes架构及组件介绍

Together we will ensure that Kubernetes is a strong and open container management framework for any application and in any environment, whether in a private, public or hybrid cloud. --Urs Hölzle, Google Kubernetes 作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的

ASP组件介绍—w3Sockets

这里主要介绍如何用该组件WHOIS域名,目前网上很多域名查询系统都是通过XMLHTTP获得其他网页数据,而获得记录.其实,我们完全可以通过w3Sockets自己来实现WHOIS的功能. 程序代码如下: Code: [Copy to clipboard] <% @ LANGUAGE=VBScript %><%Dim Domain,socketDomain = "91now" '这里以91now为例Set socket = Server.CreateObject( &qu

Java网页浏览器组件介绍

简介:使用 Java 开发客户端应用有时会需要使用到浏览器组件,本文将介绍在 Java 用户界面中使 用浏览器的四种方法,并且比较它们各自的优点与不足,便于 Java 开发者在实际开发过程中选择. 前言 在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或 者一个特定的网址.本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方 法的优点与不足,便于 Java 开发者在实际开发过程中根据自己的需要来选择. JDK 中的实现 -

J2EE技术中标准组件介绍大全

·Enterprise JavaBeans(EJB)技术使用一个组件模型来简化中间件应用程序的开发,它提供了对事务.安全性和数据库连接等服务的自动支持.(参见教程 "Enterprise JavaBean 基础":参见 EJB 最佳实践 系列:阅读 "使用 EJB 3.0 Java Persistence API 设计企业应用程序".) ·Portlet Specification 定义了一套用于 Java 门户计算的 API,可以解决聚合.个人化.表示和安全性方面