Tars是将腾讯内部利用的微做事架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目。Tars这个名字来自星际穿越电影人机器人Tars,电影中Tars有着非常友好的交互办法,任何初次打仗它的人都可以轻松的和它进行互换,同时能在外太空、外星等繁芜地形上,超预期的高效率的完成请托的所有任务。拥有着类似设计理念的Tars也是一个兼顾易用性、高性能、做事管理的框架,目的是让开发更大略,聚焦业务逻辑,让运营更高效,统统尽在节制。
目前该框架在腾讯内部,有100多个业务、1.6多万台做事器上运行利用。
Tars的设计思路是采取微做事的思想对做事进行管理,同时对全体系统的各个模块进行抽象分层,将各个层次之间相互解耦或者松耦合,如下图:

最底的协议层,设计思路是将业务网络通信的协议进行统一,以IDL(接口定义措辞)的办法,开拓支持多平台、可扩展、协议代码自动天生的统一协议。在开拓过程中,开拓职员只须要关注通讯的协议字段的内容,不须要关注实在现的细节,大大减轻了开拓做事时须要考虑的协议是否能跨平台利用、是否可能须要兼容、扩展等问题。
中间的公共库、通讯框架、平台层,设计思路是让业务开拓更加聚焦业务逻辑的本身。因此,从利用者的角度出发,封装了大量日常开拓过程中常常利用的公共库代码和远程过程调用,让开发利用更大略方便;从框架本身的角度出发,做到高稳定性、高可用性、高性能,这样才能让业务做事运营更加放心;从分布式平台的角度出发,办理做事运营过程中,碰着的容错、负载均衡、容量管理、就近接入、灰度发布等问题,让平台更加强大。
最上面的运营层,设计思路是让运维只须要关注日常的做事支配、发布、配置、监控、调度管理等操作。
3. 整体架构3.1. 架构拓扑图
整体架构的拓扑图紧张分为2个部分:做事节点与公共框架节点。
做事节点:
做事节点可以认为是做事所实际运行的一个详细的操作系统实例,可以是物理主机或者虚拟主机、云主机。随着做事的种类扩展和规模扩大,做事节点可能成千上万乃至数以十万计。每台做事节点上均有一个Node做事节点和N(N>=0)个业务做事节点,Node做事节点会对业务做事节点进行统一管理,供应启停、发布、监控等功能,同时吸收业务做事节点上报过来的心跳。
公共框架节点:
除了做事节点以外的做事,其他做事节点均归为一类。
公共框架节点,数量不定,为了自身的容错容灾,一样平常也哀求在在多个机房的多个做事器上进行支配,详细的节点数量,与做事节点的规模有关,比如,如果某些做事须要打较多的日志,就须要支配更多的日志做事节点。
又可细分为如下几个部分:
Web管理系统:在Web上可以看到做事运行的各种实时数据情形,以及对做事进行发布、启停、支配等操作;
Registry(路由+管理做事):供应做事节点的地址查询、发布、启停、管理等操作,以及对做事上报心跳的管理,通过它实现做事的注册与创造;
Patch(发布管理):供应做事的发布功能;
Config(配置中央):供应做事配置文件的统一管理功能;
Log(远程日志):供应做事打日志到远程的功能;
Stat(调用统计):统计业务做事上报的各种调用信息,比如总流量、均匀耗时、超时率等,以便对做事涌现非常时进行告警;
Property(业务属性):统计业务自定义上报的属性信息,比如内存利用大小、行列步队大小、cache命中率等,以便对做事涌现非常时进行告警;
Notify(非常信息):统计业务上报的各种非常信息,比如做事状态变跟信息、访问db失落败信息等,以便对做事涌现非常时进行告警;
原则上哀求全部的节点之间网络互通,至少每台机器的node能够与公共框架节点之间都是可以连通的。
3.2. 做事交互流程图
框架做事在全体系统中运行时,做事之间的交互分:业务做事之间的交互、业务做事与框架根本做事之间的交互。
做事发布流程:在Web系统上传server的发布包到patch,上传成功后,在web上提交发布server要求,由registry做事传达到node,然后node拉取server的发布包到本地,拉起server做事。
管理命令流程:Web系统上的可以提交管理server做事命令要求,由registry做事传达到node做事,然后由node向server发送管理命令。
心跳上报流程:server做事运行后,会定期上报心跳到node,node然后把做事心跳信息上报到registry做事,由registry进行统一管理。
信息上报流程:server做事运行后,会定期上报统计信息到stat,打印远程日志到log,定期上报属性信息到property、上报非常信息到notify、从config拉取做事配置信息。
Client访问Server流程:client可以通过server的工具名Obj间接访问server,Client会从registry上拉取server的路由信息(如ip、port信息),然后根据详细的业务特性(同步或者异步,tcp或者udp办法)访问server(当然client也可以通过ip/port直接访问server)。
3.3. web管理系统
web管理系统紧张包含以下功能:
业务管理:包括已支配的做事,以及做事管理、发布管理、做事配置、做事监控、特性监控等;运维管理:包括做事支配、扩容、模版管理等;3.4. 做事构造图
框架核心的做事端与客户端实现构造图如下:
做事端:
NetThread: 收发包,连接管理,多线程(可配置),采取epoll ET触发实现,支持tcp/udp;
BindAdapter: 绑定端口类,用于管理servent对应的绑定端口的信息操作;
ServantHandle:业务线程类,根据工具名分派Servant的工具和接口调用;
AdminServant: 管理端口的工具;
ServantImp: 继续Servant的业务处理基类(Servent:做事端接口工具的基类);
客户端:
NetThread: 收发包,连接管理,多线程(可配置),采取epoll ET触发实现,支持tcp/udp;
AdapterProxy: 详细做事器某个节点确当地代理,管理到做事器的连接,以及要求超时处理;
ObjectProxy: 远程工具代理,卖力路由分发、负载均衡、容错,支持轮询/hash/权重;
ServantProxy: 远程工具调用确当地代理,支持同步/异步/单向,Tars协议和非Tars协议;
AsyncThread: 异步要求的回应包处理线程;
Callback: 详细业务Callback的处理基类工具;
4. 平台特性4.1. tars协议
tars协议采取接口描述措辞(Interface description language,缩写IDL)来实现,它是一种二进制、可扩展、代码自动天生、支持多平台的协议,使得在不同平台上运行的工具和用不同措辞编写的程序可以用PRC远程调用的办法相互通信互换,紧张运用在后台做事之间的网络传输协议,以及工具的序列化和反序列化等方面。
协议支持的类型分两种,基本类型和繁芜类型。
基本类型包括:void、bool、byte、short、int、long、float、double、string、unsigned byte、unsigned short、unsigned int;
繁芜类型包括:enum、const、struct、vector、map,以及struct、vector、map的嵌套。
例如:
4.2. 调用办法
通过IDL措辞协议,可以定义做事供应的接口,并自动天生客户端和做事真个干系通信代码,做事端只需实现业务逻辑即可对外供应做事,客户端通过自动天生的代码即可调用做事,调用办法支持三种模式:
同步调用:客户端发出调用要求后等待做事返回结果后再连续逻辑;
异步调用:客户端发出调用要求后连续其他业务逻辑,做事端返回结果又由回调处理类处理结果;
单向调用:客户端发出调用要求后就结束调用,做事端不返回调用结果;
4.3. 负载均衡
框架通过名字做事来实现做事的注册与创造,Client通过访问名字做事获取到被调做事的地址信息列表,Client再根据须要选择得当的负载均衡办法来调用做事,
负载均衡支持轮询、hash、权重等多种办法。
4.4. 容错保护
容错保护通过两种办法实现:名字做事打消和Client主动屏蔽。
名字做事打消的策略:
业务做事主动上报心跳给名字做事,使名字做事知道做事支配的节点存活情形,当做事的某节点故障时,名字做事不在返回故障节点的地址给Client,达到打消故障节点的目标。名字做事打消故障须要通过做事心跳和Client地址列表拉取两个过程,故障打消韶光在1分钟旁边
Client主动屏蔽:
为了更及时的屏蔽故障节点,Client根据调用被调做事的非常情形来判断是否有故障来更快进行故障屏蔽。详细策略是,当client调用某个svr涌现调用连续超时,或者调用的超时比率超过一定百分比,client会对此svr进行屏蔽,让流量分发到正常的节点上去。对屏蔽的svr节点,每隔一定韶光进行重连,如果正常,则进行正常的流量分发。
4.5. 过载保护
为了防止业务由于访问量突增或做事器故障造成系统整体的繁忙,进而导致全部做事的不可用,框架内部做相应设计来应对。实现要求行列步队,做事调用通过非壅塞办法实现异步系统,从而达到提升系统处理能力的目的。并且对行列步队的长度进行监控,当超过某个阀值,则谢绝新的要求。对要求设置超时时间,当要求包从行列步队里读取出来是判断要求是否超时,如果超时则不做处理。
4.6. 染色
框架供应了对某做事某接口的特定要求进行染色的能力,染色的可以透传到后面须要访问的所有做事上,对染色的要求,做事自动把日志上报到特定的染色日志做事器上,利用者只需在染色做事器上即可剖析要求访问的路径,方便跟踪定位问题。如下:
4.7. IDC分组
为了加快做事间的访问速率,培植跨地区、跨机房调用带来的网络资源花费,减少网络故障带来的影响,框架供应了跨地区、跨机房,就近接入的功能。
详细先容拜会docs目录下的tars_idc_set.md
4.8. SET分组
为了方便对业务做事支配管理进行标准化和容量化,框架供应了Set支配能力,set之间没有调用关系,互不滋扰,故障隔离,提高运维效率和做事可用性。
详细先容拜会docs目录下的tars_idc_set.md
4.9. 数据监控
为了更好反响和监控小到做事进程、大到业务的运行质量情形,框架支持以下数据上报的功能:
1.供应了做事模块间调用信息统计上报的功能,方便用户查看做事的流量、延时、超时、非常等情形;
2.供应了用户自定义属性数据上报的功能,方便用户查看做事的某些纬度或者指标,比如内存利用情形、行列步队大小、cache命中率等;
3.供应了做事状态变更和非常信息上报的功能,方便用户查看做事的何时发布过、重启过、宕过以及碰着的非常致命缺点等;
4.10. 集中配置
对业务配置进行集中管理并且操作web化,使配置修正更随意马虎,关照更及时,配置变更也更安全;对配置变更进行历史记录,让配置可以轻松回退到前一版本。配置拉取做事化,做事只需调用配置做事的接口即可获取到配置文件。
为了能灵巧管理配置文件,配置文件分为几个级别:运用配置、Set配置、做事配置和节点配置。
运用配置为最高一级的配置文件,它是多个做事配置提炼出来的公共配置,做事配置通过引用它来利用其配置内容。
Set配置是详细一个Set分组下所有做事的公共配置,在运用配置的根本上进行补充追加。
做事配置是详细一个做事下所有节点的公共配置,可以引用运用配置。
节点配置是一个运用节点的个性化配置,它和做事配置合并成为详细一个做事节点的配置。
详细先容可以拜会docs目录下的tars_config.md