对于同一个业务系统,链路和链路之间存在一定的逻辑关系。链路串行主要适用于这种存在参数依赖的场景。建议不要将只是逻辑上存在依赖的链路串行起来。
模型梳理
以某商城系统抽奖活动为例说明,本次活动会引导用户进入首页进行抽奖,预估的访问首页的峰值 TPS 为 10000,其中有 8000 TPS 进行了抽奖,抽中的概率为 50%,那么会有大概 4000 TPS 对商品进行浏览,根据历史的数据用户下单付款的概率在 10% 左右。
我们可以抽象出“首页”、“抽奖”、“查看详情页”和“下单”等四个业务链路,从业务的维度来说存在一定的逻辑关系,但是我们进一步分析可以发现,除了首页之外,“查看详情页”和“下单”都依赖“抽奖”的结果。因此可以将后面三条链路串行起来。
商城抽奖活动
串行配置
在场景中链路数超过 1 的时候,会出现链路串行关系的配置区域。串行操作:
配置链路关系,使用“.”按照串行顺序将链路 ID 分隔,比如“446.88.157”。
单击添加串行关系。
串行配置
场景中可以不包含链路串行关系,也可以包含多个,但同一个链路不能同时被两个串行关系引用。
数据构造
链路串行起来的主要目的是为了参数的透传,例如:
抽奖:返回 JSON 包含抽中的商品 ID
请求URL: http://xxxx.com/lottery.json
出参:
{
code: 0, msg: "SUCCESS",
data: {itemId: 123456}
}
详情页:入参是商品 ID,返回详情页面
GET请求: http://xxxx.com/item/123456/detail.html
下单:入参商品 ID 和其他的一些参数
POST请求: http://xxxx.com/buy.do?token=xxxxx
参数:itemId=123456&...
系统支持通过识别 URL 和参数文件中的占位符来进行数据替代:
Response 占位:格式为“{result:key}”,目前仅支持 JSON 格式的 Response。
在 URL 或者参数文件中如果存在这种类型的占位符,系统会自动从前置的所有链路 Response 中依次寻找 Key 为key的值进行占位符替换,如果没有找到则使用空字符串替换。
key值支持 JSON 对象的递归寻找,比如 {data: {itemId: 123456}}。如果需要引用itemId的值,那么key可以写成 data.itemId,最终占位符为 {result:data.itemId}。
抽奖链路
请求URL: http://xxxx.com/lottery.json
详情页链路
GET请求URL: http://xxxx.com/item/{result:data.itemId}/detail.html
下单链路
POST请求URL: http://xxxx.com/buy.do?token=xxxxx
参数文件:
itemId={result:data.itemId}&userId=1&...
itemId={result:data.itemId}&userId=2&...
itemId={result:data.itemId}&userId=3&...
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。