美团点评移动网络优化实践方案
基于短连的优化
1、域名合并方案
app中域名过多,将有如下问题:
- HTTP请求需要跟不同的服务器建立连接,增加了网络的并发连接数量
- 每条域名都要经过DNS服务来解析服务器IP
最好的优化方案:既实现域名合并,又提升网络连接效率,又不改造后端业务服务器。
方案就是客户端业务层请求保持不变,客户端网络层将请求进行修改(聚合),由聚合后的请求实际的发出请求,在后端再完成域名的还原,实际走到各个原来的域名请求。
如:
客户端聚合:(三级域名编程URI) http://ad.api.dianping.com/command?param1=123 —> http://api.dianping.com/ad/command?param1=123
服务端进行还原:(还原后再去访问业务服务器) http://api.dianping.com/ad/command?param1=123 —> http://ad.api.dianping.com/command?param1=123
优势:
- 域名得到了统一,减少了DNS调用次数,降低了DNS劫持风险
- 针对同一域名,可以利用Keep-Alive来复用Http的连接
- 业务层都不用做修改,只是在两端的业务层上加了中间的转换层
2、IP直连方案
方案就是在程序启动时获取所有的IP列表,对IP进行测速,找出速度最快的IP。后续的访问都是通过这个IP发出。
优势:
- 摒弃了系统DNS,减少外界干扰,摆脱DNS劫持困扰
- IP列表更换方便
长连优化
1、HTTP/2技术
改造成本比较大
2、代理长连模式
基本思路为:在客户端与业务服务器之间架设代理长连服务器,客户端与代理服务器建立TCP长连通道,客户端的HTTP请求被转换为了TCP通道上的二进制数据包。代理服务器负责与业务服务器进行HTTP请求,请求的结果通过长连通道送回客户端。
长连模式的优势
- 对DNS无依赖,客户端到代理服务器是直接IP建立的;而代理服务器到业务服务器处于同一个内网。代理长连模式天生具有防DNS劫持的能力。
- 不同域名的请求可以复用同一条长连通道
- 通道更容易优化
- 业务层完全透明
如何实现:
中转服务的开发和部署
这一时期的任务主要是搭建代理中转服务器,并架设完整链路结构。 这一时期的任务主要是搭建代理中转服务器,并架设完整链路结构。
加密通道的建设
为了保护TCP通道上数据的安全性,客户端与代理长连服务器之间的二进制通信数据可以利用加密来保障数据安全。
专线建设
在代理长连服务器与后台业务服务器之间建设专线。使用专线,可以大大降低公网环境的干扰,保障服务的稳定性。
自动降级Failover建设
由于客户端的请求都放在TCP通道上进行,当代理长连服务器需要升级或者由于极端情况发生了故障时,将会造成客户端的整体网络服务不可用。为了解决这个问题,我们准备了Failover降级方案。当TCP通道无法建立或者发生故障时,可以使用UDP面向无连接的特性提供另一条请求通道,或者绕过代理长连服务器之间向业务服务器发起HTTP公网请求。
多地部署接入点
在全国多地部署代理长连接入点。客户端与接入点建立长连通道时,可以选择最快的服务器就近接入,从而大大降低通道连接速度并提升通信质量。
完整的架构图:
- CIP:即是自建的代理长连通道,长连通道支持TCP、UDP和HTTP子通道。HTTP子通道通过公网绕过长连服务器与业务服务器进行直接请求
- WNS:腾讯实现的长连通道,灾备使用
- HTTP通道:此处的HTTP通道是在公网直接请求API Server的网络通道。出于长连通道重要性的考虑,上传和下载大数据包的请求如果放在长连上进行都有可能导致长连通道的拥堵,因此我们将CDN访问、文件上传和频繁的日志上报等放在公网利用HTTP短连进行请求,同时也减轻代理长连服务器的负担。
- Push server:这个的作用是替代客户端常见的耗时低效的轮询方案。它是考虑到TCP时全双工的特点,为前端提供更好的推送能力。