Service Mesh 在华为公有云的实践 田晓亮 华为架构师
田晓亮 华为架构师 8 年软件 行业经验, 曾就职于三星,2012 年进 入云计算领域, 对 PaaS, DevOps,APM 有深 入的研究和实践经验 方案 支撑近千台 VM 中应 用部署管理监控 2016 年加 入华为担任架构师, 负责微服务的 Go 语 言开发框架及 Service Mesh 设计 和落地,Go 语 言微服务框架被华为 5G 核 心 网络采 用,Service Mesh 服务商 用上线公有云
简介 Service Mesh 在华为内部的技术演进 实现 一个 Service Mesh 使 用 Service Mesh 快速构建微服务 生态与扩展
我们在构建微服务, 而构建微服务是困难的
微服务架构模式引 入的问题
路由规则 引流 支持权重 根据消费者信息或请求特征进 行引流 80% Provider 1.2 cookie:version=0.1 Consumer 0.1 Provider 1.2 Consumer 0.2 20% Provider 1.3 Consumer 0.2 cookie:version=0.2 Provider 1.3
Chassis
语 言开发框架 Go-kit Go-micro
还有其他解题思路么? 多语 言 SDK 支持 学习曲线 绑定特定技术栈, 不容易切换 方案 老旧单体应 用
抽象 Chassis L7 SpringMVC,VertX,beego L6 Json, Protobuf, XML L5 Http 1/2, grpc 这 里呢? L4 TCP L3-1 IP/Data link/physical
Service Mesh 一种基础设施层, 服务间的通信通过 Service Mesh 进 行 可靠地传输复杂 网络拓扑中服务的请求, 将服务变成现代的云原 生服务 Application Transport Application Service Mesh Transport 一种 网络代理的实现, 通常与业务服务部署在 一起, 业务服务不感知 Network Physical Network Physical 一种 TCP/IP 之上的 网络模型
为什么使 用 Service Mesh 无需多种语 言的微服务框架开发 对业务代码 0 侵 入 不适合改造的单体应 用 开发出开的应 用既是云原 生的 又具有独 立性
没有银弹 新的故障点 一定程度的性能降低 侵 入式框架有更强的定制和扩展能 力 部署复杂性
简介 Service Mesh 在华为内部的技术演进 实现 一个 Service Mesh 使 用 Service Mesh 快速构建微服务 生态与扩展
第 一代 : 基于 Nginx 的微服务代理 2013 年, 微服务开发平台中的组 件, 公司内部某电信业务 400 多个微服务,800 左右实例, 200 多个数据中 心
Sidecar 模式 基于容器的分布式系统设计模式 容器可以共享存储与 网络的能 力 应 用程序容器 日志同步 工具容器 存储卷
Sidecar 优势 以容器作为基础打包单元, 可以分给不同的团队进 行开发测试 可重 用 以容器作为错误边界, 使服务能够正确推出 独 立回滚与更新
第 二代 :HSA SideCar 2016 年, 基于 Java 微服务 框架开发 提供 SOAP 协议转换 与微服务部署在 一个 Pod 占 用资源很 高
Mesher Service Mesh 的 一种实现 基于 自研的 Go 语 言微服务框架 ( 即将开源 ) 开发 使 用 CSE 注册中 心与配置中 心 以 Sidecar 的 方式部署在微服务所运 行的环境中, 也可以 PerHost 模式运 行 支持多种部署 方式 占 用资源 小 ( 闲置 10 多 M, 并发运 行时 30 多 M)
简介 Service Mesh 在华为内部的技术演进 实现 一个 Service Mesh 使 用 Service Mesh 快速构建微服务 生态与扩展 与 PaaS 平台结合
整体架构 CSE as control plane Service Service Service Service Monitoring Service center Mesher Mesher Mesher Mesher Zipkin Huawei APM Config center Governance UX Service Service Service Service Prometheus Grafana Mesher Mesher Mesher Mesher Infrastructure Physical Kubernetes VM FusionSphere ServiceStage
Design Goal 尽可能提供定制化 减少对业务影响 高性能 使服务可视化 使服务更具弹性
Data Plane ServiceC Mesher ServiceD Mesher 即 Mesher 组件本 身, 对所有请求进 行处理 注册发现服务 ServiceA Mesher ServiceB Mesher 执 行路由策略 负载均衡 透明 TLS 传输 生成监控数据
Control Plane Governance UX Config Center LB Service Center Scheduler Mesher Mesher Mesher Mesher 可 人 工介 入, 为所有运 行的 Mesher 提供配置下发, 不会碰服务请求 注册中 心 下发配置 RouteRule Circuit Breaker 对接监控服务 调度引擎 Rate Limiting
调 用场景 1 ServiceA ServiceB Mesher http://127.0.0.1:30101 https://10.100.2.3:30101 Mesher http://127.0.0.1:8080 透明 TLS 传输能 力, 用户可托管 自 己的证书 提供者可获得服务端限流能 力和处理链功能
调 用场景 2 ServiceA ServiceB SDK Mesher ServiceC 消费者与 Mesher 一起部署 提供者为 Java 或者 Go 语 言微服务框架开发 提供者为普通的业务应 用
调 用场景 3 ServiceC ServiceB ServiceA SDK Mesher 提供者都与 Mesher 部署 消费者为 Java 或者 Go 语 言微服务框架开发 消费者不使 用框架
接受本地请求 Order Mesher SockShop Web http://order/list Transport Http Server Destination Resolver Route Rule Handler Chain Rate limiting Circuit Load balancing Tracing Transport Order Mesher Source Resolver Order Archiaus-go Registry Log Metric Collector Mesher Config center Service center Huawei APM 可定制 固定组件
接受远程请求 SockShop Web Mesher http://10.100.2.13:30101/list Transport Http Server Source Resolver Tracing Rate limiting Handler Chain Local selector Transport Order Archiaus-go Registry Log Metric Collector Config center Service center Huawei APM 可定制 固定组件
多协议 支持 任意协议请求都被抽象为 Invocation 模型进 行处理, 最终再转换为协议请 求转发 Http Server Http Request Http Request Grpc Server Grpc Request Transfer Invocation Transfer Grpc Request Forward Service Thrift Server Thrift Request Thrift Request
Registry 负责发现注册 插件化注册中 心客户端 Service center File System Kubernet es Consul Eureka Registry
动态治理 对接华为公有云微服务引擎的 Service center 与 Config center
监控 Runtime Metrics Updates Prometheus 处理链中提供分布式调 用追踪 Metric Metric Metric Metric Collector Registry Statsd Admin API 提供了路由查询, 健 Hystrix Dashboard 康检查,Metric 等信息 Go Routine 使 用 Collector Registry 模型, 并 使 用 Channel 主动上报 Metric 数据 Promethues,Grafana,Zipkin 对接
简介 Service Mesh 在华为内部的技术演进 实现 一个 Service Mesh 使 用 Service Mesh 快速构建微服务 生态与扩展
部署 本地或虚机部署 : 样例 kubernetes 部署 ServiceStage 部署
最 小化配置项 HTTP_PROXY SERVICE_NAME PROVIDER_ADDR CSE_REGISTRY_ADDR
部署复杂性提升, 如何消弭? Infrastructure as Code 开发者 自 行选型 命令 行注 入 工具 Mesher 开发团队定制 编排服务 自动注 入 最完整的产品体验
应 用与 Mesher 集成最佳实践 使 用容器, 容器 网络与编排调度平台 Node 业务代码监听在本地端 口, 并且不要暴露业 务服务端 口 使 用 Mesher 端 口对外提供服务 Mesher 10.10.1.10:30101 使 用 SideCar 部署模式 Service 127.0.0.1:3000 将服务提供者地址写在配置 文件中, 在本地 里信息是 http://x.x.x.x:port, 当需要与 Mesher 使 用时, 改为 http://servicename
简介 Service Mesh 在华为内部的技术演进 实现 一个 Service Mesh 使 用 Service Mesh 快速构建微服务 生态与扩展
Istio 与 Envoy 作为 一个平台, 专注在控制 面的功能, 将 Envoy 整合到平台中, 作为数据 面Service Mesh Mesher 可以作为 Envoy 的 一 种替代 方案
Linkerd
Service Mesh Landscape Data Plane:Linkerd,Nginx,Envoy, Mesher Control Plane:Istio, CSE
性能对 比 Mesher1.0 Istio 0.1.6(Envoy) Linkerd1.1.3 4U8G Latency(ms) 17.2 465 34.7 TPS 8264 388 4235 CPU 300% 170% 310% Memory 35M 20M 196M 并发 20 20 20
与 ServiceComb 侵 入式框架对 比
Mesher 与普通应 用性能对 比
为何性能下降依然要使 用 ServiceMesh?
为什么要开发 Mesher Istio 的性能问题 Istio 强绑定 Kubernetes 平台 (1.7.4+) 从成本 角度讲 Linkerd 并不适合做 SideCar 部署,JVM 资源占 用较多 在 ServiceComb 和 CSE 中的积累 最 大优势, 侵 入式与 非侵 入式的 无缝结合, 混编, 统 一的产品体验
开源 Service Center https://github.com/servicecomb/service-center ServiceComb-Java https://github.com/servicecomb/servicecomb-java-chassis Mesher examples https://github.com/huawei-microservice-demo/mesher-example
未来 数据 面竞争点 : 特性, 可配置, 扩展性, 性能 管理 面竞争点 : 特性, 可配置, 扩展性, 易 用性 最重要的 : 编排调度平台与数据 面的整合, 为开发者带来最完整的产品体验
Take away The Hardest Part of Microservices: Calling Your Services Envoy 如何在 Lyft 使 用 Kubernetes 与云原 生应 用概览 模式之服务 网格 Service Mesh: 下 一代微服务? 数 人云 万字解读 :Service Mesh 服务 网格新 生代 --Istio
xiaoliang.tian@gmail.com