月光宝盒-未来时间可测性解决方案

简介: 阿里QA导读:火箭发射、奥运会开幕式、双十一0点大促(或视频、OTA等网站的关键营销活动),面临这些极其重要的时刻,负责人总是会想法设法保证稳定,最理想情况是可以真实模拟演练。众所周知,发射和开幕式无法模拟或者成本很高,但在软件领域这却成为可能,阿里巴巴技术质量的星斩、靖北、晟枫、成章同学为我们带来“安全、便捷、0入侵的未来可测解决方案”。

截屏2021-11-24 上午10.39.06.png

阿里QA导读:火箭发射、奥运会开幕式、双十一0点大促(或视频、OTA等网站的关键营销活动),面临这些极其重要的时刻,负责人总是会想法设法保证稳定,最理想情况是可以真实模拟演练。众所周知,发射和开幕式无法模拟或者成本很高,但在软件领域这却成为可能,阿里巴巴技术质量的星斩、靖北、晟枫、成章同学为我们带来“安全、便捷、0入侵的未来可测解决方案”。

1 未来时间可测性的基本原理

以商品优惠为例(如下图)

  • 正常情况下,因为当前时间和活动时间不重叠,自然看不到该活动;
  • 穿越逻辑:设法修改当前时间(java中大部分场景体现在new Date())和活动时间重叠;可实现的手段有:修改系统时间、修改业务代码逻辑(通过入参方式获取等);

image.png

now

now

营销活动时间范围

时间


边界和限制(风险)

如果某功能链路是通过缓存查询活动(且穿越用户第一次访问),则存在以下两种风险:

暂且称类似链路为风险链路(文章后续也会用到该概念,请关注,文章尾部有一幅图片详细介绍了风险链路的各种分支情况)

  1. 当前活动丢失,线上真实的营销活动不生效;
  2. 果上层代码使用营销活动的逻辑未进行严格时间校验,则会变成提前享受活动

image.png

now

Text

营销活动时间范围

时间

营销活动时间范围2

2 现有解决方案和优缺点分析

2.1 隔离环境方案

通过链路路口路由到一个特定环境中,该环境只有特定的白名单才能调用进来,不影响线上普通用户。通过类似修改jvm时间并重启的方式,起到穿越的效果。

image.png

隔离环境,只有

普通线

特定白名单用户

入口路由

上环境

才能路由进来.

应用1

应用1

应用2

应用2

应用3

应用3

好处:对业务系统无入侵;

缺点:

  1. 会对所有的new Date()进行时间修改,在风险路径下会影响线上功能;
  2. 每次使用准备较长,且如果测试不同的时间点,需要重启多个应用,成本较大;
  3. 保证环境隔离性有较大的成本和风险,包括异步消息和任务等;且除了入口没有在各应用上做白名单校验;

2.2 零售通二方库解决方案

以二方库的形式提供给原本需要改服务器时间的应用,只需引入二方库并用其中的futureUtils.getdate()替代new Date()方法即可,通过diamond控制白名单和指定时间(下图红色背景部分)


diamond注释:管理持久配置的系统,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据


优点:只需要操作链路中关键节点,无流量隔离风险和其他风险,易用性有所提升。

缺点:对业务代码有少量的入侵。

image.png

用二方库的

FutureUtils.getDate(userld)

替代newdate

产品控制台

二方库

diamond总控

是否是预发环境

用户白名单

返回JVM时间

返回指定时间


3 未来时间可测的3大要求

image.png

核心

补充说明

优先级

具体点

难点

L.缘存风险(只能进行锋路级别穿否则穿越数据可能影响正常缓存,造成线上功能异常;

P1

安全

P1

确保线上流量或非测试用户的绝对安全;

1.2每个节点,白手单校验

链路较长且依赖底层,则第一次梳理配置成本较高(一次性)

P2

便捷

2.1链路梳理成本低

测试过程中测试不同时间,且链路间不互相影响,因此必须快速P2

2.2不同时间,不同链路切换成本

生效,也是进行穿越自动化的基本要求;

P2

2.3环境ready成本

PI

整个产品方案的基本要求

0入侵

3.1不入侵可以修改newDateO

否则只有业务改造,该链路才支持穿越:

失去很多应用场景

3.2有缓存风险时,如何0入侵穿越:

普通可用性要求,否则每个链路都要写不同注入逻辑;

3.3如何通用性的获取用户白名单:

4 月光宝盒解决方案

月光宝盒目前已解决上述3大难点中的8个问题点,原理如下,过程中会用到一个关键的工具:jvm_sandbox,它实现了一种在不重启、不侵入目标JVM应用的AOP解决方案,是阿里已经开源的一个软件。

具体原理:有以下两个调用链路,其中链路2是风险链路,穿越后会影响线上功能。应用3中包含了两个hsf方法即需要代码注入(含new date() 的关键逻辑),其中链路中应用2是不需要做任何处理。

image.png

代码注入1:从链路的某个节点获取用户id

判断是否与期望的测试账号id匹配,如匹

代码注入2:对该接口的调用进行染色标记

配则标记并向后续链路传递.

并向后续链路传递;

链路1

接口1

代码注入3:对newdate构造函数进

行字节码增强,只有同时包含白名

单标记和安全接口标记的链路,会

应用3

应用2

应用1

对newdate的返回值进行mock;

接口2

接口1与接口2均含有new

链路2

Date(逻辑,但是接口2不能注

入,否则可能引起功能问题;

整体思路如下图

1)通过字节码增强方式解决上表3.1问题,即把所有new Date()返回值mock到穿越时间。但是会碰到2个安全问题(即上表中1.1和1.2)

  • 如何只对某个账号的进行mock(白名单过滤),即不能影响非穿越测试账号;
  • 如何只对链路1的new Date()进行mock,而链路2的不mock,即不能影响功能;

2)在前置链路中做特定标识并向下透传

  • 在链路中某一处可以通过固定的方式取到用户id,如果跟预期的测试id相一致,则标记染色后通过中间件向后续链路透传。(不同公司不同架构,因此如何取到用户id的方式也不同)
  • 对应用3的接口1进行标记染色,并向下透传。

3)对步骤1中的new Date()增加逻辑判断,只有符合白名单的、且从期望链路过来的,才进行mock。


基于上述思路可手动对某条链路功能进行穿越测试,月光宝盒把上述内容进行了产品化,同时过程中通过产品的设计和选型也部分解决了便捷性问题(即上表中的2.2和2.3);整体产品结构和部分demo如下所示;结合上图的原理及下图 “月光宝盒”的产品功能和使用步骤可以方便理解。

image.png

业务系统

自动化平台

应用1

月光宝盒平台

注入

应用与节点管理

链路自动梳理

链路管理

应用:

模块

lst-targetad

代码

部薯/激活

缓存风险

一键激活/失效

一键部署

自动排除

测试账号和时间

中间应用n

注入

jivm-sandbox

互动应用

模块

代码

4.1 添加链路&设置节点信息模块

配置链路信息

image.png

慢作

创际时间

负五人

谱路名称

归属bu

202008210953:03

红包南锁路

查看节点部香激活滩试

未厨香

查看节点部著激活薄试

202008210953:03

柏奖售路

未动店

查看节点部暑激活渊试

2020-09-141107:43

摆素标签展示

末秘

链路中包含以下节点信息:

image.png

查看节点

类型

英名

节点名

方法名

所属bu

应用名

已激活

零售通

lst商品标签链路

INTERFACE

已漱活

已激活

lst搜索结果页标

未部著

零售通

ENTRANCE

未部署

对应原理图中,这两个节点分别分别起到了获取用户id和标记链路的作用。

4.2 部署月光宝盒的 jvm_sandbox实现模块

在配置好链路和节点信息后,可直接点击链路列表上的“部署”即可满足把月光宝盒注入代码部署到到对应节点的应用。可在节点信息的部署状态中查看各节点ip的部署情况。模块功能特点:

  • 只影响某个节点,而非整个应用;
  • 每个节点上面都包含了白名单的控制,更加安全可靠;
  • 同一链路同一时间点可支持不同账号测试不同未来时间;同一账号在不同链路,互不影响,相互隔离

点击“激活测试”后可输入用户名和要测试的未来时间,随即可进行功能测试;

image.png

激活测试

X

账号:

失效

检测

b个人测试账号006

时间:

请选择日期

取消

确定

4.3 链路梳理成本和缓存问题


从上述原理图中看出,我们在整条链路中只需要关注少数几个应用做增强,大量的链路是无需关心的,那么如何识别出需要注入的应用呢?尤其里链路涉及到其他底层BU的时候,梳理和识别会产生一定的使用成本;

如果正好碰到了风险链路,是不是只能做业务系统的改造排除风险,才能使用呢;如果不解决会大大减少月光宝盒的应用场景。

上述两个问题月光宝盒项目组也已经通用化解决,目前正在融入产品建设中,预计11月底12月初可用,支持双12的场景。

4.4 链路梳理成本和缓存问题

通过上述介绍,月光宝盒可以支持链路的提前创建,并提供了api完成链路中节点的部署和针对某账号的激活,笔者便思考能否结合业务系统,提供运营自检能力。整体解决方案如下,并在零售通的首页和红包雨场景下进行应用


步骤如下:

image.png

2.自动化用例的

3.业务场景

1.月光宝盒链路Id

详细触发链接

技术配置

月光宝盒

业务系统

1,部署和激活

传入时间

预览验证

链路

系统层面

2,运行相关自

动化用例

确认正常

运营操作

&自检

跳转

让运营同学确认

(签字画押)

用户感知层面

真实页面截图

(自动化运行结果页)

  1. 技术配置具体业务场景对应的月光宝盒链路,创建自动化用例并把触发链接与前面的链路id关联,最后在业务设置系统上提供“预览验证”和“确认正常”的按钮,与月光宝盒的链路id关联。
  2. 营配置完成后,可通过预览验证看到在未来时间活动生效下的价格、效果等信息。

PS:原来大促中发现运营配置错误时,听到的最常见的一个说法是这个系统太复杂了,要设置系统1获得id1然后再设置系统2获得id2再¥%……&。现在没有理由了

 

下图是零售通红包雨设置场景,因为配置复杂度较高易出错,因此优先试点。关联了零售通无线自动化平台天雀的效果。(部分场景可直接通过自动化断言)

image.png

序列号:FEC5T19A16024125

W:andrcid

苏统版本:10分桥年10802340

迅尚信市:

ID:93

说籽状态

异宁0]

失度(0)

版功门7

全韵(8

Tins:点击页面标恩可以显示不同设备对比图

器等待10秒

右江第二次

账侧计时5秒

右沿第一次

左滑萄一次

左沿第二次

嗪501

?

?

双有纸青红S

红包即将来袭

4.5 产品最新进展

  1. 目前基础产品建设已经完成,支持了零售通双11中导购、互动、营销等多个场景及B系其他bu的部分场景,产品支持同一链路同一时间点下不同账号测试不同未来时间;同一账号在不同链路,互不影响,相互隔离.针对不可穿越的链路(如缓存风险),探索验证并提供了高效的改造解决方案。
  2. 未来一方面会赋能更多场景支持技术人员的穿越验证;另一方面 会跟业务系统打通与自动化相关系统打通,让运营进行关键配置时,就能实时查看并自动验证未来的效果。

5 结束语

  1. 本文由零售通技术团队多位作者共同完成,感谢技术风险部、淘宝和企业金融相关同学在过程中多次有建设性的讨论和jvm_sandbox团队同学相关同学支持。

  2. 欢迎有兴趣的小伙伴加入零售通技术团队,诚招服务端、客户端、数据算法及工程效能测试工程师和java开发工程师,微信:bondyu001 邮箱:chengzhang.yucz@alibaba-inc.com



 

image.gif截屏2021-11-24 上午10.36.34.png

关注阿里巴巴技术质量阅读更多

 

 

相关文章
|
3月前
|
人工智能 运维 监控
运维工程师要如何才能适应IT技术持续迭代更新
随着互联网的快速发展以及云计算、AI、物联网等行业的快速发展,传统的运维已经无法适应时代的要求,运维工作快速向标准化运维、自动化运维、敏捷运维、智能运维等阶段进步。
42 0
|
7月前
|
NoSQL Java 应用服务中间件
时间驱动:探索计时器方案和革命性的时间轮技术
本文将带领你深入了解计时器的原理和应用场景,并详细介绍时间轮技术的革命性特点。文章首先解释了计时器的概念和重要性,以及在各种应用中的广泛应用,如任务调度、事件触发和性能监控等。接着,文章引入了时间轮作为一种创新的时间管理工具,其能够以环形结构高效地管理和触发定时任务。你将深入了解时间轮的工作原理、数据结构和相关算法,以及如何利用时间轮提高应用程序的性能和响应能力。
51 0
|
9月前
|
监控 安全 数据库
如何持续、正确、安全的发布?
如何持续、正确、安全的发布?
58 0
|
关系型数据库 MySQL Java
还在为时区问题发愁?获取的时间与中国时间差八小时怎么办?史上最全的解决方案总结
还在为时区问题发愁?获取的时间与中国时间差八小时怎么办?史上最全的解决方案总结
|
弹性计算 运维 测试技术
阿里云林小平:如何实现应用的持续发布?
脚本化、版本化、可重放、可反馈
阿里云林小平:如何实现应用的持续发布?
|
Unix
strtotime应用(案例:给未来时间添加对应的时间)
strtotime应用(案例:给未来时间添加对应的时间)
187 0
strtotime应用(案例:给未来时间添加对应的时间)
|
运维 自然语言处理 网络协议
驿公里洗车机运维与系统更新时间缩短50%
阿里云AIoT联合硬件合作伙伴,输出预置AliOS Things物联网操作系统的集控制,通信,多媒体一体的硬件产品,帮助用户完成从传统PLC控制系统到智能数字化系统的转型。
驿公里洗车机运维与系统更新时间缩短50%
|
运维 安全 数据挖掘
寻找新冠致重症因素,如何通过云计算将分析时间缩短80%以上?
阿里云高性能计算团队协助中山大学使用阿里云高性能计算服务进行生物信息科学计算,在性能与资源的双重支持下,原本每个病例的测序结果需要 12 个小时左右的分析时间,在阿里云上缩减到了 2 个小时,大大提高了工作效率。
寻找新冠致重症因素,如何通过云计算将分析时间缩短80%以上?
|
SQL 流计算 算法
一个周内上线50个增长策略,竟然能这么高效!
年初的一个晨会上,用户增长负责人湘翁问我说:一个周内上线50个增长策略,技术兄弟们能做到么?
2573 0
一个周内上线50个增长策略,竟然能这么高效!
|
开发者
新能力丨小程序审核全面提速,最快只需2小时
“小程序审核预检测功能”现正式上线,开发者在IDE上传时可一键勾选“创建预检测任务”,后台自动进行技术预检测,10分钟左右可看到结果,提前排除技术隐患,尽量实现审核的一次性通过。
1876 0
新能力丨小程序审核全面提速,最快只需2小时

热门文章

最新文章