腾讯 tars java_腾讯TARS开源团队郑苏波:腾讯微服务开发框架的源码剖析

郑苏波:大家下午好!我是腾讯微服务的郑苏波。先做一个框架的介绍,Tars是一个支持多语言内嵌服务治理功能的框槛,能跟DevOps比较好的协同开发。这个框架四大特点:

一是对用户透明实现,让业务可以聚焦自己的逻辑,不需要关心这个框架提供了哪些能力。

二是支持RPC的调用方式,使业务能快速开发。

三是高性能的实现。

四是丰富的扩展能力,适应不同业务场景。

下面我们会以一个比较简单的语言,NodeJS这个语言在TARS中的应用为我们介绍这个框架。先看一下例子,其中一个HD的Service,用户访问的时候会访问一段Hello Word,代码完全没有修改的情况给我们带来什么特性呢?首先是进程管理,它是使用NodeJS,负载均衡。服务限量重启,TARS自动检测异常退出并且自动拉起,这是被动探测,还支持我主动的加速检测。看一个主动加速检测的例子,下面是一个过滤,使用了一段比较垃圾的表达式的写法,一旦执行这个逻辑的时候,服务完全没有响应,用户只能手动重启这个服务。如果检测到这个服务呈现这种僵死的状态也会主动把服务的进程杀掉再起一个新的进程,这样保证服务的最大可用性,也就是我们经常说的在TARS内虽然没办法解决业务代码里面写的Bug,毕竟是业务代码里的逻辑问题,但我们会尽最大的可能保证服务的可用性,这是它的进程管理的一些特性。

再看一下服务监控,分调用监控和特性监控。调用监控有四个指标:总流量、平均耗时、超时耗和异常事。以主被调服务名、接口名为维度。HTTP服务接口名为URL-PATH。

特性监控也分四点:自动上报:内存、CPU、Libuv实性性能。各策略以平均值、最大值、最小值分节点统计。

下面这个图有一个明显的波峰和波谷,如果曲线越平滑代表访问流量越大,反之,这个地方我们需要优化关注它的基础服务质量。最下面这个是不存在波峰和波谷,也没有毛刺,这种东西是定时拉取的东西,需要关心持续的资源使用和客户的策略。

可以通过刚才的服务监控里面的总流量,就可以完全不用知道服务的名字,也不用问别人你这个服务的特性是什么,可以通过曲线明确知道这个服务的类型,服务优化的方向。

再看一下日志输出,会附加一些信息,比如日期、PID,最主要会自动添加文件名与符号,方便你去定位问题。上面讲的是完全没有修改的TARS层面的部署会有的这些特性。

可以再修改一下代码,能支持下面这些特性。比如可以支持大小滚动日志(文件总数、单文件大小),按时间滚动日志(间隔、文件名),用来做一些数据的统计。

服务配置:允许自定义文件名与内容,并可引用其它服务的文件,支持配置回滚和在线PUSH配置。可将静态页面以配置进行存储,以实现前后分离。

管理命令,可以设计日志等级,因为输出日志,可能在线上环境中,日志的输出是相当耗性能的一件事,这种情况下一般的日志级会受到一个最高的解决,只有异常的时候会打印出日志,但有一个额外的场景你需要去调试线上服务,看它到底在运行、支持什么样的代码,这个时候可以发出管理命令,从日志级别调整,这个时候可以看到当前正在运行哪些内容。当你调试完成之后可以继续设置日至为原来的,这个时候完全不需要重启。

第三点,可以自定义发送一些命令,并通过业务代码接收。这样比较方便去定位、查找一些问题。

刚才讲的是TARS,为大家在代码上提供的一些比较常用的特性。下面再和大家介绍一个TARS为大家提供的一个大型的异构系统解决方案。首先它定义了一套编解码。

关于编解码的大型的使用,光有编解码还不够,还需要有RPC调用的实施,支持两种模式,一种是客户端模式,二是服务端模式,可以调用到就近的节点。像我们最早说的还支持多种解码方式,并且也可以扩展一些其他的编解码方式,比如PB等。

这里TARS不仅是支持服务器的调用,还支持调用链的染色。标识出某一个特定需求的过程,染色状态会一直被传输下去,我们也叫染色日志。可以用染色日志定位一些特定的位置,也可以定一些特定的逻辑。比如用户ID是QQ号或者微信,到时候对ID进行染色,染色以后,后端的服务都会受到这个服务状态,并且把这次调用的处理过程打印出来,你可以非常方便的进行一些服务状态的调查。除了打印日志也可以执行特定的逻辑,比如对这个用户他是在白、灰、黑名单进行一些判断,甚至有一些调用关系。

接下来,给大家播放一个TARS的介绍视频。

(视频)

刚才这个视频也整体介绍了一下TARS的效果,大家还有什么问题吗?

提问:我想问一个不太专业的问题,这个TARS框架和腾讯云官网上提供的微服务框架TSF是什么关系?

郑苏波:其实我们也在腾讯云上有一个公有云项目,TSF跟我们目标是一致的,但我们能提供给大家的服务更全面一些,TSF可能只有一个微服务的概念,但我们除了微服务以外还有一些服务的监控、服务的配置,还有服务的日志的管理。

单志豪:我补充一下,主要区别是TARS是支持Java,是一个开源的项目,可以去下载,自己去用。后面也会提供公有云的方案,跟TSF是并行的项目。   单志豪:我补充一下,主要区别是TARS是支持Java,是一个开源的项目,可以去下载,自己去用。后面也会提供公有云的方案,跟TSF是并行的项目。

你可能感兴趣的:(腾讯,tars,java)