云原生微服务治理的最佳实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
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.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-23 05:46
浙ICP备14020137号-1 $Map of visitor$