MST
星途 面试题库

面试题:高并发下视频直播缓存设计的实时性优化与一致性权衡

在高并发的视频直播场景中,缓存设计需要同时考虑实时性优化和数据一致性。请阐述你会如何设计缓存架构来平衡这两者之间的关系,若出现实时性与一致性冲突的情况,你有哪些策略来解决?
43.9万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存架构设计以平衡实时性与数据一致性

  1. 分层缓存设计
    • 前端缓存:在客户端(如浏览器、移动应用)设置缓存,缓存一些静态资源,如直播封面、主播基本信息等不频繁变动的数据。这样可以减少对后端的请求,提高响应速度,优化实时性。
    • 边缘缓存:使用 CDN(内容分发网络)作为边缘缓存,CDN 节点分布在网络边缘,离用户更近。它可以缓存视频片段等内容,根据用户地理位置快速响应请求,进一步提升实时性。同时,CDN 通常有一定的更新机制来保证数据一致性,比如设置合适的缓存过期时间。
    • 应用层缓存:在应用服务器内部设置缓存,例如使用 Redis 等内存数据库。缓存直播过程中的一些关键数据,如直播状态、在线人数等。对于这类数据,需要根据业务场景设置合适的更新策略,以兼顾实时性和一致性。比如,直播状态变化时,及时更新缓存并通知相关节点。
  2. 数据分类与缓存策略
    • 静态数据:对于基本不会变动的静态数据,如直播平台的 logo、一些固定的介绍文字等,设置较长的缓存时间,甚至可以采用永不过期的策略,以最大程度利用缓存,提高实时性。
    • 半静态数据:像主播的简介、直播间的规则等相对不频繁变动的数据,可以设置适中的缓存过期时间,定期更新缓存。更新时采用先更新数据库,再更新缓存的策略,保证数据一致性。
    • 动态数据:对于直播中的实时数据,如弹幕、实时点赞数等,采用实时更新缓存的策略。可以使用消息队列(如 Kafka)来接收实时数据,然后异步更新缓存,确保数据的实时性。同时,为了保证一致性,可以定期将缓存中的数据同步回数据库。

实时性与一致性冲突的解决策略

  1. 读写锁策略
    • 在缓存更新操作时,使用读写锁。读操作可以并发进行,以保证实时性,因为读操作不会改变数据。而写操作则需要获取写锁,在写锁获取期间,其他读写操作都被阻塞,确保数据一致性。写操作完成后释放写锁,恢复读写并发。
  2. 缓存失效策略
    • 主动失效:当数据发生变化时,主动使相关缓存失效。例如,直播结束时,主动清除直播间相关的所有缓存数据。这样在下一次请求时,会重新从数据源获取数据,保证数据一致性。同时,为了减少缓存失效带来的性能影响,可以采用批量失效的方式,而不是单个失效。
    • 被动失效:设置合理的缓存过期时间,对于实时性要求不太高的数据,在缓存过期后,重新从数据源读取数据并更新缓存。这样既保证了一定的实时性,又在过期后能恢复数据一致性。
  3. 异步更新策略
    • 利用消息队列进行异步更新。当数据发生变化时,先将更新消息发送到消息队列,然后立即返回给客户端,保证实时性。后台有专门的消费者从消息队列中读取消息,按照顺序更新缓存和数据库,确保数据一致性。这样可以避免因同步更新缓存和数据库导致的响应延迟,提高系统的并发处理能力。