阿里QA导读:火箭发射、奥运会开幕式、双十一0点大促(或视频、OTA等网站的关键营销活动),面临这些极其重要的时刻,负责人总是会想法设法保证稳定,最理想情况是可以真实模拟演练。众所周知,发射和开幕式无法模拟或者成本很高,但在软件领域这却成为可能,阿里巴巴技术质量的星斩、靖北、晟枫、成章同学为我们带来“安全、便捷、0入侵的未来可测解决方案”。
以商品优惠为例(如下图)
正常情况下,因为当前时间和活动时间不重叠,自然看不到该活动;
穿越逻辑:设法修改当前时间(java中大部分场景体现在new Date())和活动时间重叠;可实现的手段有:修改系统时间、修改业务代码逻辑(通过入参方式获取等);
边界和限制(风险)
暂且称类似链路为风险链路(文章后续也会用到该概念,请关注,文章尾部有一幅图片详细介绍了风险链路的各种分支情况)
当前活动丢失,线上真实的营销活动不生效;
如果上层代码使用营销活动的逻辑未进行严格时间校验,则会变成提前享受活动
通过链路路口路由到一个特定环境中,该环境只有特定的白名单才能调用进来,不影响线上普通用户。通过类似修改jvm时间并重启的方式,起到穿越的效果。
好处:对业务系统无入侵;
缺点:
会对所有的new Date()进行时间修改,在风险路径下会影响线上功能;
每次使用准备较长,且如果测试不同的时间点,需要重启多个应用,成本较大;
保证环境隔离性有较大的成本和风险,包括异步消息和任务等;且除了入口没有在各应用上做白名单校验;
以二方库的形式提供给原本需要改服务器时间的应用,只需引入二方库并用其中的futureUtils.getdate()替代new Date()方法即可,通过diamond控制白名单和指定时间(下图红色背景部分)
diamond注释:管理持久配置的系统,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据
优点:只需要操作链路中关键节点,无流量隔离风险和其他风险,易用性有所提升。
缺点:对业务代码有少量的入侵。
整体思路如下图:
1)通过字节码增强方式解决上表3.1问题,即把所有new Date()返回值mock到穿越时间。但是会碰到2个安全问题(即上表中1.1和1.2)
2)在前置链路中做特定标识并向下透传
在链路中某一处可以通过固定的方式取到用户id,如果跟预期的测试id相一致,则标记染色后通过中间件向后续链路透传。(不同公司不同架构,因此如何取到用户id的方式也不同)
对应用3的接口1进行标记染色,并向下透传。
3)对步骤1中的new Date()增加逻辑判断,只有符合白名单的、且从期望链路过来的,才进行mock。
配置链路信息
链路中包含以下节点信息:
对应原理图中,这两个节点分别分别起到了获取用户id和标记链路的作用。
在配置好链路和节点信息后,可直接点击链路列表上的“部署”即可满足把月光宝盒注入代码部署到到对应节点的应用。可在节点信息的部署状态中查看各节点ip的部署情况。模块功能特点:
只影响某个节点,而非整个应用;
每个节点上面都包含了白名单的控制,更加安全可靠;
同一链路同一时间点可支持不同账号测试不同未来时间;同一账号在不同链路,互不影响,相互隔离。
通过上述介绍,月光宝盒可以支持链路的提前创建,并提供了api完成链路中节点的部署和针对某账号的激活,笔者便思考能否结合业务系统,提供运营自检能力。整体解决方案如下,并在零售通的首页和红包雨场景下进行应用
步骤如下:
技术配置具体业务场景对应的月光宝盒链路,创建自动化用例并把触发链接与前面的链路id关联,最后在业务设置系统上提供“预览验证”和“确认正常”的按钮,与月光宝盒的链路id关联。
运营配置完成后,可通过预览验证看到在未来时间活动生效下的价格、效果等信息。
PS:原来大促中发现运营配置错误时,听到的最常见的一个说法是这个系统太复杂了,要设置系统1获得id1然后再设置系统2获得id2再¥%……&。现在没有理由了
下图是零售通红包雨设置场景,因为配置复杂度较高易出错,因此优先试点。关联了零售通无线自动化平台天雀的效果。(部分场景可直接通过自动化断言)
目前基础产品建设已经完成,支持了零售通双11中导购、互动、营销等多个场景及B系其他bu的部分场景,产品支持同一链路同一时间点下不同账号测试不同未来时间;同一账号在不同链路,互不影响,相互隔离.针对不可穿越的链路(如缓存风险),探索验证并提供了高效的改造解决方案。
未来一方面会赋能更多场景支持技术人员的穿越验证;另一方面 会跟业务系统打通与自动化相关系统打通,让运营进行关键配置时,就能实时查看并自动验证未来的效果。
本文由零售通技术团队多位作者共同完成,感谢技术风险部、淘宝和企业金融相关同学在过程中多次有建设性的讨论和jvm_sandbox团队同学相关同学支持。
欢迎有兴趣的小伙伴加入零售通技术团队,诚招服务端、客户端、数据算法及工程效能测试工程师和java开发工程师,微信:bondyu001 邮箱:chengzhang.yucz@alibaba-inc.com
关注「阿里巴巴技术质量」阅读更多