厉害了啊 ~腾讯竟然推出高性能 RPC 开发框架
Posted Java实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了厉害了啊 ~腾讯竟然推出高性能 RPC 开发框架相关的知识,希望对你有一定的参考价值。
对于科幻迷的程序员来说,Tars这名字是否有点耳熟,没错,这个腾讯出的RPC开发框架来自己于Tars协议的!
而名字灵感就是来于来自《星际穿越》电影中机器人Tars,在影片中Tars是一个非常友好机器人,而且对于未知的行星,都能高效率完成所有任务。
当然设计方面也是考虑到这层理念,所以把它打造成高性能、易用性,目标是运营效率更高,开发也不繁琐,业务逻辑也更加全面框架。
目前这框架在腾讯内部,有100多个业务、10多万台服务器上运行使用。
设计思路
Tars的设计思路是采用微服务的思想对服务进行治理,同时对系统的各个模块进行抽象分层,将各个层次之间相互解耦或者松耦合,如下图:
在底层协议层,设计思路是将业务网络通信的协议进行统一,以IDL(接口定义语言)的方式,开发支持多平台、可扩展、协议代码自动生成的统一协议。
在开发过程中,开发人员只需要关注通讯的协议字段的内容,不需要关注其实现的细节,很大方面减少了开发服务,需要考虑的能否跨平台使用,以及可能需要的兼容,以及是否需要拓展等问题。
中间的公共库、通讯框架、平台层,设计思路是让业务开发更加聚焦业务逻辑的本身。因此,从使用者的角度出发,封装了大量日常开发过程中经常使用的公共库代码和远程过程调用,让开发使用更方便简易;
从框架角度出发,让人感觉到稳定性、可用性、高性能,这样才能让业务服务运营更加放心;
整个架构
整体架构的拓扑图主要分为2部分:服务节点与公共框架节点。
第一服务节点:
服务节点认为是服务所实际运行的一个具体的操作系统实例,可以是物理主机或者虚拟主机、云主机。
Node服务节点会对业务服务节点统一的管理,监控等功能,还能接收到业务服务节点报过来的心跳。
第二 公共框架节点:
服务节点以外的服务,其他服务节点均归为一类。
公共框架节点,数量没那么缺德,为了自身的容错容灾,一般也要求在在多个机房的多个服务器上进行部署,具体的节点数量,与服务节点的规模有关。
在这小k给大家细分几个部分:
Web管理系统:在Web上看到服务运行的各种实时数据情况,以及对服务进行发布、启停、部署等操作;
Patch(发布管理):给服务提供发布功能;
Config(配置中心):给服务配置文件的统一管理功能;
Log(远程日志):给服务打日志到远程的功能;
Stat(调用统计):给统计业务服务上报的各种调用信息,类如总流量、平均耗时、方便在服务时候出现异常时进行告警;
Property(业务属性):给统计业务自定义上报的属性信息,类如内存使用大小、队列大小、方便对服务出现异常时进行告警;
Notify(异常信息):给统计业务上报的各种异常信息,类如服务状态变更信息、访问db失败信息等,方便对服务出现异常时进行告警;
实际方面要求全部的节点之间网络互通,每台机器的node能够与公共框架节点之间都是可以连通的。
特性是怎么样的
tars协议
tars协议采用接口描述语言(Interface description language,缩写IDL)来实现,它是二进制、可扩展、代码自动生成、支持多平台的协议,主要应用在后台服务之间的网络传输协议,以及对象的序列化和反序列化等方面。
协议支持的类型分两种,基本类型和复杂类型。
基本类型包括:void、bool、byte、short、int、long、float、double、string、unsigned byte、unsigned short、unsigned int;
复杂类型包括:enum、const、struct、vector、map,以及struct、vector、map的嵌套。
举个列子:
调用方法
以IDL语言协议,定义服务提供的接口,并自动生成客户端和服务端的相关通信代码,服务端只需实现业务逻辑即可对外提供服务,客户端通过自动生成的代码即可调用服务,调用方式支持三种模式:
同步调用:如客户端发出调用请求后等待服务返回结果后再继续逻辑;
异步调用:如客户端发出调用请求后继续其他业务逻辑,服务端返回结果又由回调处理类处理结果;
单向调用:如客户端发出调用请求后就结束调用,服务端不返回调用结果。
负载均衡
Client再根据需要选择合适的负载均衡方式来调用服务,负载均衡支持轮询、hash、权重等多种方式。
容错保护
容错保护通过两种方式实现:名字服务排除和Client主动屏蔽。
过载保护
为了防止业务因为访问量突增或服务器故障造成系统整体的繁忙,进而导致全部服务的不可用,框架内部做相应设计来应对。实现请求队列,服务调用通过非阻塞方式实现异步系统,从而达到提升系统处理能力的目的。
并且对队列的长度进行监控,当超过某个阀值,则拒绝新的请求。对请求设置超时时间,当请求包从队列里读取出来是判断请求是否超时,如果超时则不做处理。
消息染色
框架提供了对某服务某接口的特定请求进行染色的能力,染色的消息可以透传到后面需要访问的所有服务上,对染色的请求,服务自动把日志上报到特定的染色日志服务器上,使用者只需在染色服务器上即可分析请求访问的路径,方便跟踪定位问题。如下:
IDC分组
为了加快服务间的访问速度,减少跨地区、跨机房调用带来的网络资源消耗,减少网络故障带来的影响,框架提供了跨地区、跨机房,就近接入的功能。
SET分组
为了方便对业务服务部署管理进行标准化和容量化,框架提供了Set部署能力,set之间没有调用关系,互不干扰,故障隔离,提高运维效率和服务可用性。
数据监控
为了更好反映和监控小到服务进程、大到业务的运行质量情况,框架支持以下数据上报的功能:
提供了服务模块间调用信息统计上报的功能,方便用户查看服务的流量、延时、超时、异常等情况;
提供了用户自定义属性数据上报的功能,方便用户查看服务的某些维度或者指标,比如内存使用情况、队列大小、cache命中率等;
提供了服务状态变更和异常信息上报的功能,方便用户查看服务的何时发布过、重启过、宕过以及遇到的异常致命错误等;
集中配置
为了灵活管理配置文件,配置文件分为几个级别:应用配置、Set配置、服务配置和节点配置。
应用配置是最高一级的配置文件,它以各个服务配置提炼出来的公共配置,然后服务配置通过它来使用其配置内容。
Set配置是具体一个Set分组下所有服务的公共配置,在应用配置的基础上进行补充和追加方面。
服务配置是具体一个服务下所有节点的公共配置,可以引用应用配置。
节点配置是一个应用节点的个性化配置,它的服务配置合并成为具体一个服务节点的配置。
https://gitee.com/TarsCloud/Tars
扫描二维码
关注更多精彩
以上是关于厉害了啊 ~腾讯竟然推出高性能 RPC 开发框架的主要内容,如果未能解决你的问题,请参考以下文章