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

in 互联网前沿
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

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

直播间特点

直播间特点

聊天室限制人数的原因

聊天室限制人数的原因

应对万级以上的实时互动

应对万级以上的实时互动

跨服务器是为了解决单一服务器接入数量限制、发布消息吞吐限制等问题;
多进程并发则是为了充分利用多核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

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看