一、完整题目
【说明】
某大型电商平台建立了一个在线B2B商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此,该企业计划新建立一个全国仓储货物管理系统,在实现仓储中心常规管理功能之外,通过对在线B2B商店系统中订单信息进行及时的分析和挖掘,并通过大数据分析预测各地仓储中心中各类货物的配置数量,从而提高运送效率,降低成本。
当用户通过在线B2B商店系统选购货物时,全国仓储货物管理系统会通过该用户所在地址、商品类别以及仓储中心的货物信息和地址,实时为用户订单反馈货物起运地(某仓储中心)并预测送达时间。反馈送达时间的响应时间应小于1秒。
为满足反馈送达时间功能的性能要求,设计团队建议在全国仓储货物管理系统中采用数据缓存集群的方式,将仓储中心基本信息、商品类别以及库存数量放置在内存的缓存中,而仓储中心的其它商品信息则存储在数据库系统。
【问题1】(9分)
设计团队在讨论缓存和数据库的数据一致性问题时,李工建议采取数据实时同步更新方案,而张工则建议采用数据异步准实时更新方案。
请用200字以内的文字,简要介绍两种方案的基本思路,说明全国仓储货物管理系统应该采用哪种方案,并说明采取该方案的原因。
【问题2】(9分)
随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。
缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。
【问题3】(7分)
全国仓储货物管理系统开发完成,在运营一段时间后,系统维护人员发现大量黑客故意发起非法的商品送达时间查询请求,造成了缓存击穿。张工建议尽快采用布隆过滤器方法解决。请用200字以内的文字解释布隆过滤器的工作原理和优缺点。
二、完整参考答案
【问题1】
- 方案思路
- 数据实时同步更新方案:数据库数据更新时,同步更新缓存数据,保证缓存与数据库的强一致性。
- 数据异步准实时更新方案:数据库更新后,通过消息队列/发布订阅异步更新缓存,仅保证最终一致性。
- 选型与理由
本系统应采用数据实时同步更新方案 。
理由:系统要求订单反馈响应时间<1秒,且库存、仓储信息属于强一致性要求极高的业务场景,异步方案可能导致缓存数据滞后,引发调货、超时等业务问题,实时方案可保障数据准确性与业务正确性。
【问题2】
- 算法原理
- 普通哈希分片:对key做哈希运算后,按节点数取模分配数据,类似取余操作,余数相同的key分配到同一节点。
- 一致性哈希分片:将存储节点和数据key都映射到哈希环上,数据按顺时针方向存储到第一个遇到的节点上。
- 选型理由
采用一致性哈希算法的原因:普通哈希分片在节点扩容/缩容时,需重新计算几乎所有key的分配,导致大量数据迁移;一致性哈希仅需迁移少量数据,支持动态扩缩容,适配仓储、商品数量无上限的业务场景,保障系统扩展性。
【问题3】
- 工作原理
布隆过滤器由一个超长二进制向量和一系列随机映射函数组成,用于快速判断元素是否存在于集合中。将集合中元素通过k个哈希函数映射到二进制向量的k个位置并置1;查询时,若对应位置全为1则判定元素存在,否则不存在,可直接过滤不存在的查询,避免缓存击穿。 - 优缺点
- 优点:空间效率极高、查询速度远快于普通算法、无需存储元素本身,适合高并发场景。
- 缺点:存在一定误判率(误将不存在元素判定为存在)、元素删除困难、无法获取元素本身。
三、完整解析
【问题1解析】
缓存与数据库一致性是缓存架构的核心问题,两种方案的适用场景完全不同:
- 实时同步方案:属于强一致性方案,适用于金融、库存等对数据准确性要求极高的场景,缺点是增加了单次请求的耗时,需通过优化同步逻辑保障性能。
- 异步准实时方案 :属于最终一致性方案,适用于商品详情、资讯等对实时性要求不高的场景,优点是性能高、不阻塞主流程。
本系统的库存、仓储信息直接影响订单履约,数据不一致会导致严重的业务事故,因此必须选择实时同步方案。
【问题2解析】
缓存分片是缓存集群横向扩展的核心技术,两种算法的核心差异在于动态扩缩容的成本:
- 普通哈希分片的取余逻辑,导致节点数量变化时,几乎所有key的哈希取余结果都会改变,引发全量数据迁移,系统可用性大幅下降,仅适用于节点数量固定的场景。
- 一致性哈希通过哈希环的设计,将数据迁移范围控制在新增/删除节点的相邻区间,仅需迁移少量数据,大幅降低扩缩容对系统的影响,是分布式缓存(如Redis Cluster)的主流分片方案,完美适配本系统业务量持续增长的需求。
【问题3解析】
缓存击穿是指大量请求查询缓存中不存在的key,导致请求直接穿透到数据库,引发数据库压力骤增。布隆过滤器是解决该问题的经典方案:
- 核心价值:在缓存层前增加一层过滤,直接拦截不存在的key的请求,避免数据库被打垮,同时空间占用极低,适合海量数据场景。
- 局限性:误判率可通过调整二进制向量长度、哈希函数数量优化,但无法完全消除;删除元素需使用计数布隆过滤器等变种方案,增加了实现复杂度。
- 适用场景:本系统中,可将所有合法的商品ID、仓储ID存入布隆过滤器,非法查询直接被拦截,从根源解决缓存击穿问题。
四、题目归类
本题属于软考系统架构设计师考试中,分布式缓存架构设计类案例分析题,核心考点覆盖:
- 缓存与数据库一致性方案选型
- 分布式缓存分片算法(一致性哈希)
- 缓存击穿解决方案(布隆过滤器)
是互联网电商、物流系统架构设计的经典高频考点。