基于TarsGo的云原生微服务架构演进

  1. TarsGo框架能力分析
  2. TarsGo的云原生演进
  3. TarsGo应用案例演示

总结与展望

  • Tars为Go微服务提供了丰富的工具链和完整的解决方案
  • TarsGo将在云原生上继续整合和优化
  • 继续推动Tars的微服务生态
展开查看详情

1.基于TarsGo的云原生微服务 架构演进 利开园 2020.11.22

2.工作经历 腾讯Docker容器平台开发 TARS服务的基础运行环境和运营平台 腾讯TARSGo框架开发 TARS的GO语言实现 腾讯云开发业务后台开发 使用TARSGo,实现TARS+K8S的方案

3. 1 目 TarsGo框架能力分析 CONTENTS 2 TarsGo的云原生演进 录 3 TarsGo应用案例演示

4.Go微服务架构选型的思考 IDL、只关注业务逻辑、多语言 需求 代码 标准化、快速部署、云原生 丰富的服务治理能力 可运营的服务 可运行的服务

5.开源TarsGo:丰富的微服务构架能力 ❊开发专注业务逻辑 ❊标准化快速部署 ❊服务治理能力 ✢ 负载均衡 ✢ IDL ✢ 云原生 ✢ Set功能 ✢ RPC框架 ✢ 支持在k8s上一键部署 ✢ IDC分组 ✢ 日志 ✢ 高性能 ✢ 多语言:支持 ✢ 监控 ✢ API网关 golang/cpp/java/php/nodejs ✢ 调用链 ✢ 名字服务集成 ✢ 配置管理 ✢ 无损变更 ✢ 测试工具集成 ✢ 服务可视化管理 ✢ 容灾容错 ✢ 过载保护 ✢ 弹性伸缩

6.RPC:像调用本地函数一样调用远程接口 • 名字服务 接口定义 • 负载均衡 • 轮询 服务端 • 取模HASH • 一致性HASH • 熔断 • 屏蔽:超时/无法连接 • 恢复:尝试连接与请求 • 过载保护 客户端 • 限制并发数

7. TarsGo框架性能 主要性能优化方法 • 基于时间轮的Timer • 异步日志 • 使用协程池 • 使用内存池(sync.Pool) • 二进制序列化 • TCP长连接 • TCP buffer/no_delay参数调整 • 使用指针传结构体参数 • 避免使用反射 • 压测机型: 4 核 /8线程CPU 3.3Ghz 主频 16G内存 千M⽹卡 • 避免大量协程读写同一个channel • 压测逻辑:客户端带着⼀定⼤⼩的数据给服务端,服务端原样返回给客户端 。 • 服务端单进程,多个客户端发起测试

8.流量管理 • 南北流量 API Gateway • Tars API Gateway • 东西流量 • 名字服务+直连节点 • 集群流量分组 Server1 Server2 Server1 Server2 • Set方案 • IDC分组 Server3 Server4 Server3 Server4 Cluster1 Cluster2

9.TARS名字服务与Set功能 • Set功能的优点: Server ? Server • 隔离故障域 A B • 可写死服务地址 写死IP TarsRegistry IP配置化 Set - 1 Set -2 运维复杂度 A1 A2 服务发现 B1 B2 C1 B3 B4 Set模型+服务发现

10. 机房容灾方案-IDC分组 szbaoan 127.27.*.* szpingshan 10.147.*.* • IDC分组的优点: • 运维简单 深圳宝安 127.27.5.1 • 降低延时减少带宽消耗 getAddr(“logsvr”) registry • 更强的容灾和调度能力 Client 返回 IP:Port 列表 127.27.1.1:80和127.27.1.2:80 深圳坪⼭ 127.27.1.1:80 127.27.1.2:80 10.147.1.1:80 logsvr logsvr logsvr node

11. 1 目 TarsGo框架能力分析 CONTENTS 2 TarsGo的云原生演进 录 3 TarsGo应用案例演示

12.TARS的云原生演进 ❊云原生的价值 ❊TARS与K8S整合方案 ✢ 老板:节省资源与人力成本 ✢ 服务架构的平滑迁移 ✢ 打工人:减少工作切换成本 ✢ 零代码服务改造 ✢ 兼容原有名字服务等功能 ✢ 重合功能的取舍

13.TARS+K8S整合方案 • K8S: 原生资源管理能力 • TARS: 保留开发架构及服务治理能力、增加端口自动分配能力 K8S TARS 开发框架 资源调度 √服务部署 日志 Docker √版本管理 调用链 名字服务√ 网络虚拟化 指标监控 开源地址:https://github.com/TarsCloud/K8STARS

14.TARS+K8S方案及名字服务整合 Pod生命周期 Tarscli: 保证TARS名字服务与容器列表的一致性 启动 Tarscli supervisor 启动TARS服务 就绪 Tarscli supervisor 将TARS服务设为active 运行 Tarscli supervisor 监控TARS服务和上报心跳 删除前 Tarscli prestop 下线TARS服务 删除 Tars Registry通过心跳保证最终一致 方案架构图 Pod 生命周期

15.一个标准的云原生TarsGo服务 Pod生命周期 server.tars main.go makefile _server_meta.yaml Server.yaml Dockerfile

16.TARS与Promethus整合 Tars Registry ❊自动对接Tars名字服务 ❊Metrics端口自动注册 Tars Prometheus Server1 单Pod多容器 ❊支持监控配置热加载 Prometheus Server2 Server3 AlertManager

17.TARS与Jaeger整合 ❊免agent部署 ❊Tars协议通信,高性能 Jaeger Collector 采集策略 Server1 ❊不用配置collector地址 单Pod多容器 上报数据 ❊自动清理数据 Tars Jaeger Server2 Server3

18.TARS与Elasticsearch+kibana整合 Kibana ❊支持免agent模式 ❊无需在服务节点配置es地址 ❊按日期建立索引 Elasticsearch Server1 ❊索引自动清理 单Pod多容器 Tars Server2 Elasticsearch Server3

19.TARS的未来演进方案 ❊ 由sidecar来实现框架功能,框架的变更 TarsWeb 不用更新业务镜像 ❊ 由TarsWeb自动对接K8S的API,用户不 业务容器 用去理解K8S 单Pod多容器 K8S APIServer Sidecar容器 Tars Registry Tars基础服务

20. 1 目 TarsGo框架能力分析 CONTENTS 2 TarsGo的云原生演进 录 3 TarsGo应用案例演示

21.需求 • 工程师小王加入了一个新公司,老板说,我们准备做一个像PDD 那样的APP,设计图都做好了,就差你们来实现了 • 这是设计图

22.后台微服务的设计(DDD) • 账号系统 • 登录 • 信息维护 • 商品管理 • 商品信息 • 搜索服务 • 评论 • 砍单

23.代码目录及IDL定义 makefile common/makefile common/Dockerfile

24.部署到云上 • 准备工作 • 购买k8s集群 • 部署tars基础服务 一键安装脚本: curl https://raw.githubusercontent.com/TarsCloud/K8STARS/master/baseserver/install_all.sh | sh • 服务部署 • 生成镜像: make img • 上传镜像:Docker push xxx • 部署:kubectl apply –f xxx.yaml • 配置API网关和Ingress(南北流量)

25.以服务为中心的可视化管理

26.监控视图

27.调用链

28.日志查询

29.多Set部署 • 多Set功能 • 隔离故障域 • 容灾备份切换 • 部署架构 • 多K8S集群容量水平扩容 • 容灾 • TARS基础服务 • 复用同一套TARS系统 • 统一的管理视图 • CNI网络模式 • 实现多地域网络互通