知识卡片
多级缓存呈漏斗状逐级拦截:让每一层只承担自己该扛的那部分流量
内容
应对大促级别的高流量,缓存不能只在某一处集中发力,而应该是从前到后逐级设置、呈”漏斗”形态——最前面用静态缓存(CDN等)挡住最大量、最粗粒度的流量,中间层用基础数据缓存承接前一级没能拦住的部分,最后层面向真正需要复杂计算或大规模数据支撑的场景才动用大数据处理能力。这样设计的关键在于”分钟级、秒级甚至毫秒级”这个响应速度要求:如果只依赖单一一层缓存,这一层既要处理海量的低价值重复请求,又要应付真正需要精确计算的复杂查询,很难同时兼顾吞吐量和响应速度;而漏斗状的分级拦截让每一层只需要专注处理”上一层没能挡住”的那一小部分流量,越往后流量规模越小、但处理逻辑可以越复杂精细,整体效率反而更高。这个思路和[[排除高成本字段不索引,通过独立查询路径支撑那一小部分需求]]中”让主路径保持轻量、把长尾需求剥离到旁路”的思路是同一类架构哲学的不同应用——不是让一层组件承担所有职责,而是根据流量规模和处理复杂度的自然梯度,把不同层级的职责分配给最适合承担这部分职责的组件,前一层的价值恰恰体现在它能替后一层挡掉多少流量,而不是它自己有多复杂。
参考来源
- 位置:《高可用架构(第1卷)》第3章《电商架构热点专题》"3.2 大促系统全流量压测及稳定性保证——京东交易架构"节,"3.2.5 应对大促的第2步:根据压力表现进行调优"(源文件:_epub-src/OEBPS/Text/Chapter3_2_6.xhtml)
- 结论依据:原文说明"缓存是逐级往下做,呈漏斗状……如果要在高流量的情况下使缓存效率持续在分钟级、秒级或者毫秒级,就必须逐级做缓存,前面做一些静态缓存,后面做一些基础数据缓存,最后使用大数据,一层一层往上挡住整个这一块即可",直接支撑本卡片结论。
- 原始内容:缓存是逐级往下做,呈漏斗状……如果要在高流量的情况下使缓存效率持续在分钟级、秒级或者毫秒级,就必须逐级做缓存,前面做一些静态缓存,后面做一些基础数据缓存,最后使用大数据,一层一层往上挡住整个这一块即可。