高并发实时直播弹幕研发实践

直播间特点

聊天室限制人数的原因

应对万级以上的实时互动

跨服务器是为了解决单一服务器接入数量限制、发布消息吞吐限制等问题;
多进程并发则是为了充分利用多核CPU以及减小一个循环规模从而达到降低延迟的目的。

云巴实时系统的设计

云巴是基于MQTT协议实现的实时通信系统,采用Erlang/OTP的架构设计。简单地来说,云巴实时系统的设计包括多层结构微服务两个要点。

多层结构

云巴系统设计中,多层结构意味着一个基本业务逻辑的完成需要经历多个模块(如图上所示)。

云巴多层结构设计有三个主要特点:
- 所有模块均可独立运行,互不干扰。 任一模块在运行的过程中,无需依赖其他模块。除此以外,还会对所有模块设立在线监控,从而实现生产状态下的实时告警。同时,模块独立运行还能够达到持续集成的效果;

  • 细粒度扩容,包括但不限于对接入进行扩容等;

  • 使用「隔离」。 顾名思义,系统可以为用户指定特定的路径,也可以在某些路径出现问题以后,强行从系统里摘除路径,达到「隔离」效果。

微服务化

虽然近期微服务已一个新兴事物的身份被广泛讨论,但其实,微服务可以算是一个 概念了。

比如Erlang/OTP就是一个成熟已久的典型微服务架构。其作为微服务架构的特点就在于业务逻辑非常简单的同时,并发量也非常高。

云巴采用的正是Erlang/OTP的架构设计,在微服务化的方面的体现则是将业务逻辑封装成一个RPC Service,以及RPC Service部署微一个OTP Worker。

云巴实时系统的特点

云巴实时系统的设计特点主要有:拥有海量轻量级任务、任务与运行位置无关以及水平扩展。任务与运行位置无关,这就意味着在任务池中,可以动态地把任务调度到不同物理机上,同时数据要存储在独立集群中。

海量的轻量级任务包括长连接创建的任务、用户请求产生时创建的任务。

长连接任务即为,当一个长连接接入时,系统会创建一个任务来管理和维持长连接;

同样地,请求任务则是,当一个用户请求(比如发送一条弹幕)产生时,就会创建一个任务来管理该请求。

对于云巴来讲,不论是用户加入了一个直播间还是发送了一条弹幕,都可以以Pub/Sub模型来实现。Pub/Sub模型中比较重要的词汇为「publish」、「subscribe」以及「unsubscribe」。

比如,一个用户进入了一个直播间,则可以视为订阅(subscribe)了该直播间;

进入之后在直播间发送弹幕,视为向这个直播间发送(publish)了一条消息;

而由于进入直播间的用户都已经订阅过该直播间,所以其他用户都看到了这条弹幕。

一旦用户退出了直播间,则视为取消订阅(unsubscribe)了直播间,再也收不到该直播间里面其他用户发布的弹幕了。

传统的消息发布过程

传统的消息发布过程有两种,第一种是遍历列表里的每一个UID,读取路由,逐一发送消息;

第二种是遍历每一台服务器,发送消息,然后将订阅关系保存在每一台服务器内。以上两种做法都有可能导致延迟过多的问题。

云巴的消息发布过程

在云巴,消息的发布过程为,首先在接收到任务请求后,会发布任务计算UID列表分片,对总任务进行分片处理。之后将分片任务分发给任务池,执行各个分片任务。最后,发布任务汇聚请求,返回所有的分片任务。

「分片」——「汇聚」设计的好处在于,可以有效控制最大延迟。目前云巴是将此整个过程控制在200ms以内。除此以外,还能够扩大任务池,提升系统并发能力。

云巴弹幕Demo

高并发实时直播弹幕研发实践相关推荐

  1. android 高并发弹幕,高并发实时直播弹幕研发实践

    高并发实时直播弹幕研发实践 直播间特点 聊天室限制人数的原因 应对万级以上的实时互动 跨服务器是为了解决单一服务器接入数量限制.发布消息吞吐限制等问题: 多进程并发则是为了充分利用多核CPU以及减小一 ...

  2. BILIBILI 高并发实时弹幕系统那些事(项目开源、架构演变)

    原文地址:http://blog.csdn.net/hxqneuq2012/article/details/52813937 B 站建立开源工作组:ijkplayer 等多个项目开源 SegmentF ...

  3. bilibili高并发实时弹幕系统的实战之路

    声明:本文来自「七牛云主办的架构师实践日--泛娱乐+直播技术最佳实践」的演讲内容整理.PPT.速记和现场演讲视频等参见"七牛架构师实践日"官网. 嘉宾:刘丁,bilibili 架构 ...

  4. android bilibili弹幕技术解析,bilibili高并发实时弹幕系统的实战之路(1)

    原标题:bilibili高并发实时弹幕系统的实战之路(1) 来源: 主要从直播弹幕系统必备的高稳定.高可用.低延迟这三个方面出发,主要分享了bilibili直播弹幕服务架构上的最新实践.以下为正文: ...

  5. Linux海量数据高并发实时同步架构方案杂谈

    不论是Redhat还是CentOS系统,除去从CDN缓存或者数据库优化.动静分离等方面来说,在架构层面上,实 现海量数据高并发实时同步访问概括起来大概可以从以下几个方面去入手,当然NFS的存储也可以是 ...

  6. linux 高并发文件实时同步,Linux海量数据高并发实时同步架构方案杂谈

    不论是Redhat还是CentOS系统,除去从CDN缓存或者数据库优化.动静分离等方面来说,在架构层面上,实 现海量数据高并发实时同步访问概括起来大概可以从以下几个方面去入手,当然NFS的存储也可以是 ...

  7. python百度云链接哔哩哔哩弹幕网_Python爬取哔哩哔哩实时直播弹幕

    Python爬取哔哩哔哩实时直播弹幕 Python爬取哔哩哔哩实时直播弹幕 用Python爬取哔哩哔哩直播弹幕,关键在于找到哔哩哔哩网站的一个POST网址,和应该POST的数据.代码不长,十分简单.关 ...

  8. 高并发软件系统设计原理与实践-高岩峰-专题视频课程

    高并发软件系统设计原理与实践-604人已学习 课程介绍         本课程讲解软件性能设计的目标.方法和常用的解决方案以及性能优化的方法.通过学习本门课程,大家能够掌握理解性能指标,能够知道存在哪 ...

  9. 高并发软件系统设计原理与实践——前言-高岩峰-专题视频课程

    高并发软件系统设计原理与实践--前言-1465人已学习 课程介绍         本课程讲解如何设计高性能的软件,如何定位解决性能问题.本课程主要包含如下4部分内容: 1.性能指标和性能设计的常识. ...

最新文章

  1. python3 time
  2. 对oracle sql的一些总结
  3. 移动端cube界面设计html,滴滴 Web 移动端组件库 cube-ui 开源
  4. python编码效率高吗_【原创】杠精的日常-讨论python快排的效率
  5. 解决修改sources.list之后update NO_PUBKEY错误
  6. AJAX提交表单数据
  7. 日本語トレーニング(二十二)
  8. 乐高大颗粒作品23:磁悬浮列车
  9. Python新手入门“制造 贺卡”
  10. Snaker工作流学习(二)
  11. vvic、小红书API接口调用
  12. 【亲自验证】Navicat连接MySql提示无法加载身份验证插件“缓存_sha2_密码”?
  13. css app菜单,简单的Material Design风格手机App菜单特效
  14. 喜报接连,闪马智能与创始人兼CEO彭垚斩获猎云网、雷锋网多项奖项
  15. 6-3 sdust-Java-可实现多种排序的Book类 (20 分)
  16. BGP选路规则(实验做的有点乱)
  17. 西南知识产权大数据中心落地成都
  18. elastic-job初识
  19. 嗯,我们出了一套做爬虫必备的 JS 逆向课程
  20. [导入]大学各系女生评超短裙

热门文章

  1. 组态中怎么使用mysql数据库,组态王写入MySQL数据库
  2. A Tutorial on Learned Multi-dimensional Indexes
  3. Windows Server 2016-客户端加域端口汇总
  4. 从交互设计“流行元素”中启发
  5. 数据库SQL经典面试题详解
  6. 电脑 桌面图标上多了一个白色的文档图标 怎么去掉?
  7. 【问题记录】怎么用python读取CIFAR10数据集?
  8. V6H--升级3种方式和修改版本号
  9. 1089: 手机短号 (多实例)
  10. Python文本彩色图像去污