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

简介: 阿里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

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

 

 

相关文章
|
文字识别 前端开发
CodeFuse-VLM 开源,支持多模态多任务预训练/微调
随着huggingface开源社区的不断更新,会有更多的vision encoder 和 LLM 底座发布,这些vision encoder 和 LLM底座都有各自的强项,例如 code-llama 适合生成代码类任务,但是不适合生成中文类的任务,因此用户常常需要根据vision encoder和LLM的特长来搭建自己的多模态大语言模型。针对多模态大语言模型种类繁多的落地场景,我们搭建了CodeFuse-VLM 框架,支持多种视觉模型和语言大模型,使得MFT-VLM可以适应不同种类的任务。
1511 0
|
SQL 算法 关系型数据库
MySQL8.0大表秒加字段,是真的吗?
很早就听说 MySQL8.0 支持快速加列,可以实现大表秒级加字段。笔者自己本地也有8.0环境,但一直未进行测试。本篇文章我们就一起来看下 MySQL8.0 快速加列到底要如何操作。
1471 0
|
9月前
|
前端开发 C++
DeepSeek & Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
DeepSeek & Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
1040 4
DeepSeek & Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
|
9月前
|
Linux 虚拟化 iOS开发
AlmaLinux 10 x86_64 OVF (sysin) - VMware 虚拟机模板
AlmaLinux 10 x86_64 OVF (sysin) - VMware 虚拟机模板
455 27
AlmaLinux 10 x86_64 OVF (sysin) - VMware 虚拟机模板
|
11月前
|
JSON 数据管理 Java
淘宝买家订单列表、订单详情、订单物流 API 接口全攻略
淘宝订单相关API接口是电商自动化的核心工具,提供订单数据管理和物流追踪功能。开发者可通过HTTP协议调用,支持Python、Java等语言,响应JSON格式数据。主要功能包括:订单列表查询、订单详情获取和物流轨迹追踪。申请流程:注册账号(c0b.cc/R4rbK2),创建应用并生成App Key,申请所需接口权限如taobao.trades.sold.get、taobao.trade.fullinfo.get等。
1673 7
|
存储 缓存 Unix
从原理到实践:掌握DPDK内存池技术(上)
从原理到实践:掌握DPDK内存池技术
|
C# UED 开发者
WPF动画大揭秘:掌握动画技巧,让你的界面动起来,告别枯燥与乏味!
【8月更文挑战第31天】在WPF应用开发中,动画能显著提升用户体验,使其更加生动有趣。本文将介绍WPF动画的基础知识和实现方法,包括平移、缩放、旋转等常见类型,并通过示例代码展示如何使用`DoubleAnimation`创建平移动画。此外,还将介绍动画触发器的使用,帮助开发者更好地控制动画效果,提升应用的吸引力。
763 0
vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
|
数据库
阿里云个人实名和企业实名图文详解
如大家所知,如果你需要使用阿里云的产品,比如服务器,或者域名,或者数据库,则需要注册阿里云账号和实名阿里云账号。下面就由小编和大家系统讲解一下,如何操作。
|
前端开发 JavaScript API
移动端、第三方集成应用内置浏览器里如何调试前端代码?
移动端、第三方集成应用内置浏览器里如何调试前端代码?
1412 0