最新要闻
- vivo X Fold2通过3C认证:4800mAh电池+120W快充
- 当前快播:比尔盖茨回应暂停训练AI:并不能解决问题 重点是最大程度利用
- 今日最新!告别Mini LED!MacBook Pro屏幕将升级为OLED:三星供货
- 回国在即!旅美熊猫丫丫上海检疫后将被北京动物园接走
- 请注意!武汉全民健身中心游泳馆营业时间调整
- 199元一人!金山办公推出WPS 365“全家桶”服务
- 最资讯丨飞利浦推出新款44.5寸带鱼屏:弹出式摄像头 售价近9000元
- 头条焦点:真人电影《芭比》新预告:小丑女尽显修长美腿
- 女子请假照顾病危丈夫被公司开除!法院判了:公司赔13万
- 环球新消息丨5岁娃上坟藏冥币带回家要送朋友:还有男孩在奶奶坟前跪求不写作业不挨打
- 新势力老大换了!理想汽车周交付超6000辆:超蔚来、小鹏总和
- 环球热点评!2023年清明档票房破亿!任天堂《超级马力欧兄弟大电影》暂列亚军
- 天天热消息:立省4万!商家上线理想L7、L8“激光雷达”改装件:自己都能装
- 全球观天下!李子柒油管广告收益登顶热搜 停更一年收入78万元
- 世界热讯:宿迁贷款利率2022最新利率表,宿迁贷款利息
- 沙特俄罗斯等减产拉高油价后 黄金大涨近2%逼近历史最高纪录:美国难受
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
如何设计一个 70w 在线人数的弹幕系统 ?
原文:cyningsun.com/03-31-2019/live-streaming-danmaku.html
背景
为了更好的支持东南亚直播业务,产品设计为直播业务增加了弹幕。第一期弹幕使用腾讯云支持,效果并不理想,经常出现卡顿、弹幕偏少等问题。最终促使我们开发自己的弹幕系统。性能要求是需要支持,单房间百万用户同时在线。
问题分析
按照背景来分析,系统将主要面临以下问题:
带宽压力
【资料图】
假如说每3秒促达用户一次,那么每次内容至少需要有15条才能做到视觉无卡顿。15条弹幕+http包头的大小将超过3k,那么每秒的数据大小约为8Gbps,而运维同学通知我们所有服务的可用带宽仅为10Gbps。
弱网导致的弹幕卡顿、丢失
该问题已在线上环境
性能与可靠性
百万用户同时在线,按照上文的推算,具体QPS将超过30w QPS。如何保证在双十一等重要活动中不出问题,至关重要。性能也是另外一个需要着重考虑的点。
带宽优化
为了降低带宽压力,我们主要采用了以下方案:
启用Http压缩
通过查阅资料,http gzip压缩比率可以达到40%以上(gzip比deflate要高出4%~5%)。
Response结构简化
内容排列顺序优化
根据gzip的压缩的压缩原理可以知道,重复度越高,压缩比越高,因此可以将字符串和数字内容放在一起摆放
频率控制
- 带宽控制:通过添加请求间隔参数(下次请求时间),保证客户端的请求频率服务端可控。以应对突发的流量增长问题,提供有损的服务。
- 稀疏控制:在弹幕稀疏和空洞的时间段,通过控制下次请求时间,避免客户端的无效请求。
弹幕卡顿、丢失分析
在开发弹幕系统的的时候,最常见的问题是该怎么选择促达机制,推送 vs 拉取 ?
Long Polling via AJAX
客户端打开一个到服务器端的 AJAX 请求,然后等待响应,服务器端需要一些特定的功能来允许请求被挂起,只要一有事件发生,服务器端就会在挂起的请求中送回响应。如果打开Http的Keepalived开关,还可以节约握手的时间。
优点:减少轮询次数,低延迟,浏览器兼容性较好。缺点:服务器需要保持大量连接。
WebSockets
长轮询虽然省去了大量无效请求,减少了服务器压力和一定的网络带宽的占用,但是还是需要保持大量的连接。那么人们就在考虑了,有没有这样一个完美的方案,即能双向通信,又可以节约请求的 header 网络开销,并且有更强的扩展性,最好还可以支持二进制帧,压缩等特性呢?于是人们就发明了这样一个目前看似“完美”的解决方案 —— WebSocket。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。
优点:较少的控制开销,在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于 HTTP 请求每次都要携带完整的头部,此项开销显著减少了。更强的实时性,由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。长连接,保持连接状态。
Long Polling vs Websockets
无论是以上哪种方式,都使用到TCP长连接,那么TCP的长连接是如何发现连接已经断开了呢?
TCP Keepalived会进行连接状态探测,探测间隔主要由三个配置控制。
keepalive_probes:探测次数(默认:7次)
keepalive_time 探测的超时(默认:2小时)
keepalive_intvl 探测间隔(默认:75s)
但是由于在东南亚的弱网情况下,TCP长连接会经常性的断开:
Long Polling 能发现连接异常的最短间隔为:min(keepalive_intvl, polling_interval)
Websockets能发现连接异常的最短间隔为:Websockets: min(keepalive_intvl, client_sending_interval)
如果下次发送数据包的时候可能连接已经断开了,所以使用TCP长连接对于两者均意义不大。并且弱网情况下Websockets其实已经不能作为一个候选项了
- 即使Websockets服务端已经发现连接断开,仍然没有办法推送数据,只能被动等待客户端重新建立好连接才能推送,在此之前数据将可能会被采取丢弃的措施处理掉。
- 在每次断开后均需要再次发送应用层的协议进行连接建立。
根据了解腾讯云的弹幕系统,在300人以下使用的是推送模式,300人以上则是采用的轮训模式。但是考虑到资源消耗情况,他们可能使用的是Websocket来实现的弹幕系统,所以才会出现弹幕卡顿、丢失的情况。综上所述,Long Polling和Websockets都不适用我们面临的环境,所以我们最终采取了短轮训的方案来实现弹幕促达
可靠与性能
为了保证服务的稳定性我们对服务进行了拆分,将复杂的逻辑收拢到发送弹幕的一端。同时,将逻辑较为复杂、调用较少的发送弹幕业务与逻辑简单、调用量高的弹幕拉取服务拆分开来。服务拆分主要考虑因素是为了不让服务间相互影响,对于这种系统服务,不同服务的QPS往往是不对等的,例如像拉取弹幕的服务的请求频率和负载通常会比发送弹幕服务高1到2个数量级,在这种情况下不能让拉弹幕服务把发弹幕服务搞垮,反之亦然,最⼤度地保证系统的可用性,同时也更更加方便对各个服务做Scale-Up和Scale-Out。服务拆分也划清了业务边界,方便协同开发。
在拉取弹幕服务的一端,引入了本地缓存。数据更新的策略是服务会定期发起RPC调⽤从弹幕服务拉取数据,拉取到的弹幕缓存到内存中,这样后续的请求过来时便能直接⾛走本地内存的读取,⼤大幅降低了调用时延。这样做还有另外一个好处就是缩短调⽤链路,把数据放到离⽤户最近的地⽅,同时还能降低外部依赖的服务故障对业务的影响,
为了数据拉取方便,我们将数据按照时间进行分片,将时间作为数据切割的单位,按照时间存储、拉取、缓存数据(RingBuffer),简化了数据处理流程。与传统的Ring Buffer不一样的是,我们只保留了尾指针,它随着时间向前移动,每⼀秒向前移动一格,把时间戳和对应弹幕列表并写到一个区块当中,因此最多保留60秒的数据。同时,如果此时来了一个读请求,那么缓冲环会根据客户端传入的时间戳计算出指针的索引位置,并从尾指针的副本区域往回遍历直至跟索引重叠,收集到一定数量的弹幕列表返回,这种机制保证了缓冲区的区块是整体有序的,因此在读取的时候只需要简单地遍历一遍即可,加上使用的是数组作为存储结构,带来的读效率是相当高的。
再来考虑可能出现数据竞争的情况。先来说写操作,由于在这个场景下,写操作是单线程的,因此⼤可不必关心并发写带来的数据一致性问题。再来说读操作,由图可知写的方向是从尾指针以顺时针⽅向移动,⽽读⽅向是从尾指针以逆时针方向移动,⽽决定读和写的位置是否出现重叠取决于index的位置,由于我们保证了读操作最多只能读到30秒内的数据,因此缓冲环完全可以做到无锁读写
在发送弹幕的一端,因为用户一定时间能看得过来弹幕总量是有限的,所以可以对弹幕进行限流,有选择的丢弃多余的弹幕。同时,采用柔性的处理方式,拉取用户头像、敏感词过滤等分支在调用失败的情况下,仍然能保证服务的核心流程不受影响,即弹幕能够正常发送和接收,提供有损的服务。
总结
最终该服务在双十二活动中,在Redis出现短暂故障的背景下,高效且稳定的支撑了70w用户在线,成功完成了既定的目标。
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
关键词:
-
如何设计一个 70w 在线人数的弹幕系统 ?
原文:cyningsun com 03-31-2019 live-streaming-danmaku html背景为了更好的支持东南亚直播业务,...
来源: 如何设计一个 70w 在线人数的弹幕系统 ?
vivo X Fold2通过3C认证:4800mAh电池+120W快充
当前快播:比尔盖茨回应暂停训练AI:并不能解决问题 重点是最大程度利用
今日最新!告别Mini LED!MacBook Pro屏幕将升级为OLED:三星供货
回国在即!旅美熊猫丫丫上海检疫后将被北京动物园接走
每日热文:汇编第三章复习之七种寻址
请注意!武汉全民健身中心游泳馆营业时间调整
199元一人!金山办公推出WPS 365“全家桶”服务
最资讯丨飞利浦推出新款44.5寸带鱼屏:弹出式摄像头 售价近9000元
头条焦点:真人电影《芭比》新预告:小丑女尽显修长美腿
女子请假照顾病危丈夫被公司开除!法院判了:公司赔13万
世界热议:sms-activate操作简便易上手且好用的接码工具【保姆级教程】
环球新消息丨5岁娃上坟藏冥币带回家要送朋友:还有男孩在奶奶坟前跪求不写作业不挨打
新势力老大换了!理想汽车周交付超6000辆:超蔚来、小鹏总和
环球热点评!2023年清明档票房破亿!任天堂《超级马力欧兄弟大电影》暂列亚军
天天热消息:立省4万!商家上线理想L7、L8“激光雷达”改装件:自己都能装
全球观天下!李子柒油管广告收益登顶热搜 停更一年收入78万元
世界热讯:宿迁贷款利率2022最新利率表,宿迁贷款利息
沙特俄罗斯等减产拉高油价后 黄金大涨近2%逼近历史最高纪录:美国难受
焦点速读:豆瓣8.0分!电影《忠犬八公》票房破亿:冯小刚主演
自建堆排序:
焦点!JavaScript快速入门(二)
微头条丨你坐过吗?这款双层火车全国仅此一列
焦点快播:必看?迪士尼《小美人鱼》内地定档5月26日 最新剧照黑小美人鱼亮相
全球热讯:时隔6年 任天堂马里奥之父宫本茂暗示新作要来了:告别手游平台
特斯拉法务部要玩真的了 马斯克:我们找了许多有才的律师
环球视点!666元起!国内一公司推出太空葬 创始人:逝去亲人快到头顶会手机提醒
福布斯发布2023亿万富豪榜 全球新首富诞生:要把股份平均分给五个子女
法拉利F1车手莱克莱尔签名时200万名表被抢走 小偷今落网
民主失真、政治失能严重侵蚀美式人权根基(钟声)——美国已成为全球人权发展的搅局者和阻碍者④
【独家】虚拟机磁盘扩容(parted、lvm)
环球今头条!【环球财经】英镑兑美元汇率创10个月新高
涨见识!清明节南北习俗有何不同:北方注重修坟 南方烧纸钱等
环球微头条丨特斯拉不要的技术 蔚来当个宝?
媒体:第一批因AI失业的人已经出现!公司不会养闲人 这些职业最容易被AI取代
在四川买一个新的房子买房子需要哪些手续费
天天观察:今日清明节 专家科普都有哪些习俗:其实是三个节日融合而来
升级iOS 16.4的用户被苹果坑了!Wi-Fi/天气崩溃、电池续航大缩水
环球看热讯:95后寿衣模特回应被说阴气重 本人回应坚持做自己:任何职业都该被尊重
世界微资讯!读SQL进阶教程笔记08_处理数列
【播资讯】NVIDIA全景光追模式成硬件杀手!RTX 4090仅16帧:不开DLSS没法玩
车主集体投诉宝马id7系统虚假宣传 宝马中国回应
速看:JR:我打NBA只因为热爱篮球 从来都不是为了钱和名利
为啥天空是蓝色的?而不是彩虹一般的七彩颜色呢?
环球聚焦:一亩地几百个洞 青藏高原的鼠害泛滥成灾:但其实不怪它们
全球实时:阿里搞出脱口秀版GPT 把“鸟鸟”塞进去了?官方回应
百事通!全球河马数量锐减 哥伦比亚却泛滥成灾:花350万美元送走70头
全球微速讯:含赶尸、傀儡 中式恐怖游戏《过阴》公开Demo试玩
工作总结经验材料(实用13篇)
微信封号解封的6种方法
天天百事通!游戏主播世界前30记录被熊孩子清零引围观 本人回应:痛苦又幸运
快讯:中国智能电视盒子销量榜:小米第三 腾讯太猛了
第一皇妃(关于第一皇妃的介绍)
世界热文:数据库系统原理之数据库应用设计与开发实例
别再用这姿势睡觉了 冲上热搜的“还阳卧”小心睡出毛病
天天热消息:周鸿祎突然离婚!360官方回应:12个月内不会减持
速读:解决Abp设置DefaultLanguage默认语言不生效的问题
【全球播资讯】光云科技:预计未来几年公司SaaS业务收入占比将持续提高
位居国内日本动画票房榜首:《铃芽之旅》获IGN 9分好评
天天时讯:富豪也玩不起大火箭!又一火箭公司破产
福布斯2023全球亿万富豪榜发布:新世界首富出炉!钟睒睒连续三年蝉联中国首富
天天微动态丨创始人周鸿祎离婚 360:周鸿祎拟将6.25%公司股份分割至胡欢名下
超级小桀回应"存档被清"上热搜:谢谢大家帮我想办法
java -- Object类和String类
债市日报:4月4日
全球看热讯:4月江南等地存在洪涝灾害风险 南方部分河流可能发生超警洪水
每日速看!精度优于10米 我国海上垂直回收火箭试验圆满成功
焦点信息:想不想要RTX 4070 Ti?七彩虹iGame动图设计大赛免费送
2023全球汽车品牌价值100强发布:特斯拉第一、26家中国车企上榜
【世界独家】《暗黑4》玩家反对买豪华版早玩4天 凭啥买标准版要晚玩
今日精选:一女子睡觉未摘耳钉 1个月后取下耳垂裂成两瓣:画面可怕
天天新消息丨超详细!新手如何创建一个Vue项目
【求助贴】临危受命,如何救火做到一半的项目?
本田雅阁插混版后备箱隆起 博主:吹不下去了、真不如比亚迪汉
工信部通报扫码支付新骗局:钻App漏子 远程扫付款码“偷钱”
世界报道:五一还有近1个月!三山五岳就爆满了
今日播报!广州拟对公园、广场等场所全天禁止驾驶电动自行车 你支持吗?
全球播报:6.4万买的软件终于能用了?特斯拉FSD被曝将于国内大范围测试
全球微资讯!微信可以直接借钱的小程序:不用下载软件就可以到账
当前要闻:读客文化:公司的数字内容业务包括了电子书业务和有声书业务
环球关注:氢燃料汽车不认输 日本投资15万亿日元豪赌未来:产能6倍提升
世界快讯:果粉用iPhone为何很爽?原因是有几大功能安卓永远做不好
天天观点:女生妇女节休假半天被公司辞退!法院判公司赔18万余元
每日热闻!油车车主注意了!4月起可在加油区域使用手机支付
世界新资讯:新海诚:想早日再来中国!想念中国菜和白酒
每日消息!分享我炼制的脚本神器,powershell版《tcp-ping》
【环球快播报】记一次对抗流氓软件的经历
Linux文件类型发布啦!
视点!模拟mybatis接口动态注册过程
天天快播:Linux之父:连你自己都懒得解释,那这就是一堆垃圾!
天天快看:不选无痛分娩,却愿意花钱给婴儿拍写真?大部分人花钱并不靠理性权衡,想花就花了
【环球报资讯】疑似广汽埃安Hyper GT充电站自燃 车辆还未正式亮相发布
环球今头条!超级小桀“世界前30记录”被亲戚家熊孩子清零:直播间设备也遭破坏
一个月多次大范围崩溃!苹果天气又崩上热搜:iPhone免费天气App了解下
百事通!我进入银行科技部半年,已经丧失跳槽的能力了!
使用vue2+element-ui+vuex实现后台管理系统的头部背景色动态点击修改
视焦点讯!Python数据分析第七周作业随笔记录
焦点速读:python文件操作:r、w、a、r+、w+、a+和b模式
小皮1-click漏洞的代码审计学习笔记
天天亮点!百余名驻澳门部队官兵无偿献血