文章地址:如何设计一个70W在线人数的弹幕系统
站在架构师的角度看待问题,提前思考一个优秀系统所使用的资源性价比,从网络、运维、代码性能等角度考虑。
下面对文章中涉及到的技术进行说明。
带宽优化
1、http压缩
http请求包括:请求行、请求头标、空行、请求数据
压缩过程:浏览器发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)Web服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。Web服务器通过Gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip. 然后把Response发送给浏览器。
解压过程:浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页
弹幕卡顿,丢失问题
Long Polling via AJAX
客户端向服务器发送Ajax请求,除非服务器有更新,否则服务器会保留响应,只要服务器有更新,它就会发送更新,然后客户端可以发送另一个请求。缺点是需要来回发送额外的报头数据,导致额外的开销。
WebSockets
Websockets定义为在servers和clients之间的双向连接。意味着servers和clients可以同时交流并发送数据。Web Sockets的重要一点是真实的并发和性能的优化。 在WebSocket API中,servers和clients只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
TCP长连接和短连接
TCP长连接是指再建立完成连接链路的时候,在链路空闲的时候并不结束这条线路,而是一直维持这条链路的连接
TCP短连接则是每次通信结束后,连接中断,下次通信时重新建立连接
可用性:服务拆分
将业务进行拆分,可以让多个服务不互相影响,保证服务的可用性和扩展性。不会因非核心业务服务不可用导致核心业务服务崩溃。