知识卡片

异步的两层含义:并行调用节省耗时,中间存储挡流量保护原始数据

普通读书笔记卡

内容

“异步”这个词在实际架构设计里常常被同时用来指两件不完全相同的事,容易混淆。第一层含义是调用方式上的并行化:如果购物车要调用3个下游服务,串行调用(一次一个、一个调用耗时2毫秒)累计要花6毫秒;但如果这3个服务之间存在业务依赖(比如必须先调商品服务、再调促销服务),不能完全并行,可以按依赖关系尽量并行发起(比如需要调2轮),这样总耗时能压缩到3毫秒以内——这一层异步优化的目标是缩短响应时间。第二层含义是数据落地路径上的异步化:并不是让每次写请求都直接、同步地冲击最终的原始存储,而是先落到一个中间存储,由这个中间存储来吸收和缓冲大部分流量压力,减少原始存储直接承受的冲击——库存状态的存储正是这个思路的典型应用:把库存状态从库存数据本身剥离出来单独存一份,用这份状态数据去挡住大部分的查询流量,从而保护真正权威、需要保证强一致性的原始库存存储不被直接打爆。这两层异步的目标其实是不同维度的问题——一个解决的是”单次请求要花多久”,另一个解决的是”高并发写入怎么不直接压垮底层存储”——虽然都叫”异步”,但在具体设计时需要分别考虑,不能把”我用了异步”当作一句笼统的答案,而要清楚这次异步化到底是在优化响应时延,还是在做流量的分层缓冲。

参考来源

- 位置:《高可用架构(第1卷)》第3章《电商架构热点专题》"3.2 大促系统全流量压测及稳定性保证——京东交易架构"节,"3.2.6 异步和异构"(源文件:_epub-src/OEBPS/Text/Chapter3_2_7.xhtml) - 结论依据:原文说明"如果是串行调用,一个调用耗时2毫秒,累计起来就是6毫秒。如果并行处理……花费的时间肯定在3毫秒之内。异步数据落地,中间存储可用来挡部分流量,以免所有流量直接冲击原始存储。库存状态存储就是典型的从库存数据剥离出来挡流量的,以保护原始库存存储",直接支撑本卡片结论。 - 原始内容:如果是串行调用,一个调用耗时2毫秒,累计起来就是6毫秒。如果并行处理,同时去调这3个服务……异步数据落地,中间存储可用来挡部分流量,以免所有流量直接冲击原始存储。库存状态存储就是典型的从库存数据剥离出来挡流量的。