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