运维与微服务结合?深度解析微服务框架Tars整体解决方案

内容导航

  • 什么是Tars?
  • Tars框架源码部署
  • Tars服务部署管理
  • Tars配置中心
  • Tars服务发现
  • Tars远程日志
  • Tars状态监控

什么是Tars

Tars是一个支持多语言内嵌服务治理功能的框槛,能与 DevOps 比较好的协同开发。提供了包含开发、运维、以及测试的一整套解决方案。Tars集可扩展协议编解码、高性能 RPC 通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过Tars可快速用微服务的方式构建自己高可用的分布式应用,并实现完整有效的服务治理。总体来讲,Tars是一个跨平台、跨语言的软件运行环境,是基于service mesh设计理念实现的开发框架。

Tars框架源码部署

注:用CentOS7部署,CentOS6 需升级glic

部署环境

  • Docker环境安装
  • Mysql安装
  • Linux/Mac源码部署
  • Windows源码部署
  • TarsDocker部署
  • K8s Docker部署
  • TarsNode部署

依赖环境

软件

软件要求

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服务部署管理

  • 部署过程有生命周期完整的页面交互
  • 零配置或配置模板化,页面配置化操作执行文件,部署服务
  • 部署后可以在页面上进行验证,并在页面上查看服务的运行状态以及产生的日志,方便问题的排查上报
  • 版本管理页面直观可见,可以进行版本的升降级
  • VPN或公网网络互通后,可以实现远程部署
  • 部署过程无需技术背景,操作简单
  • 部署方案可以跨平台

服务发布架构实现

  • tars patch 组件将war包上传到 patch 目录 (/usr/local/app/patch/tars.upload/)
  • tars注册中心通知node拉取对应的包到本地
  • 启动对应的服务
  • 服务启动后web页面可以查看启动状态
  • 服务启动后web页面可以通过流式日志查看服务的启动日志.

灰度发布

Tars支持灰度发布,具体可查看下图

熔断策略

当客户端和服务端需要交互时,可在注册中心拉取路由。客户端从注册中心拉取到注册信息之后可以根据内部对服务的判断决定请求什么服务。

服务发布

  • 运维管理

服务部署

  • 模版管理

  • 发布管理

  • 服务管理

  • 框架检查

Tars服务发布与传统服务发布对比

对比项

Tars服务发布

传统服务发布

服务发布

页面可视化,傻瓜式操作

ssh远程登录,上传文件,脚本启 动服务

服务升级

页面上传war包,选择war包发布

与服务发布冋样流程,但要考虑历史文件的备份

服务降级

页面选择对应的版,发布

如果有备份文件,还原服务包文件, 脚本启动,没有备份文件,需要源码回滚打包上传,再通过脚本启动

需要技能

不需要

一定的运维经验,服务器操作, shell脚本的编写

集群发布

选择多个节点,发布

需要将包copy到对应的机器,重新启动服务

Tars配置中心

配置中心提供服务配置文件的统一管理功能。是实时更新配置文件、push配置文件到服务、服务主动pull配置文件的统一管理中心。主要包含以下优点:

  • 对业务配置进行集中管理并且提供操作页面,使配置修改更容易,通知更及时,配置变更也更安全;
  • 对配置变更进行历史记录,让配置可以轻松回退到前一版本。
  • 配置拉取简单,服务只需调用配置服务的接口即可获取到配置文件。
  • 能灵活管理配置文件,配置文件分为几个级别:应用配置、Set配置、服务配置和节点配置。

配置信息维护

tars框架通过两个数据表(存在mysq I中)来维护这些配置信息:t_config_file s和 t_config_references。

  1. t_config_files表的主要信息:服务配置文件名称、配置文件类型、配置文件所属服务名,配置文件所属set分组,配置文件所属节点ip以及配置文件的索引id值以及该服务所在set分组信息。
  2. t_config_references表的主要信息:配置文件的索引id以及该id所引用的配置文件索引id。

服务配置

tars web管理系统上添加配置、添加引用文件、 push 配置文件到服务。配置文件会被推到相应的目录下。

服务代码中pull配置文件到本地。

Tars服务发现

Tars协议采用接口描述语言(Interface description language,缩写 IDL)来实现,它是一种二进制、可扩展、代码自动生成、支持平台的协议,使得在不同平台上运行的对象和用不同语言编写的程序可以用RPC远程调用的方式相互通信交流,主要应用在后台服务之间的网络传输协议,以及对象的序列化和反序列化等方面。 注册中心主要涉及到三大角色: 服务提供者、服务消费者、注册中心 。

  • Tars通过名字服务来实现服务的注册与发现
  • Client通过访问名字服务获取到被调服务的地址信息列表
  • Client再根据需要选择合适的负载均衡方式来调用服务

数据结构

协议支持的类型分两种,基本类型和复杂类型。

  • 基本类型包括:void、bool、byte、short、int、long、float、double、string、unsigned byte、unsigned short、unsigned int。
  • 复杂类型包括:enum、const、struct、vector、map, 以及struct、vector、map的嵌套。

寻址方式

自动寻址: 客户端Endpoint注册表的缓存更新周期,主动方式(周期刷新一分钟,refreshEndpointInterval) 自动寻址用的负载均衡算法(包含多种)

直接寻址: 可以通过手动填写IP port实现直接寻址,调试特殊场景下使用

调用方式

通过IDL语言协议,可以定义服务提供的接口,并自动生成客户端和服务端的相关通信代码,服务端只需实现业务逻辑即可对外提供服务,客户端通过自动生成的代码即可调用服务,调用方式支持以下三种模式:

  • 同步调用:客户端发出调用请求后等待服务返回结果后再继续逻辑。
  • 异步调用:客户端发出调用请求后继续其他业务逻辑,服务端返回结果又由回调处理类 处理结果。
  • 单向调用:客户端发出调用请求后就结束调用,服务端不返回调用结果。

Tars文件定义结构演示

服务注册

Tars服务注册优点:

  • 简单易用:对开发者透明
  • 高可用:几台注册中心坏掉不会导致整个服务瘫痪,注册服务整体持续可用
  • 避免跨越机房调用:最好调用优先同一个机房的服务以减少网络延迟
  • 跨语言:允许开发者使用多种编程语言构建微服务
  • 负载均衡:负载均衡支持轮询、hash、权重等多种方式。
  • 容错保护:名字服务排除和Client主动屏蔽。

名字服务排除的策略:

业务服务主动上报心跳给名字服务,使名字服务知道服务部署的节点存活情况,当服务的某节点故障时,名字服务不在返回故障节点的地址给Client,达到排除故障节点的目标。名字服务排除故障需 要通过服务心跳和Clien地址列表拉取两个过程,故障排除时间在1分钟左右。

Client主动屏蔽:

为了更及时的屏蔽故障节点,Client根据调用被调服务的异常情况来判断是否有故障来更快进行故障屏蔽。具体策略是,当client调用某个svr出现调用连续超时,或者调用的超时比率超过一定百分比, client会对此svr进行屏蔽,让流量分发到正常的节点上去。对屏蔽的svr节点,每隔一定时间进行重连,如果正常,则进行正常的流量分发。

页面上手动上传进行的注册,注册到了 mysql.也可以通过Web API实现自动上传和部署

服务注册过程如下图所示:

服务发现过程如下图所示:

客户端实现原理

服务端实现原理

Tars调用链

在Tars管理平台上选中要开启调用链的服务,点击“编辑”

最终效果如下图所示:

点开单词调用链查看详细信息

Tars远程日志

Tarslog是Tars日志服务,基于Logback作为日志系统,用于将日志内容打到本地或远程服务器,并且支持服务内日志调用链路追踪以及日志染色。

Tarslog提供了十分灵活的配置项,可以为用户提供更加强大的日志功能。

Tars内置的远程日志功能是以logback插件的模式存在,只需将插件引入到logback配置文件即可,配置简单,并且可自定义日志打印到本地以及远程。

Tars日志模块可通过MDC实现服务内日志链路跟踪以及自定义日志染色。MDC内部持有一个ThreadLocal对象,其中存储了一个Map,因此用户可以根据需要向其中添加键值对。

Tars日志模块通过配置可支持高可用。

日志打印

流程如下图所示:

  1. 官网(https://github.com/TarsCloud/TarsJava)下载源码
  2. 通过mvn package 命令将 TarsJava 下的 tars-plugins 打成jar包
  3. 将打好的jar包放入到工程中。
  4. 配置logback文件,添加appender。如图配置
  5. 代码中通过 Logger logger = LoggerFactory. getLogger("root")获取Iogger对象。
  6. 通过logger.debug("message")打印日志,此时日志会打印到第四步附图中 logserverObjname配置的Iogserver中;

MDC服务内日志链路跟踪

  1. MDC内部持有一个ThreadLocal对象,在单个线程处理的请求链路中,通过 MDC. put(“traceId", value)设置调用链路 ID。
  2. 在logback配置文件中利用pattern获取traceld,如下图配置:。
  3. 此时单个请求链路中打印的所有日志已经包含第一步中MDC中put的traceId所对应的值。

MDC日志染色

  1. 通过实现 ForegroundCompositeConverterBase<ILoggingEvent> 接口封装染色 conversionRule。如下图所示:

  1. 配置logback.xml文件,增加conversionRule标签,指向第一步封装的染色conversionRule类,并在输出远端日志的Appender中使用此染色规则。如下图所示:

logback 整合 Kafka

方式1:手写Appender

  1. 引入Kafka jar包,导入到项目中。
  2. 手写Appender实现日志发送到Kafka。
  3. 配置logback.xml。

方式2:开源jar

具体请参考资料:https://github.com/danielwegener/logback-kafka-appender

  1. 引入开源jar包,导入到项目中。

</dependency>

<groupld>com.github.danielwegener</groupld>

<artifactld>logback-kafka-appender</artifactld>

<version>0.2.0</version>

<scope>runtime</scope>

</dependency>

  1. 配置logback.xml,配置kafkaAppender,以及kafka信息(host, topic等)。
  2. 把kafkaAppender放到日志输出。

<root level="lNFO"><appender-ref ref="kafkaAppender"/></root>

总结

  • 目前远程日志服务不支持跨服务日志链路追踪,需要zipkin实现链路追踪。Tars已经集成zipkin)
  • 可配置多台远程日志服务地址,实现咼可用。
  • 可基于Logback做功能的横向扩展。

Tars状态监控

为了更好反映和监控小到服务进程、大到业务的运行质量情况,框架支持以下数据上报的功能:

  • 提供了服务模块间调用信息统计上报的功能。方便用户查看服务的流量、延时、超时、异常等情况。
  • 提供了用户自定义属性数据上报的功能。方便用户查看服务的某些维度或者指标, 比如内存使用情况、队列大小、cache命中率等。
  • 提供了服务状态变更和异常信息上报的功能。方便用户查看服务的何时发布过、重启过、宕过以及遇到的异常致命错误等。

Tars统计信息

统计信息包含访问次数、耗时、异常和耗时。统计及聚合由各语言框架SDK提供,无论成功与否,框架 SDK都将会上报。

上报统计信息是向Tars框架内的tarsstat上报耗时信息和其他信息。无需用户开发,只需在程序初始化期间正确设置相关信息后,就可以在框架内自动报告。

客户端调用上报接口后,会暂时将信息存储在内存中,当到达某个时间点时,会向tarsstat服务上报(默认为1分钟上报一次)。两个上报时间点之间的时间间隔称为统计间隔,在统计间隔中会执行诸如聚合和比较相同key的一些操作。

Tars特性监控

特性监控上报的是服务脚本的自定义特性,它由特性名、特性值、以及统计方法构成,类似指标监控。每种语言SDK有默认的特性监控指标,比如 JAVA 默认包含 jvm.memory, jvm.gc 等。

也可以自定义拓展:

obj = property.create('name', [new property.POLICY.Count, new property.POLICY.Max]);

obj.report(value)

Tars服务监控

集群中所有机器都有Node服务用于管理应用,Node服务其中一个重要功能为服务监控。Node服务通过开启一个监控线程,负责定时(时间间隔可以配置)轮询监控Node所管理的所有服务的运行状态,并定时向主控上报服务的运行状态。

  • 应用服务SDK会定期上报心跳。
  • Node服务会定期检查SDK的心跳超时。
  • 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/

部分大屏案例:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Tars 上开发聊天机器人,需要按照以下步骤进行: 1. 准备工作:安装 Tars 并熟悉 Tars 的使用方法。 2. 构建模型:使用深度学习或其他机器学习技术构建一个聊天机器人模型。 3. 集成 Tars:将模型与 Tars 集成,使用 Tars 实现机器人的对话系统。 4. 对接客户端:通过 API 或其他方式与客户端对接,实现聊天机器人与客户端之间的交互。 5. 部署:在 Tars 集群上部署聊天机器人,并对其进行监控和维护。 希望这些步骤可以帮助你在 Tars 上开发一个聊天机器人。 ### 回答2: 在Tars上开发聊天机器人需要以下步骤: 1. 注册和登录:首先,我们需要在Tars的官方网站上注册一个账号并登录。 2. 创建项目:在登录后,我们可以创建一个新的项目并为此项目命名。一个项目可以包含一个或多个聊天机器人。 3. 设计对话流程:在项目中,我们需要设计聊天机器人的对话流程。这可以通过创建不同的意图和对应的回答来实现。可以使用Tars提供的可视化工具来快速创建对话流程。 4. 添加意图和回答:在对话流程中,我们需要添加不同的意图,每个意图对应用户可能提出的问题或需求。然后,为每个意图提供相应的回答。 5. 训练模型:在完成意图和回答的添加后,我们需要对模型进行训练,以便机器人能够更好地理解用户的问题并做出准确的回答。Tars提供了自动训练的功能,只需要点击按钮即可进行训练。 6. 测试和优化:训练完成后,我们可以进行一些测试来检查机器人的表现,并根据需要进行优化和调整。 7. 集成和部署:一旦机器人的性能达到预期,我们可以将其集成到我们的目标平台或应用程序中,并进行部署Tars提供了丰富的集成和部署选项,使我们可以轻松地将机器人应用到不同的场景中。 通过以上步骤,我们可以在Tars上开发出一个功能强大的聊天机器人,用于满足用户的各种需求。 ### 回答3: 在Tars上开发聊天机器人有以下几个步骤: 1. 注册和登录:首先,需要在Tars平台上注册一个账号并登录。登录后,可以进入控制台进行机器人的开发。 2. 创建机器人:在Tars控制台中,可以创建一个新的机器人项目。填写机器人名称、描述等基本信息,并选择合适的模板作为开发基础。 3. 配置机器人的行为:根据实际需要,对机器人进行配置。可以设置机器人的默认问候语、常用回答、对话流程等。也可以配置机器人的身份、语言、发音、样式等。 4. 开发对话逻辑:在Tars控制台的开发环境中,使用Tars提供的SDK和API,编写机器人的对话逻辑。可以使用图形化的界面进行流程设计,也可以使用代码进行复杂的逻辑开发。 5. 测试和优化:开发完成后,可以在Tars平台上进行机器人的测试和优化。通过与机器人进行交互,测试其对用户输入的理解和回答的准确性。根据测试结果,不断优化机器人的对话逻辑和回答效果。 6. 发布机器人:当机器人达到预期的效果后,可以将其发布出去供用户使用。可以生成机器人的访问链接或嵌入到自己的网站、APP等平台中。 总之,通过Tars平台的注册登录、机器人创建、配置行为、对话逻辑开发、测试优化和发布机器人等步骤,可以相对简单地实现聊天机器人的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值