如何设计一个几十万在线用户弹幕系统
现在无论是直播还是电视剧,我们都可以看到上面满满的弹幕,如果有一天公司自己要做一个这样的满足十几万用户在线的弹幕系统,我们该如何去设计呢
弹幕跟我们平时做的系统不太一样,平时做的最多的就是客户端发起请求,也就是数据都是由客户端推送到服务端,但是弹幕是由服务端推送给客户端的。比如我们现在在看直播,很多用户都会发送弹幕,然后每个在线的用户都可以收到这条弹幕信息。这时候我们有两种方案
也就是客户端不停的去服务端去拉取数据,但是会有一个弊端,因为我们每次看电视剧的时候,看一遍一条弹幕只会显示一次。如果不停的去轮训,会有很多无效的请求,而且不停的去轮训无疑会给服务器造成很大的压力,因为你客户端少,如果现在有十几万的客户端同时在线,那么服务器每隔一段时间就会有几十万次的查询压力。
随着现在IM系统的成熟,WebSocket也越来越被重视,WebSocket在当服务器收到消息之后,可以主动将消息推送给客户端。
在开始的时候,因为用户不多,我们只有一台服务器,也能满足需求,但是试想一下,如果某一天用户增多了,你这一台服务器真的顶得住十几万的用户来访问吗???
既然这时候一台服务器压力太大,那我们就部署多台服务器,将压力进行分摊,这样每台服务器的压力就不会那么大
但是这时候单台服务器压力是解决了,那推送消息给每一个用户就做不到了,我们知道WebSocket在推送消息的时候,会先拿到这个用户的Session,然后通过这个Session将消息推送给这个用户,但是用户Session都是保存在我们本地服务中的。比如这个用户A的Session在服务器A上,用户B在服务器B上,那么你怎么拿到用户B的Session呢?
很多人会说,把所有用户的Session都保存到Redis中不就可以了,其实这样也不是不行,但是如果你现在有几百万,几千万的用户Session呢?
所以我们可以使用消息中间件或者Redis的发布订阅模式,比如使用消息中间件RocketMq,有一个用户发送了一条弹幕,那么就发送一条消息到MQ中,所有服务都接收到这条消息之后,然后就可以拿到本地所有用户的Session,再进行发送。
不知道大家有没有想过这样一个问题,假设我们现在有10台服务器,每台服务器有一万人,这时候,一个人发送一条弹幕,那么每台服务器WebSocket都要推送一万次消息到客户端,如果这时候有一万人发送了弹幕呢?那么WebSocket是不是就要推送 1万 * 1万次数据呢。在这种高并发的情况下,WebSocket会因为发送的太频繁导致各种各样的问题,比如与客户端断开连接等。
所以第二个难点就在这了
现在我们把所有需要推送的消息都发送到MQ中,然后在MQ中将消息推送给客户端。为什么要这么做呢?
在MQ中我们可以进行限流,这样WebSocket就不用频繁的去操作了。尤其类似于弹幕这种业务,也不是说要求实时的。一般我们发送一条弹幕,都会过个几秒钟我们自己才能看见,所以我们可以根据自己服务器的性能来决定消费速度。
用户发送的弹幕最终都是要进行持久化存储的,就像腾讯视频一样,无论你什么时候去看,那些弹幕都还在。那么弹幕存储时机是什么时候呢???
一般都会选择在用户发送一条弹幕之后就存储这条弹幕,如果用户发送一条弹幕我们就同步的将这条数据存储到MySql中,那么这时候有几十万的弹幕该怎么办? 这时候数据库的压力就很大了。因为弹幕这种数据丢个几条对我们业务没有任何影响,所以我们可以选择异步存储,比如将要保存弹幕信息发送到MQ,MQ异步的将消息存储到MySql中即可
对于弹幕查询,我们后续可以将数据同步到搜索引擎Elasticsearch中,后续的查询就直接查ES就好,就不用查数据库,。避免对数据库造成压力
对于弹幕系统来说,难点就在于二个,第一:对于大量消息推送到客户端,第二:就是消息的异步存储了。
对于这个方案还有什么不足的地方,欢迎大家提出,一起进步
举报/反馈
上一篇:〖标〗广东海洋大学霞山校区、湖光校区物业服务项目经营场所租赁
下一篇:凝聚维护国家安全的磅礴力量 写在第八个全民国家安全教育日来临之际
最近更新基础教育
- 聚焦中心任务 强化精准指导 确保第二批主题教育取得高质量好效果
- 郑州:到2025年,职业院校毕业生留郑率将超六成
- 普陀一小区拆除重建工作加速推进
- 官宣!江苏新增5所四星级高中
- 波士顿大学金融硕士排名靠前吗
- 成人自考考试地点是根据什么安排的?
- 彩色“毛衣”扮靓路边梧桐 南外师生发起“我们的梧桐”城市艺术公益活动
- 武向平院士助力首届四川省“科创筑梦”青少年科学节
- 长城热点|河南安阳滑县安罗高速高速公路建设非法取土
- 王易副校长赴广西参加定向选调生及引进高水平大学博士座谈会并看望校友
- 四川成考中遇到不会作答的题该怎么做呢?
- “外国语学院人才培养共同体联盟”在江苏科技大学组建
- 长沙市人社局前往长沙市数字技能人才公共实训基地考察
- 百姓看联播丨提速啦!坐着高铁去滑雪丨燃起来!足球小将
- 闵行专家!落户新疆这里→丨一家亲
- 严查遛狗不拴绳!郑州多个小区发布“文明养犬”提醒
- 对话高途大学生业务负责人刘文勇:AI数字人是集团三大战略之一,未来或是千亿级市场
- 北京市2023年下半年高等教育自学考试提示
- 没有大专毕业证可以自考本科吗?
- 奥运冠军自曝:需终身佩戴呼吸机!协和专家提醒,这病危险,得治!
- 这场培训,给崇明这群人送上一份“安全大餐”
- 5∶0零封法国波尔多大学女足 北师大女足挺进决赛
- 托福总成绩是多少分
- 原“暨南大学全球青年领导力研究院院长”被举报“猥亵”?本人回应称系双方自愿行为
- 前三季度五粮液继续保持稳健发展态势