商业化业务的旁路环境建设与应用实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 商业化业务的旁路环境建设与应用实践
分享人:王小冷
2. 个人简介
• 姓名:王小冷
• 所在组织:360技术中台
• 专业领域:搜索广告引擎和front测试负责人
3. 目录
01 02
• 背景 • 建设和运维
03
• 应用实践
04
• 后续规划
4. 旁路环境建设的背景
5. 线下线上环境不一致导致缺陷露出
环境的复杂性决定了线上线下环境很难保持
线上线下环境不一致的隐患
一致
灰度、全量
可行性
文件
MEM,
CPU
OS
机器环
配置不一致
配置
境
灰度、全量
小流量
下游环境不一致
业务环境
memcache
Zk, AS等
词表不一致
第三方
第三方依赖不一致
词表
依赖
下游环
境
完整服务(Shard0-ShardN)
模型服务
更新频率
实时数据
机器环境不一致
旧场景回归不全 缺陷
新场景测试不到 露出
6. 线上问题排查困难
无法确定流量走向
即使找到流量所在机器,定位具体原因的信息依然不足
线上问题
监控
用户反馈
线上走查
多机房
机房
A
机房
C
无定
位线索
流量打
向了哪台下游
机器
流量发
向了哪个机
房
机房
B
机房
D
单机房内同服务
多机器
机器
A
机器
C
机器
B
机器
D
单机器内
配置不能更改
日志信息不全
7. 旁路环境建设和运维
机器资源准备
旁路环境部署
旁路运维
8. 机器资源准备
目标
获取旁路需要的最小机器资源
模型服务N1台
主服务N2台
CGI
模型1
第三方服务N3台
zk redis
kafka
memcac
he
模型2 A B AS
模型N C D redis
各模型资源需求
各模块资源需求
机器需求清单
资源申请和审批
各服务资源需求
机器资源和配置清单(机器XX台,cpu,mem,os配
置)
依赖:同机房
9. 旁路环境部署--部署方案
机器资源清单
机器1(配置/机房)
机器2(配置/机房)
机器N(配置/机房)
Hulk对每一台旁
路机器分组管理
通过打tag标记
线上服务梳理
模块(CPU/MEM/OS/QPS)
模型( CPU/MEM/OS )
第三方依赖(资源需求)
机器用途
10. 旁路环境部署—模块部署
单模块部署考虑点如下:
•
•
•
•
•
•
•
•
•
Bin文件同步
Bin软链和线上一致
依赖lib同步
日志、打点目录同步
主配置
下游链接配置
第三方服务链接配置
远程日志配置
小流量实验配置
Bin 脚本
配置 词表
•
•
•
• 模块启动脚本
词表同步脚本
过期词表删除脚本
日志删除脚本
•
•
•
•
• 一般词表(多种格式)
软链词表
基线词表
快照数据
实时消息 & offset
11. 旁路环境部署—模块部署
单模块部署重点关注需要修改的配置和词表相关脚本
修改旁路的下游模块
onlin
e
JUST
COPY
配置
修改旁路的远程日志机
生成唯一的kafka Topic
COPY AND
MODIFY
旁路
• 代码仓库配置更新
• Apollo配置更新
• 自动上线脚本更新
修改旁路的外部服务
实时消息同步 避免丢消息
1. 同步offset
2. 同步消息
词表同步 保持软链
1. 打包
2. Copy&解压
词表更新
词表删除 Crontab任务删除
词表
Crontab任务同步
水滴平台同步
/etc/cron.d同步
Transfer集中分发
常驻进程同步
12. 旁路环境部署—模型&第三方服务部署
模型较大(百G),多机部署,并保障N台机器的服务构成一个完整的模型副本
模型20+,场景丰富,分别部署
IP(多个)、PORT
主流量
模型名
PC
CTR
小流量
CVR
OCPC
……
主流量
MOBILE
小流量
进程名,部署路径
IP(多个)、PORT 旁路模型
进程名,部署路径 ip1:port1
IP(多个)、PORT ip2:port2
进程名,部署路径 ipN:portN
IP(多个)、PORT
进程名,部署路径
第三方服务根据部署手册部署,并提供ip:port供模块调用
13. 旁路运维—环境一致性
旁路导致环境不一致的原因分析:
解决方案:
bin
上线
配置
上线
导致
配置上线
场景简单
直接从源头预防
旁路嵌入
上线流程
手动修改配置
配置同步服务未开启
词表
词表上线
手动修改词表
词表同步脚本问题(未运行,运行失败,
运行时间差异)
其它
原因
原因复杂,个性化
从结果侧监控
一致性监
控
14. 旁路运维—旁路嵌入上线流程
流程如图:
旁路上线
否
紧急需求?
开启上线
是
旁路流水线回归
旁路手动验证
紧急上线流程
占用旁路环境,生成报告,释放旁路
环境,旁路环境回滚到全流量状态
检验通过?
否
是
灰度上线
旁路承载线上验证功能
检验通过?
否
旁路和线上主流量环境一致
是
全量上线(含旁路)
旁路验证期间监控不生效
结束
15. 环境运维—一致性监控
词表一致性监控
获取词表list
从git获取模块配置
解析配置,根据模块先验知
获取文件md5或大小
遍历词表list
Deeplink
比较的词表
获取最终的词表list
从redis获取线上和旁路机器
是
获取词
表路径
的词表md5或者大小
否 比较一致性并生成报告
小于1M N次不一致发到报警组
识,获取词表list
根据一致性分析删去不需要
一致性CHECK
是
获取md5
否
获取大小
以server的形式提供服务
分析报警的准确率,召回
率,得到不需要比较一致性
的词表
redis(md5或大小)
不需要比较一致性的词表
16. 应用实践
基于真实脱敏流量
拦截三方考虑盲区
基于小流量实验的
异常测试
问题排查
线上一致性监控
17. 基于真实脱敏流量拦截三方考虑盲区
问题:
业务复杂
流量复杂
引擎/排序/召回 PC/MOB/垂搜
模块10+ 亿PV/DAY
复杂历史逻辑
主流量/实验流量
解决方案:
基于真实脱敏流量拦截三方考虑盲区!
获取线上流量
PC MOB
垂搜 ……
流量改写
旁路
统计报告
分析报告
发现问题
18. 基于真实脱敏流量拦截三方考虑盲区
典型应用场景:
为什么是旁路?
固定广告位或者样式需求
新增xx样式,固定出首位
xx样式,固定出左侧
小流量试验下,只能出A,B,C样式
特定流量下,新样式A,B,C生效
字段限制类需求
xx字段不能为空,且大于固定长度
xx字段长度小于80
xx数组长度大于2小于4
新功能是否生效
xx组件是否能出
应用效果:
借助旁路环境,2023共发现三方考虑盲区
10+
19. 基于小流量实验的异常测试
问题:
线上实验参数按需配置,而部分实验参数存在较久,回归测试时只根据线上的参数状态进行测试,有新建实验
后引起程序崩溃的风险
解决方案:
线上脱
敏流量
基于实验参数
进行流量改写
改写后
流量
旁路环境
压力
测试
20. 基于小流量实验的异常测试
异常流量生成:
Git获取配置
应用效果
获取小流量实验参数
线上流量
针对每一个实验参数
整型
Bool型
True/fal
se
• 沉淀到流水线,例行运行
浮点型
• 发现2+COREDUMP
0 .0/随机
N个浮点
数
0 /随机
N个整数
单独实验参数
实验参数组合
否
实验参数list
随机组合
小流量实验流量文件
实验参数组合
达到阈值
21. 问题排查
流量问题排查
流量问题排查流程
开始排查,旁路设置使用标记
特定广告无展现
广告展现样式异常
场景一:
流量问题
排查
旁路压测获取
问题流量
否
旁路辅助定位排查
通过ES能够获
取问题流量
是
问题流量运行
多次
否
稳定复现
是
打开接口开关
定位问题模块
否
能够确定出问
题的模块
是
线上问题或者
用户反馈
复现问题,获
得请求流量
线上环境无法
定位具体原因
打开日志开关
日志定位
Debug定位
结束排查,恢复旁路环境
22. 问题排查
实验问题排查
实验问题排查流程
实验效果不理想
开始排查,旁路设置使用标记
批量脱敏流量改写和下发
场景二:
实验问题
排查
旁路辅助定位排查
对照流量
实验流量
实验接口返回
对照接口返回
DIFF
实验上线
效果不符合
预期
大盘无法分
析具体原因
分析diff,定位原因
结束排查,恢复旁路环境
23. 线上一致性监控
契机:
旁路监控发现线上词表更新问题
旁路监控报警
旁路词表更新OK
线上未更新
人工check
有必要进行线上一致性监控
实现方案:
下载master
代码,获取
模块配置
获取线上全量
机器列表
根据配置获
取线上模块
词表&bin 服
务
每台线上机器
定时运行脚本
redis(存放
词表Md5或
者大小)
MYSQL(每
次一致性
check结果)
进行一致性
check
判断结果,N
次不一致报警
24. 线上一致性监控
配置一致性监控
Bin一致性监控
开始
开始
灰度机器
list 非灰度机
器list
获取bin
大小 获取bin
大小
redis
check一致性并
报警
redis
check一致性并
报警
灰度机器list 灰度机器list
各机房分别判断 各机房分别判断
个性化配置归一化 个性化配置归一化
获取md5 获取md5
redis redis
check一致性并报警 check一致性并报警
bin一致性监控:需要考虑灰度上线
配置一致性监控:需要考虑灰度上线,机房分布,个性化配置
25. 线上一致性监控
监控发现的典型问题:
• 因网络问题downloader失败导致lock,后续无法更新(TRUE)
• 机器重启后更新脚本未开启(TRUE)
个别机器的词表不一致
• 词表位置更换,未及时更新同步脚本(TRUE)
• 机器不再承载流程,更新脚本未开启(FALSE)
词表不
一致
• 手动上线词表,未同步到所有机器(FALSE)
• 同步词表时,中转机上词表未完成更新(TRUE)
大部分机器词表都不一致
• 词表较大时,check时词表还在更新过程中(FALSE)--升级脚
本,连续N次不同报警
灰度上线(FALSE)
bin不一
致
升级脚本
部分机器推全失败
(TRUE)
手动改bin(TRUE)
应用效果:一致性监控发现问题10+
26. 后续规划
27. 后续规划
全链路多渠道旁路建设
丰富使用场景
28. THANK YOU