Tars 微服务架构分析及应用实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. Tars微服务框架能力分析及应用实践
利开园
腾讯 高级工程师 2021.11.13
2. •
Content Title 1
3. 工作经历
腾讯Docker容器平台和TarsGo框架开发
Tars服务的基础运行环境和运营平台,负责
TarsGo部分核心模块的开发
腾讯云开发业务后台开发
作为TarsGo的深度使用者,实现并维护
Tars+K8s的方案
腾讯CSIG研发效能
关注云原生DevOps解决方案,负责研发效能的
标准化建设
4. 主要内容
01 Tars微服务架构能力分析
02 Tars框架主要技术亮点和实现方案
分析业务开源微服务解决方案,整体介绍Tars微服务框架的功能模块及其特性
探讨Tars框架主要技术实现细节和应用场景
03
Tars云原生演进与应用实践
介绍在云原生背景下Tars与K8s的整合方案以及在真实业务中的应用过程
5. 开源微服务框架现状
无服务治理类
单语言带服务治理
专注于通信框架,RPC或消息队列模式,
部分框架支持多语言开发
在通信框架的基础上支持服务治理能力,
单一编程语言实现,JAVA语言为主流
服务网格
多语言带服务治理
支持服务治理,通过SideCar模式解决
多语言问题,使用成本比较高
在通信框架的基础上支持服务治理能力,
多种编程语言实现
6. 开源微服务框架能力分析
对比项 Tars 网络协议 UDP/TCP/HTTP2/
自定义 HTTP2 TCP/HTTP/自定义 Tars默认提供UDP/TCP支持,Dubbo支持TCP/HTTP等,
gRPC只支持HTTP2
IDL Tars/PB/自定义 PB 无 IDL本身思路差不多,Tars可以设置字段默认值
多语言 支持 支持 少量支持 gRPC/Tars都支持多语言开发,Dubbo最主要支持Java
RPC性能 非常高 一般 高 经过测试,Tars性能高gRPC 5倍,且高于Dubbo
提供服务治理 Tars与Dubbo提供整个服务治理生态体系,gRPC更多的是提
供思路,由其它社区或者自己构建生态。
社区广泛应用 Tars已经大规模应用13年,gRPC和Dubbo社区用得更多,时
间不长。
服务治理
应用规模
提供整套体系
已大规模应用11年
gRPC
无
社区广泛应用
Dubbo
备注
7. Tars框架主要模块
SDK
Tars-Cpp
Tars-Java
Tars-NodeJS
管控服务 TarsAdminRegistry TarsRegistry
基础服务 TarsNotify TarsProperty
部署工具 TarsPatch 生态相关 TarsGateway
TarsStat
TarsNode
Tars-PHP
K8STars
TarsBenchmark
Tars-Go
TarsWeb
TarsConfig
TarsLog
8. Tars框架主要能力
IDL 代码自动生成 专注业务逻辑
多语言 CI/CD 名字服务
服务可视化 无损变更 配置管理
高效开发
高质运维
日志
过载保护
监控
调用链
容灾容错
Set管理
弹性伸缩
9. 主要内容
01 Tars微服务架构能力分析
02 Tars框架主要技术亮点和实现方案
分析业务开源微服务解决方案,整体介绍Tars微服务框架的功能模块及其特性
探讨Tars框架主要技术实现细节和应用场景
03
Tars云原生演进与应用实践
介绍在云原生背景下Tars与K8S的整合方案以及在真实业务中的应用过程
10. 多维度的开发工具:更高效的敏捷开发
TarsWeb/API
tars2go
tars2cpp
create_tars_server.sh
Tars协议
tars2java
make tar
make upload
tars2node
tars2php
代码脚手架
IDL
生成桩代码
打包/发布
• 权限管理
• 配置管理
• 服务重启/发布/扩容
• 监控
• 日志查询
• 接口测试
运营
11. 负载均衡与容错能力:提升服务质量
负载均衡
轮询
Server
A
?
Server
B1
取模HASH
一致性HASH
熔断
Server
B2
屏蔽:超时/无法连接
恢复:尝试连接与请求
过载保护
限制并发数
12. Tars名字服务与Set模型
Server
A
?
TarsRegistry
Server
B
Set - 1
A1
写死IP
IP配置化
服务发现
Set模型+服务发现
Set -2
运维复杂度
B1
A2
B2
C1
B3
B4
13. Tars Set模型的应用场景
ToB:为KA客户提供更稳定可靠的服务
ToC: 按用户数量划分,更好地运营及隔离故障
14. Tars多机房容灾方案
常规方案
•
网络延时高 OR 配置复杂
Tars方案
•
深圳宝安
名字服务实现自动区域感知
127.27.5.1
Client
优势
• 运维简单
• 降低延时减少带宽消耗
• 更强的容灾能力
127.27.1.1:80 127.27.1.2:80
logsvr
logsvr
szbaoan 127.27.*.*
szpingshan 10.147.*.*
getAddr(“logsvr”)
返回 IP:Port 列表
127.27.1.1:80和127.27.1.2:80
registry
深圳坪山
10.147.1.1:80
logsvr
node
15. 高性能实现原理与测试数据
压测机型: 4 核 /8线程CPU 3.3Ghz 主频
16G内存 千M网卡
压测逻辑:客户端带着一定大小的数据给服务端,服务端原样返回给客户端 。
服务端单进程,多个客户端发起测试
自定义二进制协议
TCP/UDP全双工
优化算法&减少内存拷贝
16. 主要内容
01 Tars微服务架构能力分析
02 Tars框架主要技术亮点和实现方案
分析业务开源微服务解决方案,整体介绍Tars微服务框架的功能模块及其特性
探讨Tars框架主要技术实现细节和应用场景
03
Tars云原生演进与应用实践
介绍在云原生背景下Tars与K8s的整合方案以及在真实业务中的应用过程
17. 云原生的趋势与价值
价值
稳定可靠
自主可控
成本优化
效率提高
18. Tars的云原生演进思路
Istio: 运维能力标准化
Docker: 运行环境标准化
Dapr: 开发组件标准化
Tars: 开发+运维组件的标准化(进行中)
19. Tars+K8s的整合
K8s: 原生资源管理能力
Tars: 保留开发架构及服务治理能力
Tars
K8s
开发框架
资源调度
√服务部署
日志
Docker
√版本管理
名字服务√
调用链
网络虚拟化
指标监控
20. Tars+K8s的整合:Supervisor方案
存量服务零代码改造迁移到K8s
使用Tarscli管理服务的生命周期
其他方案:
TarsFramework:使用Controller对接
K8s(Beta版本已发布)
云原生Tars:Tarscli与Tars框架合并,并支
持插件化(实现中)
21. 在腾讯云后台的应用案例
•
•
•
•
多Set功能
• 隔离故障域
• 容灾备份切换
部署架构
• 多K8s集群容量水平扩容
• 容灾
• 支持CVM手工部署
Tars基础服务
• 复用同一套Tars系统
• 统一的管理视图
CNI网络模式
•
实现多地域网络互通
22. 更多Tars的应用案例
• Tars在腾讯内部使用超过十年,并于2017年4月10日开源,开源后与业界众多企业交流,同时也得到了广泛应用。
• 开源地址: https://github.com/TarsCloud
• 2018年6月成为Linux 基金会项目,2020 年 3 月成立Tars基金会
23.
24.