带宽压力
http请求压缩
一个http数据包请求由4个部分组成:请求行、请求头标、空行、请求数据。
请求行分为了三个部分。请求方法,请求url与http版本。
请求头行,由关键字值对组成,使用:分隔
空行
请求数据,请求正文中可以包含客户提交的查询字符串信息。
使用http gzip进行将请求中内容进行压缩将传输的内容,解决传输过程中的带宽压力,原理就是把原来的请求头内容压缩,类似于平时使用压缩包,也可以进行请求头结构优化
频率控制
带宽控制:通过添加请求间隔参数(下次请求时间),保证客户端的请求频率服务端可控。以应对突发的流量增长问题,提供有损的服务。
稀疏控制:在弹幕稀疏和空洞的时间段,通过控制下次请求时间,避免客户端的无效请求。
这种可以通过sentinel的链路控制进行配置
弹幕卡顿,丢失问题
Long Polling via AJAX
客户端向服务器发送Ajax请求,服务器接到请求后保持住连接,直到有新消息才返回响应信息,客户端处理完响应信息后再向服务器发送新的请求。这样做的好处是可以省去很多无用的请求。但是需要服务端保持大量的连接。
WebSockets通信
WebSocket。服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
TCP长连接与短连接
短连接环境下,数据交互完毕后,主动释放连接。
长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
在上文中,由于东南亚的弱网环境,tcp长连接也会因为网络问题断开,所以无论是Long Polling via AJAX还是WebSockets通信都不符合我们的业务需要。
服务拆分
发送弹幕与查询弹幕完全不在同一个量级,通过将业务进行拆分,将发送弹幕逻辑与查询弹幕逻辑拆分。可以让两个服务不互相影响,保证服务的可用性。
引入本地缓存
引入本地缓存的好处是,用户不必等待数据返回,而是读取内存中缓存的数据,大幅度降低调用时延