MST

星途 面试题库

面试题:分布式系统里范围分区大规模数据处理的专家级问题

在一个全球化的分布式电商系统中,商品数据采用范围分区存储,每个分区负责一定范围的商品ID。现要实现实时的商品库存预警功能,要求在库存低于一定阈值时能快速通知相关人员。请设计一套基于范围分区的完整架构方案,涵盖数据存储、数据更新、预警触发以及通知机制,并说明如何确保系统的高可用性和数据一致性。
41.7万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

1. 数据存储

  • 数据库选择:选用支持范围分区的分布式数据库,如Cassandra。它具有良好的扩展性和高可用性,能处理大规模数据。
  • 分区策略:根据商品ID范围进行分区,例如,按商品ID的哈希值或数值范围划分。比如将商品ID从1 - 10000划分到一个分区,10001 - 20000划分到另一个分区等。
  • 数据结构:每个分区存储商品的基本信息及库存数据,如商品ID、名称、库存数量、库存阈值等。

2. 数据更新

  • 写入操作:当发生商品库存变更时(如销售、补货等),根据商品ID定位到对应的分区。采用同步写入方式,确保数据一致性。同时,使用事务机制(如果数据库支持)保证库存更新操作的原子性。
  • 更新频率:对于高频率的库存更新操作,可以采用批量更新的方式,减少数据库I/O开销。例如,每100次库存更新合并为一次批量操作。

3. 预警触发

  • 监控模块:部署一个独立的库存监控模块,定期轮询每个分区的商品库存数据(可根据业务需求设置轮询间隔,如每5分钟一次)。
  • 阈值检查:监控模块读取商品的库存数量和库存阈值,当库存数量低于阈值时,触发预警。为提高效率,可以在数据库层面设置触发器(如果支持),在库存更新时直接检查阈值,实时触发预警。

4. 通知机制

  • 消息队列:当预警触发后,将预警信息发送到消息队列,如Kafka。消息队列具有高吞吐量和可靠的消息传递机制,能确保预警消息不丢失。
  • 通知服务:一个独立的通知服务从消息队列中消费预警消息,根据配置的通知方式(如邮件、短信、即时通讯工具等)通知相关人员。例如,通过邮件服务向运营人员发送库存预警邮件。

5. 确保高可用性

  • 数据库层面
    • 多副本:Cassandra通过设置副本因子,将数据复制到多个节点,确保部分节点故障时数据不丢失。
    • 节点自动修复:当节点故障恢复后,数据库自动进行数据同步和修复,保持数据一致性。
  • 服务层面
    • 冗余部署:对监控模块和通知服务进行冗余部署,部署多个实例。使用负载均衡器(如Nginx)将请求均匀分配到各个实例,当某个实例故障时,负载均衡器能自动将流量切换到其他正常实例。
    • 健康检查:定期对各个服务实例进行健康检查,及时发现并剔除故障实例。

6. 确保数据一致性

  • 读写一致性级别:在数据库层面,根据业务需求设置合适的读写一致性级别。例如,对于库存数据的读取,设置为强一致性级别,确保读取到最新的库存数据。
  • 数据同步:对于跨分区的数据操作(如涉及多个分区的库存调整),采用分布式事务或两阶段提交协议(2PC)来保证数据一致性。同时,利用数据库的日志机制,在节点故障恢复时进行数据重放,确保数据的一致性。