背景
现在的抖音、快手等一系列能支持直播的软件如何做到的同一时间万人发弹幕的功能的?
问题分析
带宽压力;
弱网导致的弹幕卡顿、丢失;
性能与可靠性。
带宽优化
启用Http压缩
HTTP压缩是指在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩通常采用gzip压缩算法压缩HTML、JavaScript、CSS等文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点服务器的负担。
Response结构简化
不理解如何进行的Response结构简化,待我查阅归来!
内容排列顺序优化
根据gzip的压缩的压缩原理可以知道,重复度越高,压缩比越高,因此可以将字符串和数字内容放在一起摆放
频率控制
带宽控制:通过添加请求间隔参数(下次请求时间),保证客户端的请求频率服务端可控。以应对突发的流量增长问题,提供有损的服务。
稀疏控制:在弹幕稀疏和空洞的时间段,通过控制下次请求时间,避免客户端的无效请求。
弹幕卡顿、丢失分析
Long Polling via AJAX
客户端打开一个到服务器端的 AJAX 请求,然后等待响应,服务器端需要一些特定的功能来允许请求被挂起,只要一有事件发生,服务器端就会在挂起的请求中送回响应。如果打开Http的Keepalived开关,还可以节约握手的时间。
优点: 减少轮询次数,低延迟,浏览器兼容性较好。缺点: 服务器需要保持大量连接
WebSockets
Websockets定义为在servers和clients之间的双向连接。意味着servers和clients可以同时交流并发送数据。Web Sockets的重要一点是真实的并发和性能的优化。 在WebSocket API中,servers和clients只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
总结
最终该服务在双十二活动中,在Redis出现短暂故障的背景下,高效且稳定的支撑了70w用户在线,成功完成了既定的目标。