MST

星途 面试题库

面试题:缓存设计之专家难度:物联网复杂场景下的缓存架构优化

在一个大型复杂的物联网场景中,涉及多种类型的设备(如传感器、执行器、边缘计算设备等),不同设备的数据读写频率差异极大,且对实时性要求各不相同。请设计一种优化的缓存架构,满足这些复杂需求,并详细说明架构中各部分的功能、数据流向以及如何应对高并发和数据一致性等问题。
37.1万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存架构设计

  1. 多级缓存结构
    • 本地缓存:在每个设备端(传感器、执行器、边缘计算设备等)设置本地缓存。例如,对于传感器设备,其数据读取频率高但实时性要求极高的数据,可以直接缓存在设备本地的内存中。这部分缓存用于快速响应设备自身的读写请求,减少数据传输延迟。
    • 边缘缓存:在边缘计算设备上设置缓存层。它可以缓存来自多个本地设备的数据,这些数据通常是在一定时间窗口内频繁访问且实时性要求相对较高的数据。边缘缓存的数据容量相对本地缓存更大,能够处理一定程度的高并发请求。
    • 中心缓存:在物联网系统的核心服务器端设置中心缓存,用于存储整个物联网场景中的关键数据和热点数据。它的存储容量大,可应对大规模设备的并发请求,并且能够进行数据的统一管理和协调。
  2. 缓存数据分层
    • 热数据:对于读写频率极高且实时性要求极高的数据,如某些关键传感器的实时监测数据,存储在本地缓存和边缘缓存的高速存储区域(如内存),确保能够快速响应读写请求。
    • 温数据:读写频率较高但实时性要求稍低的数据,如一些设备的周期性状态数据,存储在边缘缓存和中心缓存的普通存储区域(如SSD)。
    • 冷数据:读写频率较低的数据,如历史设备运行记录等,存储在中心缓存的大容量存储设备(如HDD)中。

各部分功能

  1. 本地缓存功能
    • 快速响应:设备本地的读写请求能够直接在本地缓存中得到响应,减少网络传输开销,满足设备对实时性的高要求。
    • 数据预处理:对设备产生的数据进行初步的预处理和聚合,例如对传感器数据进行简单的滤波处理,减少不必要的数据传输。
  2. 边缘缓存功能
    • 负载均衡:接收来自多个本地设备的请求,通过负载均衡算法将请求分配到不同的缓存节点,提高缓存的并发处理能力。
    • 数据聚合与筛选:对来自本地设备的数据进行进一步的聚合和筛选,只将关键数据和热点数据传递到中心缓存,减少中心缓存的负载。
    • 本地缓存同步:定期与本地缓存进行数据同步,确保本地缓存的数据一致性。
  3. 中心缓存功能
    • 数据持久化:对整个物联网场景中的关键数据和热点数据进行持久化存储,保证数据的可靠性。
    • 全局数据管理:协调和管理来自各个边缘缓存的数据,维护数据的一致性和完整性。
    • 高并发处理:通过分布式缓存技术(如Redis Cluster),利用多台服务器组成集群,提高缓存的并发处理能力和存储容量。

数据流向

  1. 写数据流程
    • 设备端:设备产生数据后,首先写入本地缓存。本地缓存写入成功后,将数据发送到边缘缓存。
    • 边缘缓存:边缘缓存接收来自设备本地的写请求,写入本地缓存成功后,对数据进行聚合和筛选,然后将关键数据发送到中心缓存。
    • 中心缓存:中心缓存接收来自边缘缓存的数据,进行持久化存储,并更新相关的缓存索引。
  2. 读数据流程
    • 设备端:设备发起读请求,首先在本地缓存中查找数据。如果本地缓存命中,则直接返回数据;否则,向边缘缓存发送读请求。
    • 边缘缓存:边缘缓存接收来自设备的读请求,在本地缓存中查找数据。如果命中,则返回数据;否则,向中心缓存发送读请求。
    • 中心缓存:中心缓存接收来自边缘缓存的读请求,在缓存中查找数据,返回数据给边缘缓存,边缘缓存再返回给设备。

应对高并发和数据一致性问题

  1. 应对高并发
    • 负载均衡:在边缘缓存和中心缓存层面,采用负载均衡算法(如轮询、加权轮询、IP哈希等)将请求均匀分配到不同的缓存节点,避免单个节点负载过高。
    • 分布式缓存:在中心缓存采用分布式缓存技术(如Redis Cluster),利用多台服务器组成集群,提高缓存的并发处理能力和存储容量。每个节点只负责一部分数据的存储和处理,通过集群协议实现数据的自动分片和故障转移。
    • 缓存预热:在系统启动或业务高峰来临前,提前将热点数据加载到缓存中,减少首次请求时的缓存穿透问题,提高系统的响应速度。
  2. 应对数据一致性
    • 写后同步:在写数据时,采用写后同步策略。设备先将数据写入本地缓存,然后逐步同步到边缘缓存和中心缓存。通过设置合理的同步时间间隔和重试机制,确保数据最终一致性。
    • 缓存版本控制:为每个缓存数据设置版本号。当数据发生变化时,版本号递增。读数据时,先检查版本号,若版本号不一致,则重新从数据源获取数据,更新缓存,保证数据一致性。
    • 分布式事务:在涉及多个缓存节点的数据更新操作时,采用分布式事务技术(如两阶段提交协议、三阶段提交协议等)确保数据在多个节点之间的一致性。但分布式事务会带来一定的性能开销,需要根据实际业务场景权衡使用。