云原生微服务治理的最佳实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 云原生微服务治理的最佳实践
望陶
阿里云云原生应用平台高级技术专家
2.
3. 张乎兴(望陶)自我介绍
•
•
•
•
•
•
阿里云微服务混合云产品研发负责人
Apache Dubbo PMC member
Apache Tomcat PMC member
Apache Member
Arthas Maintainer
阿里双十一中间件稳定性负责人
4. 大纲
云原生微服务的挑战和趋势
运行态服务治理最佳实践
大纲
开发态服务治理最佳实践
OpenSergo
开源开放的服务治理标准
5. 大纲
云原生微服务的挑战和趋势
运行态服务治理最佳实践
大纲
开发态服务治理最佳实践
OpenSergo 开 源开 放 的服 务治 理 标准
6. 微服务在云原生下的挑战
7. 云原生微服务的发展趋势
8. 服务治理是微服务化深入的必经之路
Cloud Hosting
云上部署
Cloud Native
云原生部署
Microservices
微服务化
Service Governance
服务治理
• ECS上云 • 容器化 • 更敏捷 • 提效/稳定性
• 以机器为核心 • 以容器为核心 • 以应用为核心 • 以业务为核心
9. 阿里微服务治理技术演进路线
2008
•
•
2013 2019- 自研微服务 Fat-SDK
Pandora One Java
Agent OpenSergo
治理与业务捆绑 治理与业务分离 治理透明化 治理标准化
依赖冲突难管理
SDK升级成本
高
•
•
基于隔离容器
运维治理效率大
幅提升
•
•
•
无侵入
0升级成本
全面兼容开源
2022-
•
•
•
语言无关
全链路生态覆盖
社区共建
10. 微服务治理的划分
开发态Dev
测试态Test
• 服务元信息 • 服务压测
• 服务契约管理 • 自动化回归
• 服务调试 • 流量录制
• 服务Mock • 流量回放
• 开发环境隔离 • 端云互联
变更与运行态 Ops
运行态
变更态
• 无损下线 • 离群实例摘除 • 无损上线 • 流量控制与平滑 • 读写流量分离
• 金丝雀发布 • 熔断降级 • 缓存热点治理
• A/B Test • 同AZ优先路由 • 服务鉴权
• 全链路灰度 • 推空保护 • 访问控制
服务框架
•
日志治理
11. 全链路流量治理(漏斗模型)
CDN
静态页面
SLB/NGINX
API Gateway
/Web 入口
后端应用
动静请求分离
动态请求
非法请求
安全策略防攻击;粗放型流控
有效请求
超容
热点/普通流量探测分离;精细流控
容量之内
服务A 服务B 服务C
服务D 服务E 服务F
下游依赖
根据应用的容量进行流控;
实时探测应用内部不稳定调用,及时隔离或摘除;
自适应系统过载保护
DB
其它应用
缓存
数据库
慢SQL治理、连接池治理;
缓存热点 key 击穿防护;
不稳定第三方服务探测、隔离与熔断
全
链
路
灰
度
12. 基于 Java Agent 的服务治理
13. 大纲
云原生微服务的挑战和趋势
运行态服务治理最佳实践
大纲
开发态服务治理最佳实践
Demo
14. 无损下线:白天大流量下发布依然丝般顺滑
注册中心感知
到服务端下线
注册中心
客户端感知到
服务端下线
客户端视角
Agen
t
服务调用报错期
正常
下线静默
下线
2 服务下线
(prestop)
3 通知消费者
消费
者A
Agen
t
1 正常调用
提供者A
主动通知
5 应用重启
客户端主动刷新
服务端视角
Agen
t
消费者
B
4 调用其他提供
者
Agen
t
者B
提供
确保在途请求处理完毕再下线
15. 无损上线
•
Redis: JedisPool 连接池创建后不会立即建连接
数据库: druid连接池异步创建连接
•
•
•
应用初始化
预建连接
服务注册
通过readiness检
查
小流量预热
正常流量进入
K8s readiness检查和Spring
Cloud/Dubbo体系没有打通
Dubbo/SC 服务需
要延迟暴露
预热曲线动态调整
流量需要缓慢增加,但Dubbo 2.7.4.1
以下版本存在服务预热不生效问题
Fastjson/Jetty低版本没有开启并行类
加载
JVM JIT 编译问题引起cpu飙高
日志异步化
16. 安全生产: 金丝雀发布
治理中心
标签是云原生环境下的一等公民
3. 配置灰度规则
http-header: user-id % 100 == 20
• 两种灰度规则
• 按流量百分比路由
• 按请求特征路由:如http
header, 方法参数等
• 打通微服务网关
注册中心
配置中心
4. 读取灰度规则
version=gray
user-id=120
user-id=121
Agen
t
微服务
网关
Agen
t
2. 注册环境标签
Deployment1
Agen
t
提供者
3
1. version=gray
消费者
最佳实践
• 第一步:新建灰度 Deployment,部署新版本的镜像,打上新版本的标签
• 第二步:配置针对新版本的标签路由规则
• 第三步:验证成功,扩大灰度比例。
• 第四步:若验证成功,将稳定版本的应用更新成最新镜像;若验证失败,把灰度的
Deployment 副本数调整到 0 或删除该 Deployment
version=normal
Agen
t 提供者
1
Agen
t 提供者
2
Deployment2
17. 安全生产: 全链路灰度发布
客户端 网关层
iOS SCG
x-user-
id:120
Android
H5
x-user-id:100
A
x-user-id:120
A
B
C
C
Agent
gray
x-mse-tag:gray
x-mse-tag:gray
Agent
gray
Ingres
s
Zuul
x-user-id:100
A
Agent
base
x-mse-tag:base
B
Agent
base
x-mse-tag:base
C
Agent
base
18. 前后端全链路灰度发布
客户端
网关层
web
C
B
A
A-service-gray
iOS
SCG
10%
Vue/node.js
http
Agen
t
A
H5
Agen
t
gray
gray
gray
Android
C
dubbo
Ingres
s
Zuul
90%
Vue/node.js
base
A-service
http
A
Agen
t
base
dubbo
B
Agen
t
base
C
Agen
t
base
19. 全链路灰度发布:消息灰度
MQ Server
• 支持开源 RocketMQ Server 版本为 4.5.0 及以上,且在
broker.conf 中配置 enablePropertyFilter=true;
• 支持阿里云 RocketMQ 需要使用铂金版,需要提前创建好 group。
客户端
网关层
Messag
e
A
iOS
Message
SQL 92
filter
Message
A
Messag
e
C
B
Agen
t
C
Android
H5
x-mse-tag:gray
A
Agen
t
base
Agen
t
gray
gray
微服务网关
TopicA
用户属性
(env=gray)
TopicA
用户属性
(env=base)
x-mse-tag:base
B
x-mse-tag:gray
Agen
t
base
x-mse-tag:base
C
Agen
t
base
20. 离群实例摘除:单点故障自愈
场景一:某应用发布,灰度几台机器,由于代码逻辑写的有问题,造成线程池满,客户端调用失败。
场景二:某应用运行过程中,某几台机器由于磁盘满,或者是宿主机资源争抢导致load很高,客户端出现调用超时。
客户端摘除
• 实时性高
• 需要关注错误率阈值、隔离机器的比
例阈值,及被摘除后恢复时间
• 更灵活的摘除策略:调整权重
全局摘除:监管控一体
• 维度更加丰富
摘除后动作
• 弹性扩容替换故障机器
应用B
应用A
应用C
应用D
离群实例摘除和熔断的区别?熔断会摘掉整个后端服务,而前者只会摘除有问题的单个节点,更精细
21. 邻近路由
1. 建议多个可用区的资源分布尽量均匀
2. 兜底策略:当资源严重不均时邻近路由策略
会自动失效
3. 容灾场景时可强制跨可用区路由
治理中心
配置中心
注册中心
下发路由规则
用户
Agen
微服务
t
Agen
网关
微服务
t
Agen
t
消费者
同可用区优先路由
Agen
t
提供者
可用区A
容灾场景跨可用区路由
网关
Agen
t
消费者
同可用区优先路由
Agen
t
提供者
可用区B
Region 1
22. Spring Cloud 上云最佳路径
Spring Cloud in Alibaba Cloud
Spring Cloud开源自建
注册/配置/
服务治理
Nacos
应用监控
Skywalkin
g
限流降级
sentinel
故障演练
ChaosBlad
e
注册/配置/
服务治理
MSE
应用监控
ARMS
多活容灾/
故障演练
AHAS
开源控制台
研发关注
限流降级
故障注入
链路压测
链路追踪
服务治理
云产品控制台
限流降级 故障注入
全链路压测 微服务治理
Spring-boot
客户端调用
RestTemplate
/OpenFeign
配置
nacos-config
注册发现
nacos-dicovery
全链路压测
PTS
客户端调用
RestTemplate
/OpenFeign
Spring-boot
配置
nacos-config
链路追踪
运维关注
无侵入式Java
Agent
云产品提供
研发关注
注册发现
nacos-
discovery
23. 推空保护:服务发现高可用
场景:网络抖动,或 CoreDNS 异常,导致所有提供者与注册中心断开链接,客户端收到空地址,导致调用报错,Nacos-client
1.4.2 以上版本具备推空保护能力,但业务需要升级客户端,修改代码重新发布,成本太高。
解决办法:提供无侵入的客户端级服务发现高可用方案,无需修改业务代码,支持 Nacos/ZK/Eureka/Consul 等多种注册中心。
开启前
开启后
注册中心
2 收到空地址推送
Agen
t
者A
消费
Agen
消费
t
Agen 者B
消费
t
者C
3 客户端无法调用服务端
注册中心
1 网络抖动,或CoreDNS
异常,导致所有提供者与注
册中心断开链接
Agen
t
提供者A
Agen
t
提供者B
Agen
t
提供者C
2 收到空地址推送
3 客户端拒绝空地址推送
Agen
消费
t
Agen 者A
消费
t
Agen 者B
消费
t
者C
4 客户端正常调用
1 网络抖动,或CoreDns的
异常,导致所有 提供者 与注
册中心断开链接
Agen
t
提供者A
Agen
t
提供者B
Agen
t
提供者C
24. 微服务视角访问数据库的治理场景
慢 SQL 拖垮服务
单库/单表无法承载日益增
长的业务数据量级
慢参数查询拖垮主库性能
从微服务访问数据库的视角,在端侧进行进行治理
(client 驱动层、连接池、数据库中间件、proxy 等视角)
数据库访问按环境隔离
慢 SQL 治理
(熔断、并发控制)
分库分表+动态路由
读写流量分离
数据流量隔离
(影子库表)
25. 大纲
云原生微服务的挑战和趋势
运行态服务治理最佳实践
大纲
开发态服务治理最佳实践
OpenSergo 开 源开 放 的服 务治 理 标准
26. 多版本开发测试环境
A
B
B3
入口
网关
A2
C
Agent
C3
C2
Agent
Agent
Agent
开发环境3
开发环境2
gray
• 研发人员每个人独立部署一套环境
• 基于全链路流量控制进行逻辑隔离
• 入口请求打上标识,标识绑定应用
分组,形成规则推送到配置中心
• 大幅度降低研发成本
A1
云上 VPC
Agent
B1
Agent
C1
Agent
基线环境1
27. 多版本开发测试环境
A
B
B3
入口
网关
A2
C
C3
Agent
C2
Agent
Agent
Agent
开发环境3
开发环境2
gray
• 研发人员每个人独立部署一套环境
• 基于全链路流量控制进行逻辑隔离
• 入口请求打上标识,标识绑定应用
分组,形成规则推送到配置中心
• 大幅度降低研发成本
A1
云上 VPC
本地
B1
Agent
C1
Agent
Agent
基线环境1
ECS代理
通道服务
转发
B4
Agent
Alibaba Cloud Toolkit
ECLIPS
E
IDEA
本地环境4
28. 大纲
云原生微服务的挑战和趋势
运行态服务治理最佳实践
大纲
开发态服务治理最佳实践
OpenSergo
开源开放的服务治理标准
29. OpenSergo 定位与使命
一套开放通用的、面向云原生服务、覆盖微服务及上下游关联组件
的微服务治理标准,并根据标准提供一系列的 API 与 SDK 实现。
基于业界微服务治理场景与实践抽
象成通用标准,解决各个微服务生
态中治理概念、能力与配置不一致
的问题,以统一的 CRD/DSL 进行
治理配置,降低用户上云与维护成
本
从网关到服务框架,从数据库到缓
存,OpenSergo 针对应用链路上
的每一环都进行了抽象,场景覆盖
完整
标准化
全链路生态
覆盖
多语言异构化
企业、社区共建
无论微服务的语言是 Java, Go 还是其
它语言,无论是传统微服务还是 Mesh
架构,都可以利用同一套标准规范接入
治理,降低理解与维护成本
联合 Bilibili、Cloudwego
等多家企业、社区共同合作,
业界共建开放标准
30. OpenSergo 概览
Spec
OpenSergo
Spec(CRD)
OpenSergo
控制平面
OpenSergo
SDK/Agent
OpenSergo
开源生态
…
…
服务元信息 流量治理 数据库治理
服务注册发现 服务容错 缓存治理
…
…
gRPC endpoint
Control Plane
SDK 提供 spec 的对接 API
框架通过
OpenSergo SDK 对
接标准
通过 Sentinel 对接流
量治理能力实现
31. OpenSergo Roadmap
2022.07
标准
建设
2022.09
2022.12
2023.03
Spec v1alpha1 Spec v1alpha2 Spec v1beta1 Spec v1 (GA)
• 流量路由 • 流量染色 • 缓存治理 • 服务发现
• 流控降级 • 数据库治理 • 日志治理 • 分布式任务治理
• 服务容错 • 离群实例摘除
• MQ 治理
• 配置治理
社区
合作
…
Druid
各微服务治理领域的生态落地,与标准共建
Apache
RocketMQ
…
https://opensergo.io/
32. 《微服务治理技术白皮书》
• 阿里巴巴电商体系10余年的微服务实践经验沉淀。
• 阿里云 MSE 产品数百家企业客户成功案例总结。
• 覆盖: 基本概念介绍、底层技术原理、场景解决方案、最佳实践。
• 不仅是一本深度阐述微服务技术的书,更是一本解决微服务落地难题的书。
• 高效构建完整的微服务治理体系,提升开发效率和线上稳定性。
https://developer.aliyun.com/ebook/7565
33.
34. 服务治理的区分
开发态Dev
•
•
•
•
•
•
服务元信息
服务契约管理
服务调试
服务Mock
开发环境隔离
端云互联
测试态Test
•
•
•
•
服务压测
自动化回归
流量录制
流量回放
运行态Ops
安全态Sec
发布态
•
•
•
•
•
无损下线
无损上线
金丝雀发布
A/B Test
全链路灰度
•
•
•
服务鉴权
漏洞防护
配置鉴权
高可用
•
•
•
•
•
离群实例摘除
限流降级
同AZ优先路由
就近容灾路由
推空保护
35. 多版本开发测试环境
开发环境1
基线环境
开发环境2
http请求
http请求
http入口应用A
• 研发人员每个人独立部署一套环境
• 基于全链路流量控制进行逻辑隔离
• 入口请求打上标识,标识绑定应用
分组,形成规则推送到配置中心
• 大幅度降低研发成本
tag1
tag1
应用B v1
正常流量
RPC
应用C v1
应用D v1
应用B v1.1
tag2
tag1
tag2 应用C
灰度流量
tag1 RPC
tag1
应用D v1.1
v1.2
tag2
tag2 应用D
v1.2
36. Cloud toolkit 端云联调
应用整体环境在云端,本地服务如何安全、便捷的调用云上服务?
双向互通,代码无侵入,安全性高;
配置简单,只需提供一台 ECS 用于代理即可
注册中心
VPC
ECS
Provider
调用
云上
通道服务
转发
本地应用
Cloud Toolkit
IDEA
ECLIPSE
本地
37.
38.