如何实现百万级的语音聊天室

上篇我们介绍了如何从零开始搭建一套语音聊天室后台,设计方案比较基础,本篇我们将介绍语音聊天室的升级版本——在海量用户同时在线的情况下,语音服务器的架构将如何升级改造。

互联网产品后台开发信奉一句话:先扛住再优化。工程师当然是希望把系统设计得尽善尽美,但是业务发展往往是不允许的,因此后台工程师的工作就是在技术和业务之间寻找平衡点。大部分的系统都是逐步迭代演进而来的,没有一蹴而就的完美系统。

前文中,我们介绍了语音服务器分SET部署的概念。其实一直在回避一个问题,分SET的缺点是什么?

分SET限制了房间的容量。因为不分SET还好,分SET了以后一个房间撑死只能达到20万的用户,这样看起来分SET是一个不合理的设计。真是这样吗?

当然不是。所谓万丈高楼平地起,基础架构是非常重要的。虽然分SET为我们带来了一个限制,但是它的好处是更明显的。首先,我们的业务场景就决定了百万级别的房间是不常见,我们负责的超过20万用户在线的直播也就只有大型的游戏赛事直播,而且这种直播一年也就那么几回。其次,前面已经说过,如果不分SET,应对百万用户房间,需要50台机器,每次发布出错的影响面远大于分SET部署。

因此,我们要讨论的不是分不分SET的问题,而是怎么在分SET的情况下,实现百万房间的问题。

最容易想到的方案是把100万用户分到5个SET里。那多个SET之间怎样通信呢?方法说白了就是为不同SET中的服务器提供一个全局视图,用于转发路由。方法有很多种,这里介绍2种思路。

第一种是在房间服务器的上面再增加一个组服务器(group server),为系统提供全局视野。组服务器在每个SET的语音服务器中选取一台做为桥头堡机器(broker),跨SET转发和接收都通过broker完成。Broker收到SET内转发时,会将数据转发给其他SET的broker;而当收到跨SET转发时,会将数据转发给SET内的其他机器。

这种方案的缺点是broker会成为瓶颈,当broker宕机时,最严重的情况是造成其他SET无法提供服务。容灾策略一种是减少broker到组服务器的心跳间隔,使组服务器可以迅速发现异常并重新挑选broker;另一种方法是采用双broker,不过会增加数据去重的复杂度。

第二种是在系统之外增加一个转发服务器,专门负责跨SET转发,当然它本身拥有全局视野。这种方案其实是把上面说的组服务和双broker结合在一起,把转发功能外化。对于跨SET房间,主播所在的语音服务器做SET内转发的同时将数据发给转发服务器,转发服务器根据房间信息将数据转发给其他SET的任意1台机器。

这样优点非常明显,转发服务器跟原有系统完全解耦,原系统改造也很小,可以实现高可用。唯一缺点是转发服务器起码有两台机器,也会增加接收方数据去重的复杂度。

现在我们梳理一下,要实现一个支持百万级的语音聊天房间,整体的架构如下所示:

  1. 用户创建房间。通过目录服务器创建,实际上是在数据库中增加一条set_id和room_id的映射记录。
  2. 用户请求进入房间。通过目录服务器查询应该连到哪台语音服务器,具体的逻辑由负载均衡服务器实现。简单描述为:查询到room_id所在的set的所有语音服务器,根据负载情况和就近接入原则,选择几台语音服务器的ip和端口返回。
  3. 用户进入房间。客户端连接语音服务器,语音服务器将进房请求透传给房间服务器,房间服务器记录房间架构信息,并定期同步给set内所有的语音服务器。
  4. 对于小房间,通过set内转发语音实现。

对于跨set的大房间,由多个房间服务器协同工作实现。房间服务器之间不需要互相通信,它们只要在set内按规则挑选一台语音服务器作为broker。Broker收到语音数据时,除了常规的set内转发外,还将数据发给转发服务器。转发服务器知道房间所在的set列表和每个set的broker,从而实现跨set转发。

本篇主要介绍了基于分SET架构如何实现百万级房间的设计方法,并梳理了语音聊天室的整体架构。希望对大家有所帮助。

原文地址:https://www.cnblogs.com/htkfsy/p/12236507.html

时间: 2024-11-10 01:34:38

如何实现百万级的语音聊天室的相关文章

实现一个简单的语音聊天室(多人语音聊天系统)

多人语音聊天,或语音聊天室,是即时通信应用中常见的功能之中的一个,比方,QQ的语音讨论组就是我们用得比較多的. 本文将基于最新版本号的OMCS(V3.5)实现一个简单的语音聊天室,让多个人能够进入同一个房间进行语音沟通.当然,在此之前,您必须对OMCS有所了解,而且已经阅读.理解了OMCS 开发手冊(08) -- 多人语音/视频这篇文章的内容.先看看Demo执行效果截图:        从左到右的三张图各自是:登录界面.语音聊天室的主界面.标注了各个控件的主界面. 一. C/S结构 非常明显,我

实现一个简单的语音聊天室(源码)

语音聊天室,或多人语音聊天,是即时通信应用中常见的功能之一,比如,QQ的语音讨论组就是我们用得比较多的. 这篇文章将实现一个简单的语音聊天室,让多个人可以进入同一个房间进行语音沟通.先看运行效果截图:         从左到右的三张图分别是:登录界面.语音聊天室的主界面.标注了各个控件的主界面. (如果觉得界面太丑,没关系,后面下载源码后,你可以自己美化~~) 一. C/S结构 很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示: 该项目的底层是基于OMCS构建的.这

语音聊天室可以用.net制作吗?

现在网络上很多有些想要自主制作语音聊天室软件的朋友在问是否可以用.net制作吗?从理论上说是可以的,但实际真正制作的时候肯定会有很多问题,而且关于这方面的资料也很少,杭州雅顾语音聊天室制作公司觉得目前还是应该用JAVA来制作语音聊天室. 因为单纯用.net功能没办法通过DHTML的能力实现,所以无论用什么语言都需要客户端加载一些本地代码,比如相应的组件(控件),ActiveX或 Java控件的运行环境很容易得到,但现在一般的机器上还没有装.NET,所以现在只能使用ActiveX或Java组件来做

多人语音直播系统开发中聊天室功能实现方案?

"直播+"不仅是视频.直播平台的尝试方向,也成为众多音乐平台的创新业务,而语音直播正是其中一种尝试.语音直播的用户更偏向年轻化,多为追求新鲜感的90后群体,他们有自己的行为处事方式,喜欢把孤独和无聊的时间用声音的方式宣泄.对于喜爱声音的这类群体来说,语音直播系统开发既保护了他们的隐私又让他们倍感亲切.那么从技术层面讲,多人语音直播系统开发中聊天室的功能实现需要特别注意哪些呢?一.语音直播系统开发的优势是什么?想必有人会问语音直播和传统的电台有什么不同呢?语音直播也有着自己的优势主要有以

C#实现多人语音聊天

在上一篇文章 实现一个简单的语音聊天室(多人语音聊天系统)中,我用C#实现了一个简单的语音聊天室,并给出了源码下载.虽然有源码,但是很多朋友反映,理解起来还是有些模糊.不够清楚.现在想来,是因为我忘了先将底层的原理介绍一下,语音聊天室是基于OMCS实现的,那么这里我就补上OMCS中与多人语音视频相关部分的原理及方案的介绍. 一. 动态组 OMCS采用"动态组"的模式来实现多人语音/视频聊天组,所谓"动态组",就是在运行时动态创建和销毁的组,其包含如下几层意思: (1

实现一个简单的视频聊天室(源码)

在 <实现一个简单的语音聊天室>一文发布后,很多朋友建议我也实现一个视频聊天室给他们参考一下,其实,视频聊天室与语音聊天室的原理是差不多的,由于加入了摄像头.视频的处理,逻辑会繁杂一些,本文就实现一个简单的多人视频聊天系统,让多个人可以进入同一个房间进行语音视频沟通.先看看3个人进行视频聊天的运行效果截图:       上面两张截图分别是:登录界面.标注了各个控件的视频聊天室的主界面. 一. C/S结构 很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示: 同语音聊

独家揭秘语音视频聊天室开发顶尖制作教程

互联网的不断发展,各种新技术的兴起,原本做管理软件 的我也逐渐转向从事着互联网相关的运营产品的开发.尤其是目前抄得最火热的音视频互动平台技术,今天我先列出最基本开发流程,适用于开发视频会议系统.语音视频聊天室系统.远程教育平台以及即时通讯平台(IM)等.希望对喜欢这方面的朋友有所帮助.同时欢迎各大高手参与讨论,相互交流.学习. 首先,知其然,先看看如何开始工作. 一.初始化 该部分是首先要完成的,包括设置对应的回调函数.设置SDK组件路径.设置是否产生日志文件等,通常初始化的代码如下(C++):

史上最全的手机聊天室开发经验分享上

先注明一下什么是手机聊天室,手机也就是立即通信的意思,简单的来说就是类似QQ一类的聊天室软件.而手机聊天室即是运用语音音频来接替保守文字交 换的形式停止沟通交换,眼前市场上的手机聊天室依据聊天的形式又多少种没有同的形式,一种是立即发言犹如电话通讯一样的聊天室软件,内中比拟存正在专人的 硬件有UCTalk,YY语音等,该类语音硬件以PC阳台为主,此外一种则是保守行灌音以后发送方式与保守文字IM的方式略有类似之处的聊天形式,比拟存 正在专人性的硬件有微信,陌陌等,该类的语音硬件大多涌现正在挪动端,P

百万级PHP网站架构工具箱

在了解过世界最大的PHP站点,Facebook的后台技术后,今天我们来了解一个百万级PHP站点的网站架构:Poppen.de. Poppen.de是德国的一个社交网站,相对Facebook.Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix.MySql.CouchDB.Erlang.Memcached.RabbitMQ.PHP.Graphite.Red5以及Tsung. Poppen.de目前有200万注册用户数.2万并发用户数.每天20万条私有消息.每天25