当前位置: 首页 > news >正文

实时直播弹幕系统设计

整个服务读多写少,读写比例大概几百比1.

如果实时性要求高的话,可以采用长连接模式(轮询的话,时效性不好,同时对于评论少的直播间可能空转)

websocket 和 SSE架构

只要求服务端推送的话,可以选SSE,评论还是少量的,减少资源的浪费

长连接选型

单体架构

发布订阅模式去推送消息到SSE,会导致无用的消息,浪费大量SSE资源

按直播间分区,然后消费,可以缓解问题,但没有解决问题

多个topic 动态 直播间 。对元数据服务比如zookeeper的压力? 实时关系变化(),导致问题:kafka rebalance

智能负载均衡器 opentstry lua

智能调度服务,rpc调用,和直播间关联的SSE服务数量正比,可以并行调用。

拓展能力平台化,实时推送平台,推送消息,点赞,礼物等。SSE连接管理 AKKA actor模式。

拓展

1.实时长连接选型

长连接实现、技术选型优缺点及代码实现细节如下:

一、长连接实现

在实现实时查看评论设计时,长连接技术是关键。其中,WebSocket和SSE是两种常用的技术选型。

二、技术选型优缺点

  1. WebSocket

    • 优点‌:
      • 实时性:WebSocket可以实现实时双向通信,非常适合需要实时数据更新的场景。
      • 持久连接:WebSocket保持长连接,减少频繁建立和断开连接的开销。
      • 低延迟:数据传输延迟低,适合需要快速响应的应用。
    • 缺点‌:
      • 复杂性:WebSocket的实现和维护相对复杂,需要处理连接管理、错误处理和重连逻辑。
      • 兼容性:某些老旧浏览器可能不支持WebSocket。
  2. SSE (Server-Sent Events)

    • 优点‌:
      • 简单性:SSE实现相对简单,适用于单向通信。
      • 兼容性:SSE在大多数现代浏览器中都有较好的支持。
    • 缺点‌:
      • 单向通信:SSE只能服务器向客户端发送数据,不支持双向通信。
      • 性能:SSE在大量数据更新时可能不如WebSocket高效。

2.AKKA 利用actor模型管理SSE连接推送

在基于 Akka 的 SSE(Server-Sent Events)实现中,通过 Actor 模型管理连接和推送可实现高并发、容错的实时数据流传输。以下是关键实现方案及技术细节:


一、Actor 模型管理 SSE 的核心设计

  1. 连接与 Actor 绑定
    每个 SSE 客户端连接对应一个独立的 Actor 实例,负责管理连接生命周期(创建、消息推送、超时检测、异常终止等)‌26。Actor 通过 Akka Streams 的 Source 持续向客户端推送事件流。

  2. 消息驱动机制

    • 事件推送‌:业务层通过向 Actor 发送消息(如 PushEvent(data))触发数据推送,Actor 将消息转换为 SSE 格式(如 ServerSentEvent)并写入响应流‌26。
    • 状态管理‌:Actor 维护连接状态(如活跃状态、最后心跳时间),通过定时消息(如 CheckTimeout)检测闲置连接并自动关闭‌57。
  3. 层级监管结构

    • 父 Actor 管理子 Actor‌:创建 SSEManagerActor 作为父级监管者,统一创建和监控子级 SSEConnectionActor,实现连接资源的弹性扩缩容‌35。
    • 容错策略‌:通过 Akka 的监管策略(如 SupervisorStrategy)处理子 Actor 的异常(如网络中断、序列化错误)‌47。

相关文章:

  • AI Agent系列(十) -Data Agent(数据分析智能体)开源资源汇总
  • LabVIEW技巧——获取文件版本信息
  • Flutter异常Couldn‘t find dynamic library in default locations
  • 深入解析 HTML5 Web IndexedDB 数据库:构建高效离线应用的基石
  • Ubuntu22.04安装QT、px4安装环境
  • Git 进阶之路:高效协作之分支管理
  • DeepSeek 操作 MySQL 数据库:使用 MCP 实现数据库查询
  • 【MySQL】Ubuntu下C++连接MySQL
  • AWS上构建基于自然语言的数值和符号计算系统
  • (51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)
  • Redis——网络模型之IO讲解
  • 系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析
  • 数据库原理及应用mysql版陈业斌实验四
  • 高级java每日一道面试题-2025年4月14日-微服务篇[Nacos篇]-Nacos是如何实现对多数据中心的支持的?
  • 解决Windows安全中心显示空白页面
  • PHP8.2.9NTS版本使用composer报错,扩展找不到的问题处理
  • <C#>.NET WebAPI 的 FromBody ,FromForm ,FromServices等详细解释
  • thinkphp实现图像验证码
  • 微信小程序中,将搜索组件获取的值传递给父页面(如 index 页面)可以通过 自定义事件 或 页面引用 实现
  • 电路安全智控系统与主机安全防护系统主要功能是什么
  • 格力电器去年净利增长一成:消费电器营收下滑4%,一季度净利增长26%
  • 2025上海浪琴环球马术冠军赛开赛在即,首批赛马今晨抵沪
  • 俄军方:已完成库尔斯克地区全面控制行动
  • 第152次中老缅泰湄公河联合巡逻执法行动圆满结束
  • 中方在IMF发声:美滥施关税威胁全球金融稳定,对新兴市场和发展中国家构成严峻挑战
  • 国务院同意在海南全岛和秦皇岛等15个城市(地区)设立跨境电子商务综合试验区