开发者社区> 问答> 正文

串行实践如何实现

对于同一个业务系统,链路和链路之间存在一定的逻辑关系。链路串行主要适用于这种存在参数依赖的场景。建议不要将只是逻辑上存在依赖的链路串行起来。

模型梳理

以某商城系统抽奖活动为例说明,本次活动会引导用户进入首页进行抽奖,预估的访问首页的峰值 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&...

展开
收起
猫饭先生 2017-10-31 13:55:26 1710 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
深入理解分布式事务:原理与实战(试读版) 立即下载
如何做小程序性能优化 立即下载
阿里高级开发工程师红文:领域驱动设计实战--如何应对复杂业务 立即下载