内容导航
- 什么是Tars?
- Tars框架源码部署
- Tars服务部署管理
- Tars配置中心
- Tars服务发现
- Tars远程日志
- Tars状态监控
Tars是一个支持多语言内嵌服务治理功能的框槛,能与 DevOps 比较好的协同开发。提供了包含开发、运维、以及测试的一整套解决方案。Tars集可扩展协议编解码、高性能 RPC 通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过Tars可快速用微服务的方式构建自己高可用的分布式应用,并实现完整有效的服务治理。总体来讲,Tars是一个跨平台、跨语言的软件运行环境,是基于service mesh设计理念实现的开发框架。
注:用CentOS7部署,CentOS6 需升级glic
软件 |
软件要求 |
linux内核版本 |
2.6.18及以上版本(操作系统依赖) |
gcc版本 |
4.8.2及以上版本、glibc-devel(C++语言框架依赖) |
bison工具版本 |
2.5及以上版本(C++语言框架依赖) |
flexl具版本 |
2.5及以上版本(C++语言框架依赖) |
cmake版本 |
3.2及以上版本(C++语言框架依赖) |
mysql版本 |
4.1.17及以上版本(框架运行依赖) |
nvm版本 |
0.35.1及以上版本(web管理系统依赖,脚本安装过程中自动安装) |
node版本 |
12.13.0及以上版本(web管理系统依赖,脚本安装过程中自动安装) |
Tars支持灰度发布,具体可查看下图
当客户端和服务端需要交互时,可在注册中心拉取路由。客户端从注册中心拉取到注册信息之后可以根据内部对服务的判断决定请求什么服务。
对比项 |
Tars服务发布 |
传统服务发布 |
服务发布 |
页面可视化,傻瓜式操作 |
ssh远程登录,上传文件,脚本启 动服务 |
服务升级 |
页面上传war包,选择war包发布 |
与服务发布冋样流程,但要考虑历史文件的备份 |
服务降级 |
页面选择对应的版,发布 |
如果有备份文件,还原服务包文件, 脚本启动,没有备份文件,需要源码回滚打包上传,再通过脚本启动 |
需要技能 |
不需要 |
一定的运维经验,服务器操作, shell脚本的编写 |
集群发布 |
选择多个节点,发布 |
需要将包copy到对应的机器,重新启动服务 |
配置中心提供服务配置文件的统一管理功能。是实时更新配置文件、push配置文件到服务、服务主动pull配置文件的统一管理中心。主要包含以下优点:
tars框架通过两个数据表(存在mysq I中)来维护这些配置信息:t_config_file s和 t_config_references。
tars web管理系统上添加配置、添加引用文件、 push 配置文件到服务。配置文件会被推到相应的目录下。
服务代码中pull配置文件到本地。
Tars协议采用接口描述语言(Interface description language,缩写 IDL)来实现,它是一种二进制、可扩展、代码自动生成、支持平台的协议,使得在不同平台上运行的对象和用不同语言编写的程序可以用RPC远程调用的方式相互通信交流,主要应用在后台服务之间的网络传输协议,以及对象的序列化和反序列化等方面。 注册中心主要涉及到三大角色: 服务提供者、服务消费者、注册中心 。
协议支持的类型分两种,基本类型和复杂类型。
自动寻址: 客户端Endpoint注册表的缓存更新周期,主动方式(周期刷新一分钟,refreshEndpointInterval) 自动寻址用的负载均衡算法(包含多种)
直接寻址: 可以通过手动填写IP port实现直接寻址,调试特殊场景下使用
通过IDL语言协议,可以定义服务提供的接口,并自动生成客户端和服务端的相关通信代码,服务端只需实现业务逻辑即可对外提供服务,客户端通过自动生成的代码即可调用服务,调用方式支持以下三种模式:
Tars文件定义结构演示
Tars服务注册优点:
名字服务排除的策略:
业务服务主动上报心跳给名字服务,使名字服务知道服务部署的节点存活情况,当服务的某节点故障时,名字服务不在返回故障节点的地址给Client,达到排除故障节点的目标。名字服务排除故障需 要通过服务心跳和Clien地址列表拉取两个过程,故障排除时间在1分钟左右。
Client主动屏蔽:
为了更及时的屏蔽故障节点,Client根据调用被调服务的异常情况来判断是否有故障来更快进行故障屏蔽。具体策略是,当client调用某个svr出现调用连续超时,或者调用的超时比率超过一定百分比, client会对此svr进行屏蔽,让流量分发到正常的节点上去。对屏蔽的svr节点,每隔一定时间进行重连,如果正常,则进行正常的流量分发。
页面上手动上传进行的注册,注册到了 mysql.也可以通过Web API实现自动上传和部署
服务注册过程如下图所示:
服务发现过程如下图所示:
在Tars管理平台上选中要开启调用链的服务,点击“编辑”
最终效果如下图所示:
点开单词调用链查看详细信息
Tarslog是Tars日志服务,基于Logback作为日志系统,用于将日志内容打到本地或远程服务器,并且支持服务内日志调用链路追踪以及日志染色。
Tarslog提供了十分灵活的配置项,可以为用户提供更加强大的日志功能。
Tars内置的远程日志功能是以logback插件的模式存在,只需将插件引入到logback配置文件即可,配置简单,并且可自定义日志打印到本地以及远程。
Tars日志模块可通过MDC实现服务内日志链路跟踪以及自定义日志染色。MDC内部持有一个ThreadLocal对象,其中存储了一个Map,因此用户可以根据需要向其中添加键值对。
Tars日志模块通过配置可支持高可用。
流程如下图所示:
具体请参考资料:https://github.com/danielwegener/logback-kafka-appender
为了更好反映和监控小到服务进程、大到业务的运行质量情况,框架支持以下数据上报的功能:
统计信息包含访问次数、耗时、异常和耗时。统计及聚合由各语言框架SDK提供,无论成功与否,框架 SDK都将会上报。
上报统计信息是向Tars框架内的tarsstat上报耗时信息和其他信息。无需用户开发,只需在程序初始化期间正确设置相关信息后,就可以在框架内自动报告。
客户端调用上报接口后,会暂时将信息存储在内存中,当到达某个时间点时,会向tarsstat服务上报(默认为1分钟上报一次)。两个上报时间点之间的时间间隔称为统计间隔,在统计间隔中会执行诸如聚合和比较相同key的一些操作。
特性监控上报的是服务脚本的自定义特性,它由特性名、特性值、以及统计方法构成,类似指标监控。每种语言SDK有默认的特性监控指标,比如 JAVA 默认包含 jvm.memory, jvm.gc 等。
也可以自定义拓展:
obj = property.create('name', [new property.POLICY.Count, new property.POLICY.Max]);
obj.report(value)
集群中所有机器都有Node服务用于管理应用,Node服务其中一个重要功能为服务监控。Node服务通过开启一个监控线程,负责定时(时间间隔可以配置)轮询监控Node所管理的所有服务的运行状态,并定时向主控上报服务的运行状态。
近年来,在AIOps领域快速发展的背景下,IT工具、平台能力、解决方案、AI场景及可用数据集的迫切需求在各行业迸发。基于此,云智慧在2021年8月发布了AIOps社区,旨在树起一面开源旗帜,为各行业客户、用户、研究者和开发者们构建活跃的用户及开发者社区,共同贡献及解决行业难题、促进该领域技术发展。
社区先后开源了数据可视化编排平台-FlyFish、运维管理平台OMP、云服务管理平台-摩尔平台、Hours算法等产品。
可视化编排平台-FlyFish:
项目介绍:https://www.cloudwise.ai/flyFish.html
Github地址: https://github.com/CloudWise-OpenSource/FlyFish
Gitee地址: https://gitee.com/CloudWise/fly-fish
行业案例:https://www.bilibili.com/video/BV1z44y1n77Y/
部分大屏案例: