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

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

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

 

 

相关文章
|
监控 数据可视化 中间件
平台化三部曲之三流程编排 - 平台化是舞台,流程编排就是导演一场戏
在上两篇ATA中,第一篇讨论了平台的扩展性(《从Eclipse平台看交易平台化》),强调微内核和扩展机制实现,第二篇讨论平台的模块化开发(《Google Guice平台模块化开发的果汁》),强调业务隔离,松耦合。这这第三篇ATA中,想分享下平台化中另一个重要方面,平台的服务流程编排 (*备注:本文.
19103 2
|
小程序 安全 API
支付宝消息订阅
订阅界面是根据当前小程序在商家平台配置的消息模板 id 来展示对应消息的订阅选项(参考接入流程第 4 步)。一次性:使用一次性消息模板订阅,每次向用户发送消息都需要用户在订阅界面点击同意后才可以发送。长期性:使用长期性消息模板订阅,用户同意订阅后,可以多次向订阅用户发送消息。
1674 0
 支付宝消息订阅
|
前端开发 C++
DeepSeek & Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
DeepSeek & Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
2090 4
DeepSeek & Mermaid:如何将文本直接转化为精美图表? -优雅草卓伊凡
|
11月前
|
机器学习/深度学习 人工智能 监控
拔俗AI智能营运分析助手软件系统:企业决策的"数据军师",让经营从"拍脑袋"变"精准导航"
AI智能营运分析助手打破数据孤岛,实时整合ERP、CRM等系统数据,自动生成报表、智能预警与可视化决策建议,助力企业从“经验驱动”迈向“数据驱动”,提升决策效率,降低运营成本,精准把握市场先机。(238字)
340 0
|
人工智能 负载均衡 应用服务中间件
Dify 性能瓶颈?Higress AI 网关为它注入「高可用之魂」!
Dify 是一款开源 AI 应用开发平台,因其灵活的工作流编排和易用性受到广泛关注,但在用户规模扩大和生产落地过程中,逐渐暴露出性能瓶颈,影响系统稳定性。本文介绍如何通过 Higress AI 网关提升 Dify 应用的全链路高可用性,并提供详细操作指南。AI 网关具备多维度限流、Token 级控制、模型 Fallback、负载均衡等能力,有效保障 Dify 应用在高并发场景下的稳定运行。
1428 1
|
JSON 数据管理 Java
淘宝买家订单列表、订单详情、订单物流 API 接口全攻略
淘宝订单相关API接口是电商自动化的核心工具,提供订单数据管理和物流追踪功能。开发者可通过HTTP协议调用,支持Python、Java等语言,响应JSON格式数据。主要功能包括:订单列表查询、订单详情获取和物流轨迹追踪。申请流程:注册账号(c0b.cc/R4rbK2),创建应用并生成App Key,申请所需接口权限如taobao.trades.sold.get、taobao.trade.fullinfo.get等。
2700 7
|
存储 缓存 Unix
从原理到实践:掌握DPDK内存池技术(上)
从原理到实践:掌握DPDK内存池技术
|
存储 网络性能优化 网络安全
Hyper-V云桌面优化的设置指南
这份《Hyper-V云桌面优化设置指南》涵盖了硬件、虚拟机配置、网络、安全及高级配置的优化建议。硬件方面,确保CPU支持虚拟化并合理分配资源,使用SSD和VHDX格式提升存储性能;虚拟机配置上,优化内存、处理器和硬盘设置,并安装Hyper-V集成服务;网络优化包括虚拟交换机配置、适配器调整及QoS策略;安全性设置涵盖防火墙、端口管理和加密;高级配置如显卡直连和实时迁移进一步提升性能。这些措施能显著提高Hyper-V云桌面的效率与稳定性。
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
《FFmpeg开发实战》一书中,第10章示例程序playaudio.c原本仅支持mp3和aac音频播放。为支持ogg、amr、wma等非固定帧率音频,需进行三处修改:1)当frame_size为0时,将输出采样数量设为512;2)遍历音频帧时,计算实际采样位数以确定播放数据大小;3)在SDL音频回调函数中,确保每次发送len字节数据。改进后的代码在chapter10/playaudio2.c,可编译运行播放ring.ogg测试,成功则显示日志并播放铃声。
565 1
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
|
人工智能 Java
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
1051 0