vivo互联网全链路多版本环境落地实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. vivo互联网全链路多版本环境落地实践 吴清华 vivo互联网DevOps架构师
2. 目录 CONTENTS Part 01 第一部分|背景&问题 Part 02 第二部分|解决方案思路 Part 03 第三部分|关键技术实现 Part 04 第四部分|业务实践与效果 Part 05 第五部分|未来规划
3. 一、背景&问题 我们遇到的问题 2020年,仅 vivo某业务的一个项目——因测试环境问题导致的转测延期, 占总的转测延期比率达67%!策划验收阶段因开发环境导致延期超10次! 环境不稳定 测试环境混乱 服务版本错综复杂,依赖关系理不清,到底测试的是哪一套 环境?心里都没底 多个测试环境,权限没管控,nginx配置、库表等任意修改。 组件线上线下差异化导致线上问题 环境占用严重 利用率低 版本并行,环境冲突严重,常常出现环境占用,搭建新环境 复杂,影响版本交付 为了避免阻塞,团队倾向于独占环境,但这些环境大部分时间 处于闲置状态,利用率极低,服务器资源利用率低,20%左右
4. 一、背景&问题 我们遇到的问题 个性问题 共性问题 环境不稳定 服务拆分 服务数量膨胀 测试环境乱 链路冗长 独立部署 软件 开发架构 微服务化 版本多 敏捷流程 软件 开发流程 响应变化 环境不稳定 环境占用严重 链路变长 利用率低下 迭代迅速 资源浪费 版本并行
5. 目录 CONTENTS Part 01 第一部分|背景&问题 Part 02 第二部分|解决方案思路 Part 03 第三部分|关键技术实现 Part 04 第四部分|业务实践与效果 Part 05 第五部分|未来规划
6. 二、解决方案思路 什么叫全链路多版本环境管理 三大核心利刃能力 第一把利刃 第二把利刃 第三把利刃 全链路能力-还原战场 多版本并行-终结战争 环境自动化管理-降本增效 什么是全链路? 如何让10个版本同时推进? 从前端到网关,从微服务到数据库/缓存/ 消息队列所有组件即时就绪! 让每个版本有独立沙箱环境,每个版本环 境实现流量隔离 前端 搭建 伸缩 回收 共用 网关 微服务 缓存 实现全生命周期自动化环境管理 数据库 过去 现在 修复紧急bug等 测试环境释放,业 务损失扩大 热修复即时拉起 环境,新功能开发 同步进行
7. 二、解决方案思路 业务目标示意图 传统软件开发测试环境管理 测试环境一 user1 用户中心 积分中心 测试环境二 user2 活动中心 用户中心 积分中心 测试环境三 活动中心 user3 用户中心 积分中心 活动中心 全链路能力,从终端到网关再到微服务 终端 终端配置的指向 feature1环境 H5 终端配置的指向 feature2环境 WEB Header: env = feature1 流 量 染 色 APP 特性环境 env=feature1 Header: env = feature2 统 一 网 关 平 台 测 试 环 境 用户中心 活动中心 基线环境 用户中心 积分中心 特性环境 env=feature2 用户中心 积分中心 图例说明: feature1环境请求链路图 活动中心 feature2环境请求链路图 多 环 境 并 行
8. 二、解决方案思路 全链路多版本业务架构图 全链路能力 应用层 功能 模块层 环境管理 标签管理 流水线编排 流量隔离 容器部署 流水线模板管理 基线环境管理 环境标签管理 环境流水线编排 路由配置 容器部署调度 模板生成流水线 特性环境管理 标签权限管理 触发流程执行 HTTP路由同步 资源池管理 模板关联管理 环境治理 环境打标 环境实例管理 Dubbo路由同步 流程日志分析 MQ路由同步 容器信息采集 通讯 协议层 资源层 资源伸缩 模板管理 环境链路查询 数据 采集层 多版本并行 日志监控采集 HTTP/HTTPS、Dubbo、MQ等 MySQL Redis 容器资源(环境资源池) 弹性伸缩 分布式 链路系统
9. 目录 CONTENTS Part 01 第一部分|背景&问题 Part 02 第二部分|解决方案思路 Part 03 第三部分|关键技术实现 Part 04 第四部分|业务实践与效果 Part 05 第五部分|未来规划
10. 三、关键技术实现 三大核心技术 01 环境编排 02 资源弹性 03 流量隔离
11. 三、环境编排 vivo CICD平台 vivo CICD流水线 vivo CICD流水线是企业级、自动化的持续集成和持续交付工具,通过可视化编排CI/CD流程, 将构建、部署、测试、管控等组件化能力进行编排和串联,支持多个服务的一键编排, 完成从开发到上线过程的自动化流程。 多个微服务的编排 并行执行 Service Service Service Service 多版本并行支持 微服务依赖管理 容器化快速部署 Service 全链路集成能力 环境隔离与复用 Service 串行执行 Service
12. 三、弹性资源 vivo容器部署 • vivo容器部署平台是云原生转型的核心引擎,通过 标准化容器镜像、容器部署流程 容器部署流程 • 解决了传统部署中的环境差异、 资源浪费与运维复杂度问题 • 其能力覆盖开发、测试、生产全流程,已成为vivo 实现高效 DevOps 和持续交付的必备基础设施 容器化部署资源利用优势 EC2 Kubernetes Node Node 容器自动扩缩容机制 Kubernetes cluster Scaled Object Kubernetes API Server App3 App2 Register+ Trigger and Scaling definition Horizontal pod autoscaler Metrics adapter 1->n or n->1 App1 App1 Controller 0->1 0r 1->0 </> Workload Scaler Admission Webhooks Any Events? External Trigger source
13. 三、流量隔离和流量染色 什么叫流量隔离&流量染色 流量隔离是将带有环境标识的流量转发到对应的环境中,也就是将不同的开发或测试活动在对应的特性环境中流转。 其中两个核心的概念:流量隔离和流量染色 流量隔离示意图 维护关联的过程就是流量隔离 通过CICD编排部署的多个版本的特性环境 维护了环境和实例的关系 feature1:ip1、ip2 feature2:ip3、ip4 feature3:ip5、ip6 流量染色 特性环境 客户端 feature1的服务实例:ip1、ip2 南北流量 HTTP env:feature3 env:feature1 流量路由 管理平台 东西流量 feature1的服务实例:ip1、ip2 env:feature2 feature1的服务实例:ip1、ip2 服务器 HTTP 服务器
14. 三、流量隔离 CICD流水线平台 环境编排&环境标签配置 容器化平台 进行容器部署 流量统一管理平台 vivo网关 统一平台 建立监听 创建CRD 监听CRD init Container 创建 实例资源 更新实例的IP和端口 Dubbo服务治 理平台 实例和环境 标签分组 MQ流量 网关平台 实例和环境 标签分组 进行部署&设置环境标签到实例参数 业务容器实例 部署&删除触发 实例和平台建立长链接建 & 标签存放连接参数v_env_tag 实例和环境 标签分组
15. 三、流量染色 HTTP请求染色使用的是在请求头中添加环境信息, 如env_tag : feature2 推荐的代理工具有Charles和chrome浏览器插件ModHeader 解析请求头,根据env_tag信息转发到对应的实例上 特性1环境-feature1 vivo 统一访问平台 HTTP 用户中心 活动中心 基线环境 流量染色 用户中心 Dubbo 服务治理平台 特性2环境-feature2 用户中心 dubbo需要用户调用接口之前使用 RpcContext.getContext().setAttachment("dubbo.tag","feature1") 进行设置环境标签 会员中心 会员中心 通过RpcContext.getContext().getAttachment("dubbo.tag")获取到环境信息, 然后转发到对应的应用实例上 活动中心
16. 三、流量染色 生产消息 Producer mq-proxy会将消息中的 环境标签写入到 消息user-property中 1 启动 mq-proxy 连接属性v_env_tag 带上环境标签 消息消费 1 2 mq-broker 订阅 消息消费 通过routingKey 进行过滤消息中的标签信息 进行过滤 业务启动 2 生产消息 agent进行消息头 v_env_tag传递 启动 Consumer 1 2 带环境标签的信息 直接传递 消息生产 消息消费
17. 三、流量染色 HTTP调用Dubbo Dubbo调用MQ 基线环境 获取header中的 env_tag未匹配到 读取Attachement中 dubbo.tag 未匹配 用户中心 读取user-property 未匹配 积分中心 活动中心 特性环境:feature1 匹配到 feature1 vivo统一访问平台 客户端 用户中心 Dubbo 请求 读取header中的 env_tag 暂存ThreadLocal Dubbo路由SDK 匹配到 dubbo.tag 将环境参数设置 到Attachment dubbo.tag中 调用链Agent 流量的调用链路为--http-->用户中心-dubbo->积分中心-mq->活动中心 积分中心 MQ 消息 读取Attachment中的 dubbo.tag 暂存ThreadLocal mq-proxy 匹配到 user-property 设置到连接参数v_env_tag中 将信息写到消息的user-property中 调用链Agent 活动中心
18. 三、vivo全链路多版本环境管理实现-流量染色 全链路多版本环境管理 环境编排 弹性资源 流量隔离 流量染色
19. 目录 CONTENTS Part 01 第一部分|背景&问题 Part 02 第二部分|解决方案思路 Part 03 第三部分|关键技术实现 Part 04 第四部分|业务实践与效果 Part 05 第五部分|未来规划
20. 四、业务实践与效果 全链路多版本:效率与并发的飞跃 环境搭建效率提升 传统环境搭建 版本迭代并发量提升 全链路多版本 传统环境 1 2人天 分钟级 2 全链路多版本 3 3套环境 全链路多版本技术显著提升开发效率,大幅增加迭代速度 1 2 3 4 5 6 7 8 9 9套特性环境
21. 目录 CONTENTS Part 01 第一部分|背景&问题 Part 02 第二部分|解决方案思路 Part 03 第三部分|关键技术实现 Part 04 第四部分|业务实践与效果 Part 05 第五部分|未来规划
22. 五、未来规划 环境即服务平台建设 非活跃环境自动回收 全链路环境监控与可观测性 研效环境 标准化 资源成本 高效化 成本可视化与归因分析 环境治理与合规自动化 全链路多版本环境管理的未来规划不仅是技术层面的升级,更是我们研发管理理念的转变
23. 谢谢!Q&A

trang chủ - Wiki
Copyright © 2011-2025 iteam. Current version is 2.146.0. UTC+08:00, 2025-10-17 14:30
浙ICP备14020137号-1 $bản đồ khách truy cập$