设为首页 | 收藏本站欢迎来到卓越网络免费免备案CDN加速,DDoS和CC攻击防御,高防CDN管理平台!

已阅读

国内CDN加速如何提升网络性能?

作者:cdnfine      来源:cdnfine      发布时间:2019-03-01
 

随着国内移动互联网的高速发展与成熟,越来越多的开发者将目光瞄准了海外,以寻找新的流量增长。网络性能的提升是应用出海开发者面临的首要挑战之一。

本期内容,携程无线研发总监赵辛贵将从海外网络应用场景差异带来的挑战出发,分享携程在海外网络性能优化上的探索经验。

海外网络与国内网络的差异

延迟和带宽

海外网络与国内网络的差异最终都会体现在延迟和带宽两个方面。携程的服务器机房都在国内,访问链路过长、节点带宽不足以及国内骨干网出口高峰期的拥挤都会带来延迟过高的问题。

网络类型差异

通过下方国内外用户网络类型的分布我们可以发现:海外网络中,3G网络依然占有较高的比重,而国内98.5%的用户都使用的是WiFi和4G网络,网络质量更为理想。

其次,海外网络在不同的区域网络质量也会存在明显的差异。在经济欠发达地区(比如非洲、东南亚)网络带宽和延迟不理想,访问耗时就更长。

此外,海外使用OpenDNS更为普遍。这种全球通用的DNS解析方式与传统IPS提供的缓存一定差异,导致海外的用户无法找到合适的节点,也不利于静态资源的查找。

终端类型差异

下方这张图是海外Trip酒店订单在不同终端上的分布图。从图上我们可以看出,APP和PC站点的比例各占40%左右,H5站点占比20%。而国内APP占比可能达到了80%甚至90%。因而,我们在做海外网络性能优化时还需要重点考虑PC和H5站点使用场景的优化。推荐阅读:《免费CDN服务|前端面经笔记

此外,我们还要考虑到国际漫游用户的影响。随着国际漫游资费的降低,越来越多的用户在海外游玩时会使用漫游网络。漫游网络访问任何网络资源都需要先回到国内然后再出去,如果无法给他们提供合适的接入点,会对他们的体验造成不好的影响。

部署挑战

上面各种网络场景带来的差异,带来最直接的挑战就是部署上的挑战。目前携程的服务器都在国内,所有用户的访问都需要回源到这里,这肯定不是最理想的方案。

在理想情况下,用户应该直接访问当地的服务器,这样可以极大的缩短访问链路,从而提升体验。这时可以考虑自建IDC和云端部署两种方式,但是这两者都存在成本和复杂度等各方面的挑战,所以携程内部还在探索更理想的部署方案。

无线网络性能指标

携程在做无线网络优化时主要关注成功率和耗时两个性能指标。这亮点对整个APP的用户体验非常关键。

成功率:以客户端发出请求数量为分母,接收到成功响应为分子来计算。其中又包括连接成功率以及链路的复用率两个个指标。当端到端服务成功率下降时,我们要去分析是连接的成功率有问题还是链路发复用率太低导致的。

耗时:以客户端发出请求到收到响应直接时间差来计算。其中包括客户端序列化、TCP链路连接、服务端处理、客户端反序列化的耗时指标。

优化策略

流程简化

1、使用IP直连,不使用域名

因为使用域名,需要做DNS解析,解析到对应的IP之后再做连接。携程在早期使用DNS时发现大概有1.5%到2%的网络请求失败跟DNS有关。存在解析地址错误或者解析无法响应的情况。此外使用DNS解析的平均耗时更长,国内的测试数据显示DNS解析平均要90毫秒左右,在海外,如果是2G、3G网络,或者当地没有DNS缓存,解析耗时需要1秒以上。

2、尽可能的使用长连接,减少连接的耗时。

长链接可以减少连接耗时,因为连接要需要经历TCP三次握手,耗时较长。在国内,一次TCP连接平均耗时184毫秒,海外平均耗时352毫秒,接近国内的两倍,所以尽量使用长连接。

3、异步socket

携程最早的方案是建立一个连接池,包含多个长连接。长连接不可用的时候再创建短连接。长连接在线程里会同步发送,发送完再发送下一个。后来携程对这个方案进行了改进,只创建一个长连接,所有请求都异步发送,收发并行。采用异步socket方案改进后,请求耗时降低了25%。

4、多端口

多端口也是携程在线上遇到问题总结出来的方案。最初携程使用长连接默认使用80端口。经用户反馈发现,在某酒店路由器上做了一些限制,80端口只能发HTTP协议,其它协议使用这个端口就会丢包。所以一定要做多端口尝试,一个端口不通,要做其他端口的重试。

链路选择

前面简化流程,很重要的一点就是IP直连。那么如何选择合适的IP呢?

首先,携程APP会预置一组IP地址,根据ping/tcp connect值动态选择最合适的IP。

其次,携程会在服务端实时统计,根据不同区域的用户不同的运营商,服务端选择尽可能适合的IP List,让客户端尽快的用起来。该功能上线以后耗时大概有10%的提升。

此外,携程还尝试采用Edge节点加速方案,在海外直连网络急速供应商的Edge节点,然后服务商在国内机房部署一个Edge节点,然后让所有请求通过两个Edge节点进行加速。但是这次尝试效果不太理想,原因可能在于我们连接Edge节点采用的是域名连接,域名连接需要二次解析,从而导致耗时过长。

负载均衡??

使用IP直连时,大家可能会有疑问,负载均衡怎么做。

在IP访问时,并不是直接连接到Gateway这层,在这之前有一个A10 L4的硬件负载均衡设备,它会将协议转发到Gateway,让Gateway与客户端进行连接,它不考虑业务逻辑,只是做转发和负载均衡,所以使用IP直连后端服务不会有太多的负载均衡问题。此外,携程在做动态下发的时候可以根据业务指定响应的IP。

减少数据

减少数据分为动态请求和静态请求。

对于动态请求,携程使用PB替代自有的数据格式,使整体数据量减少20%。另外对于加密的请求,采用先压缩后加密的策略,可以有效减少数据的大小。因为如果先加密会导致数据格式紊乱,再进行压缩时效果就很有限。

对于静态资源,携程采用了以下四种措施来减少数据的大小:

1、使用CDN加速;

2、其次会根据设备分辨率的不同,动态切图;

3、采用WebP图片格式,减少30%的数据大小;

4、离线化,将H5资源包等资源内置到APP里面去。

合理重试

重试分为连接重试和服务重试。

对于连接服务器的超时, 会直接进行重试;如果单个端口连接不上,则会切换端口进行重试,失败再切换IP进行重试。

服务重试,对于查询相关的操作可以直接重试;对于写操作的服务,像下订单或者是支付的服务,要谨慎一些,需要考虑服务的幂等性再进行重试。

携程海外网络服务优化探索

携程旅行App中网络请求服务架构以及优化:

携程APP主要有TCP和HTTP两种网络服务请求架构。具体如下图所示:

对HTTP服务请求携程进行了优化,将APP中的HTTP请求通过自有协议TCP通道转发,复用APP已有的TCP链路,不需要再做DNS解析和Connect,减少了整体耗时。经过这个优化,HTTP请求的成功率和耗时都有30%以上的提升。在这里,其实还可以做进一步的优化,在客户端请求给到TCP Gateway之后,可以在这一层进行解析,然后直接给到后端服务。但是因为这块开发工作量会比较大,以及目前的效果已经达到了预期,就没有进一步采取这个措施。

首屏资源优化

首屏资源优化主要是指对携程PC和H5站点的首屏进行了优化。主要有以下几点措施:采用服务端SSR渲染方案,页面直出;根据国家的不同,将资源站点分区,减少公共DNS对CDN的影响;H5站点资源收敛,将资源连接到几个有限的域名上;做页面瘦身,做到轻量级。

优化效果总结

经过以上各种优化,效果如何?以下是海外场景下TCP服务后端到端的统计数据:

1、成功率达到了99.71%,已经接近了国内的99.8%的水平;

2、平均耗时608ms;

3、90%的请求会在1s内完成,80%的请求在600ms以内。

根据与同行业的对比,这个数据是比较理想的。

未来的优化方向

今天分享的都是从客户端的角度进行的各种网络优化方式,但是最理想的方案是尽可能把站点部署到海外,让用户就近接入,做到应用和资源出海。应用出海包括服务框架、中间件、Gateway、发布系统、业务应用等。资源出海则包含图片资源、Web资源、域名分区等。这是携程未来网络性能优化的重点方向。

Keywords: 免费CDN加速 免备案CDN加速 高防CDN加速