如何设计一个 70w 在线人数的弹幕系统 ?
文章整体分析:
首先介绍了弹幕问题出现的背景,之后将弹幕中具体遇到的问题显示在问题分析中,
之后将逐步解决问题方法进行概述,
以及最后的总结
1.问题的背景:
表明所属地区所属业务以及所需的功能,描述了使用的技术支持以及结果,还有弹幕功能所需要的性能要求
2.描述出现的问题
①带宽的压力 运维提供
②弱网导致的弹幕卡顿、丢失
③性能与可靠性
3.带宽优化的方案:
①.使用Http压缩:
百度百科
HTTP压缩是指在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩通常采用gzip压缩算法压缩HTML、JavaScript、CSS等文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点服务器的负担。
②.Response结构简化
过滤掉无用的响应数据
③.
gzip在HTTP压缩,一种在万维网中加速传输HTML和其他内容的技术。它是在RFC 2016中规定的三种标准HTTP压缩格式之一。这个RFC(征求意见稿)页定义了一种叫做"DEFLATE"的zlib格式,它和gzip格式相同,除了gzip添加了11字节头部和尾部的负载。但是,还是建议使用gzip而不是zlib,因为根据RFC 1950,IE还没有正确的实现该标准,还不能处理zlib格式
④.频率控制:
带宽控制: 请求中添加下次请求时间,保证请求频率可控,
稀疏控制:在弹幕量少的时间段,控制下次请求时间,来避免客户端的无效请求
弹幕卡顿、丢失分析
.使用长轮询方式
来挂起客户端发送的请求,通过事件触发服务器端来进行响应数据
优点为减少轮询
WebSockets 减少请求的控制开销
通过比较两者的业务场景,使用短轮询的方式来进行
短轮询是浏览器每隔一段时间向浏览器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。
本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。
可靠与性能:
拆分微服务:
逻辑较为复杂、调用较少的业务与逻辑简单、调用量高的服务拆开
拉取弹幕:按照一定时间段内将读取到的数据按照时间分片放入缓存中,通过一定时间段内的某个索引来进行读取
发送弹幕:在不影响拉去弹幕的情况下来进行正常的发送弹幕
总结:所应用的方案达到了实现的目标