Tars与GRPC实战场景应用

  • TARS的架构体系 tars框架应用设计
  • GRPC的架构体系 grpc框架应用设计
  • Service Mesh的探索 服务网格技术的应用与探索
展开查看详情

1.云+社区技术沙龙

2.Tars与GRPC实战场景应用 田甜 腾讯高级工程师

3.SPEAKER 田甜 腾讯高级工程师 对分布式架构与容器化技术有深入研究,具有丰富的分布式 架构设计开发经验与项目实践。 TARS-GO早期发起人和最核心开发成员,腾讯游戏数据平台 开发,致力于将微服务设计思想应用在游戏数据营销中。

4.CONTENTS 01 TARS的架构体系 tars框架应用设计 02 GRPC的架构体系 grpc框架应用设计 03 Service Mesh的探索 服务网格技术的应用与探索

5.TARS的架构体系 Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++,Java,PHP,Nodejs,Go语言。该框架为用户提供了涉及到开发、运维、以 及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议 编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它 可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。

6.开源微服务框架现状 专注于通信框架,RPC或消息队列模式, 支持服务治理,通过SideCar模式解决多语言问题, 无服务治理类 ServiceMesh 目前处于发展成熟期 部分框架支持多语言开发 在通信框架的基础上支持服务治理能力,单 在通信框架的基础上支持服务治理能力, 单语言带服务治理类 多语言带服务治理类 多种编程语言实现 一编程语言实现,JAVA语言为主流

7.Tars整体架构 Tars是一个支持多语言、内嵌服务治理功能,与Devops能很好协同的微服务框架 Devops OSS 代码管理 负载均衡 熔断 服务配置 语言 服务注册/发现 服 代码编译 务 Metric监控 日志聚合 自定义监控 Set模型 C++ 治 理 分布式跟踪 自动区域感知 流量管理 过载保护 JAVA 自动化测试 Nodejs 开发框架 持续部署 RPC PHP 同步 异步 单向 协 灰度发布 议 Tars TUP SSL PB Http1/2 自定义协议 GO 基础设施(物理机、虚拟机、容器)

8.服务治理 熔断策略: registry 连续超时或失败次数超过阈值 超时比率阈值 getRoute(“xxxsvr”); keep alive xxxsvr node client keep alive 轮询、hash、权重 xxxsvr node Metric Conf log … auth zipkin 监控统计 配置中心 日志聚合 认证鉴权 分布式跟踪 开发框架、Registry、node和基础服务集群协同工作,透明完成服务发现/注册、负载均衡、鉴权、调 用链等等服务治理相关工作

9. 自动区域感知 • 常规的负载均衡方式面对跨地区或者跨机房部署的服务会因为网络原因造成延时增大 • 使用不同服务名来解决该问题时会带来繁重的运维工作 • 通过Registry和开发框架配合实现自动区域感知 szbaoan 127.27.*.* szpingshan 10.147.*.* 深圳宝安 127.27.5.1 自动区域感知优势 getAddr(“logsvr”) Client registry • 运维简单 返回 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

10.SET模型 根据业务功能特征对部署进行规范化和标准化,以Set为单元进行部署 容量分区 300W在线 优点: A • 有效防止故障扩散 • 实现海量服务的高效运营 B • 通过Registry和开发框架配合实现快速动态构建Set模型 registry 按服务名分Set 返回 IP:Port 列表 返回 IP:Port 列表 127.27.2.1:80和127.27.2.2:80 127.27.1.1:80和127.27.1.2:80 A1 A2 A3 getAddr(“B”) 127.27.5.1 Set - 1 getAddr(“B”) B1 B2 B3 127.27.5.1 Set-2 A A 框架支持下的Set分组 。。。 127.27.21:80 127.27.2.2:80 127.27.1.1:80 127.27.1.2:80 A A A B B B B B B B

11.流量控制 服务发布上线面对的问题: 设置ip为127.27.1.2的testsvr服务节 点的流量为10% • 如何做对业务无损的服务变更 registry • 如何做灰度验证 ip:172.27.1.1 getRoute(“xxxsvr”); testsvr 90%流量 client ip:172.27.1.2 10%流量 testsvr 通过Registry和开发框架配合实现按需进行流量控制,达到无损发布和灰度流量的目的

12.分布式跟踪 Span:sr,ss • 利用开源的Zipkin实现分布式跟踪,避免重 Span:sr,ss Service2 Span:cs,cr 2 复造轮子 请求 Span:cs,cr Span:cs,cr 服务器2 1 3 Gateway • 框架内部嵌入跟踪锚点使用对业务透明 Service1 6 4 Span:sr,ss 服务器0 服务器1 5 Service3 服务器3 DB Zipkin 跟踪数据落盘 界面展示

13. 服务配置 配置中心的配置有两类: 1.模版配置(框架自身配置) 2.业务配置(业务配置分4级) 配置管理简单 应用级配置 继承 set配置 引用 引用 引用 引用 服务配置 引用 节点配置 开发使用方便: //获取配置文件 业务可以灵活使用 bool addConfig(const string &filename);

14.运维可视化管理 可视化管理 • 注册业务服务 • 上传包并发布 • 可以扩缩容节点 • 操作节点 • 修改配置

15.CONTENTS 01 TARS的架构体系 tars框架应用设计 02 GRPC的架构体系 grpc框架应用设计 03 Service Mesh的探索 服务网格技术的应用与探索

16.GRPC的架构体系 gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.

17.GRPC的架构体系 Protocol Buffers(简称Protobuf) ,是Google出品的 序列化框架,与开发语言无关,和平台无关,具有良好 的可扩展性。Protobuf和所有的序列化框架一样,都可 以用于数据存储、通讯协议。 gRPC (gRPC Remote Procedure Calls) 是Google发 起的一个开源远程过程调用 (Remote procedure call) 系统。该系统基于 HTTP/2 协议传输,使用Protocol Buffers 作为接口描述语言。

18. 完整的GRPC应用框架体系 脚手架生成代码 多语言客户端代码&服务端代码生成 创建服务完成即可克隆出可运行的 通过描述文件,一键生成多语言客户端和 框架代码,简单服务只需填充业务 服务端代码 逻辑实现 自动服务注册 HTTP、gRPC协议互转 框架提供自动和手动的服务 注册,UI管理服务实例的上 GRPC框架 服务同时提供HTTP和gRPC两种协 议出口,对应一套逻辑代码 下线 内置基础服务中间件 常用服务的SDK实现 日志服务、服务调用跟踪服务、基础 访问部门内、公司内的常用组件 ACL实现、实时报表Panic恢复等内置 sdk化,降低使用成本 在服务中间件

19.GRPC Interceptor机制 通过拦截器系统基本上可以实现微服 务需要的主要功能: 1. 远程日志 2. 监控上报 3. 链路追踪 4. 鉴权服务 5. 服务发现

20.Protocol Buffers 插件系统 Protoc工具使用pb来描述pb的语法树,再翻译到各个语言,大大的降低了多语言的支持,并实现了前后端解耦合。 我们做了一个比较有意思的事情: 通过代码描述自动生成openapi文档,借助openapi的能力将开发与文档打通。 protobuf swagger 开发文档

21.GRPC周边生态 • 庞大的Protocol Buffers插件集合,几乎可以转换出任何语言,包含 tars协议 • gRPC Ecosystem等一系列框架扩展 • gogo protobuf等优秀的工具集 • 大量开源软件的应用,比如etcd、docker、kubernetes、tidb等等 • protobuf形成了一套开源的事实标准

22.CONTENTS 01 TARS的架构体系 tars框架应用设计 02 GRPC的架构体系 grpc框架应用设计 03 Service Mesh的探索 服务网格技术的应用与探索

23.Service Mesh A service mesh is a configurable, low-latency infrastructure layer designed to handle a high volume of network-based interprocess communication among application infrastructure services using application programming interfaces (APIs). A service mesh ensures that communication among containerized and often ephemeral application infrastructure services is fast, reliable, and secure. The mesh provides critical capabilities including service discovery, load balancing, encryption, observability, traceability, authentication and authorization, and support for the circuit breaker pattern.

24.传统架构与Mesh架构对比 服务直连架构: Service Mesh 架构 : 利用内嵌服务的代码框架提供高性能的服务基础设施 代码零改动,以sidecar代理网络通信的方式满足应用程序多样化需求 Node A Node B Node A Node B Service A Service B Service A Service B 业务逻辑 业务逻辑 业务逻辑 业务逻辑 无性能损耗 Library Library Sidecar Sidecar 负载均衡 负载均衡 负载均衡 负载均衡 服务发现 服务发现 服务发现 服务发现 流量控制 流量控制 流量控制 流量控制 … … … … 多语言版本微服务框架 Service Mesh Service Mesh 提供微服务基础功能实现 Control Plane Control Plane

25.初代Mesh探索 配置服务 服务A 配置管理与下发 Assembler 服务B Finder 网关单元 Consul 网关单元 网关单元 Mate Mate 服务C Mate Envoy Envoy Envoy 服务F 网关单元 网关单元 网关单元 Mate Mate Mate 服务G Envoy Envoy Envoy 服务H 服务D 网关单元 网关单元 网关单元 Mate Mate Mate Envoy Envoy 服务E Envoy

26.istio技术架构 • Proxy:即Sidecar,用于调解服务网格中所有服务 的所有入站和出站流量,数据平面的核心 • Mixer:负责提供策略控制和遥测收集的组件服 务 • Adapter:为Mixer提供扩展服务的独立服务 • Pilot:主要职责是向 Sidecar 发现服务发现信息和 各种流量管理和路由规则 • Galley:istio API配置的校验、各种配置之间统 筹,为 Istio 提供配置管理服务 • Citadel:用于密钥管理和证书管理,下发到 Sidecar等负责通讯转发的组件

27.Istio1.3性能数据 • istio在打开Mixer情况下单边延迟增加1ms左右,双边延迟增加2ms左右,对服务影响较小,关闭Mixer延迟可以更低。 • Sidecar单核处理性能QPS:客户端6500,服务端13000,满足大部分线上服务的性能要求。 4000QPS、10线程、1024字节对比 平均延迟ms 延迟中位数ms qps 原生网络 0.95 0.76 4000 双边sidercar 2.33 1.55 4000 server sidercar 1.96 1.25 4000

28.Istio应用平台 灰度控制 鉴权控制 流量控制 版本管理 Istio应用管理 网格管理 配置管理 网格注入 权限控制 集群升级 多集群管理 Istio平台管理 istio Service C sidecar 服务网格 ingress 名字服务 Redis Service D MySQL egress egress

29.Service mesh与微服务框架对比 框架 istio tars Dubbo Spring-Cloud 功能定位 服务网格 微服务开发框架 RPC开发框架 微服务开发框架 协议支持 HTTP、HTTP/2、gRPC、 自定义RPC协议 自定义RPC协议 HTTP、HTTP/2 TCP… 支持语言 不限 C++/Golang/Java/PHP等 Java Java 开发难度 不定,自由选择开发方式 中等 大 较低 服务发现 Kubernetes etcd ZooKeeper/Redis Eureka/ZooKeeper/Cons ul 配置中心 Kubernetes ConfigServer/etcd Zookeeper Spring Cloud Config/ZooKeeper/Cons ul/ 负载均衡 Envoy 内置 内置 Ribbon Client 断路器 Envoy 内置 只有降级,没有熔断 Hysterix 调用跟踪 Envoy & Jaeger zipkin Dubbo-admin & Dubbo- Sleuth/Zipkin monitor 接入层网关 Envoy 无 无 Spring Cloud Gateway 企业支持 Google/IBM/Lyft Tencent Alibaba Pivotal 社区活跃度 高 中等 较高 高