背景介绍
容器化搬迁目的
跟着易盾反垃圾事务的迅速发展,事务集群的规划也在急剧增长,传统的经过物理机来布置的办法在灵活度上越来越达不到要求,首要痛点包括但不限于:资源利用率低、集群扩容/缩容本钱高、事务集群混合布置导致毛病不隔离等,因此,急需一种更好的办法来提高运维和环境管理的效率。时至今日,容器化的手法现已非常老练,而且可扩展性、敏捷性、毛病隔离等方面正是容器化的优势。同时,网易集团的云核算部分基于 K8S 研制的轻舟渠道与运维团队研制的诺亚渠道为此提供了强壮的底层支撑技能,易盾事务集群容器化可谓瓜熟蒂落。
容器化搬迁架构
搬迁的架构如下图所示,上层 nginx 分为杭州和建德两个集群,便利在不影响客户运用的情况下进行全体功用回归。事务服务悉数搬迁,触及使用集群 100+。底层中心件、ddb 和 es 公用同一集群,保证数据的一致性。
容器化搬迁流程
整个搬迁流程总共分为计划规划、模块布置、功用测验、性能测验、毛病演练、流量对比、灰度切流、DNS 切换等八个过程,下面咱们首要围绕流量对比这个过程进行打开。
痛点与困境
唆使咱们去做流量对比的原因总共有四个。
- 第一,搬迁模块多、危险高,反垃圾的检测链路很长,中心触及到许多模块,中心任何一个模块出问题都会影响最终回来给客户的检测成果,咱们的保障掩盖规模需求包括整个链路。
- 第二,弥补线上回归用例掩盖不到的场景,现在线上回归用例经过 Goapi 维护,掩盖了一切事务以及检测器,可是做不到百分百掩盖到一切的线上逻辑。需求额定的手法去做弥补。
- 第三,开发侧的诉求,在搬迁计划的评审阶段,开发就提出诉求,上线前希望能经过某种办法比对新老集群的流量,用大数据量去尽量掩盖到一切场景。
- 最后一个原因缺少效果测验手法,希望经过这个流量对比做到对效果测验的回归。
流量对比实践
计划选型
引流渠道
引流渠道是一个基于用户实际运用行为和运用数据,作为测验用例和数据的全主动接口效能东西。渠道经过将线上用户的实在流量复制并运用于主动化回归测验当中,期间经过立异的 Mock 机制,能够运用线上数据在测验环境完结增删改查一切类型的接口测验。运用海量用户数据,完结事务逻辑的高掩盖和精准掩盖, 是现有接口测验手法一种有用增益手法。引流渠道不只能够完结低本钱的日常主动化回归,同时能经过它提供的扩展才能支撑系统重构升级的主动回归。
引流渠道的优势:
- 不需求额定的开发本钱;
- 能获取到用户实在流量;
- 可视化操作、功用全面;
引流渠道的下风&危险点:
- 代码增强后使用响应时间增大、TPS 降低(易盾客户对响应时间非常敏感);
- 只支撑单使用流量录制,不支撑全链路;
- 不支撑依据条件获取指定流量;
考虑到对使用性能影响以及不支撑全链路,没有挑选引流的计划,可是这种思路值得咱们去借鉴。
自研东西
- 确认目标
P0需求:
- 不影响线上使用性能、RT、TPS 等;
- 支撑全链路流量对比;
- 支撑前史流量回放;
- 支撑指定流量获取;
P1需求:
•尽量低的开发本钱;
•支撑成果报告;
- 功用拆分&流程规划
功用拆分为四个模块,分别是数据获取、数据发送、成果比对和报告生成,各模块之间的交互流程如下图所示:
功用完结
样本获取
1. 样本来源
为了保证样本数据的实在有用而且能保持数据的新鲜度,直接把线上数据作为来源之一。QA 的音视频库房也是数据来源之一,库房里面存储了结构的各种格式和时长的音视频数据。除此之外还支撑 EXCEL 上传的办法,上传以及标记好的 Case。
2. 样本挑选
想要获取指定类型的数据,能够经过不同字段的组合设置,在获取数据的时分,会依据字段特点进行挑选,保证获取线上样本丰富度。比如:
targetId=8544&hitType=10&spamType=100&requestRegion=cn-beijing
指定了获取事务 ID 为 8544 从北京发送的数据且射中了规矩检测器且垃圾类型为色情的数据,最后获取的样本都契合上述条件。
3. 样本处理
由于原始数据的字段许多,有一些字段不影响检测效果,比如 callback、publishTime 等。这些抽取的样本会存数据库,为了减少样本巨细,需求将这些额定字段处理掉。有些场景需求和样本前史射中成果做比对,因此这儿咱们还要把本来的射中信息作为验证字段存起来,后边用来做比对。
4. 模块流程规划
数据发送
计划选型
发送数据便是经过什么办法把什么数据往哪里发,数据咱们经过上面样本获取的模块现已拿到了,接下来便是处理发送办法和发送地址的问题,这个功用正好是 Goapi 所具备的,秉承着不重复造轮子的理念,在评估过自研和直接用 Goapi 的好坏,咱们直接经过 Goapi 的 OpenApi 接口来完结数据发送的操作。
交互流程
渠道与 Goapi 交互流程大致分为 6 个过程:
- Goapi 创建数据驱动的场景用例/单用例,后边数据发送都是基于此用例;
- 获取用例 ID,在渠道增加此用例(后端会依据 ID 调用 Goapi 接口查询用例信息);
- 更新数据驱动数据(过程 3~6 是循环,直到一切样本跑完);
- 触发用例履行;
- 轮询使命履行状况;
- 获取履行成果并保存;
详细交互流程如下图:
成果比对
多环境成果比对
样本在多个环境履行完结以后,汇总履行成果依据样本 ID 和履行域名进行分组,随后依据匹配模式和匹配字段进行匹配,最后生成比对的成果存在数据库中。多环境比对的办法适用于机器资源多,环境布置便利,底层依靠的中心件是同一套场景。
前史成果履行比对
样本履行完结以后,获取原始样本的预期成果,将最新成果和预期成果做对比,最后生成比对的成果存在数据库中。前史成果比对的办法适用于环境只要一套可是样本的预期成果比较稳定的场景。