低成本、易落地的网络加速方案-2天提速10%不是梦?

213 阅读4分钟

引言

作为相对成熟的互联网公司,webp、CDN等都是公司搞过的网络加速方案了。此时要做整体的全面提速,一般需要运维层面优化,成本很高,哪怕平均耗时减少5ms,可能耗资都在百万甚至千万了。那还有可能找到一个相对理想的提速方案么?

  1. 不增加硬件成本和运营成本
  2. 较少的人力成本
  3. 较强的通用性
  4. 较低的改造门槛
  5. 较大的性能提升

我这有一些已经落地实践过的方案,和大家分享下。

0、如何衡量

  • 在前端采集性能数据,而不是后端。后端10ms的接口,前端感知到的耗时可能是3s
  • 看的是项目整体的网络耗时,而不是单个接口的耗时。整体耗时包括一切网络请求。
  • 微信小程序等平台已经自带了统计。例如:

image.png

1、TLS1.2升级为TLS1.3

技术原理

image.png

  • TLS1.2握手2-RTT或1-RTT
  • TLS1.3握手1-RTT或0-RTT

TLS1.3减少了握手时间,线上为了安全,一般不会启用0-RTT。

改造方式

买入的TLS证书,一般是同时支持TLS1.2+TLS1.3的。

TLS证书在nginx统一做的,因此,运维调整即可支持。

效果

约降低几ms

2、CDN设置浏览器缓存

技术原理

浏览器缓存,是指浏览器本地缓存了已请求成功过的服务器文件,在下次加载文件时,根据缓存策略从浏览器本地缓存中读取或者从服务器读取。可参考此文: 浏览器缓存和CDN

公司用的文件服务是亚马逊的S3服务,使用了CDN

image.png

由于S3和CDN的浏览器缓存都没有启用,因此,即使走了CDN,图片的二次加载仍然要走网络,有一定耗时。

优化前后:

image.png

改造方式

设置CDN的30天强制浏览器强缓存(注意和S3服务中的Etag、Last-Modified区分,是浏览器缓存的不同实现方式。强制浏览器缓存在到期前完全不走网络)。

  • 缺点:文件/图片地址不变,更换文件/图片内容,会导致客户端无法获取到最新的图片
  • 优点:网络耗时立马下降,且实现简单
  • 使用注意:业务上,确保更换文件/图片内容时,每次都生成新的文件/图片地址。

效果

约降低10~40ms, 有明显效果。

这是优化后的微信小程序的统计,明显下降:

image.png

3、后端接口的响应体压缩

技术原理

对满足条件和数据大小阈值的响应,进行gzip压缩,减少流量和发送时延。

image.png

改造方式

方式一:业务方自己做。例如:spring响应压缩

方式二:运维层面做。例如:nginx对指定接口做响应压缩

效果

约降低10~30ms, 有明显效果

4、前端埋点非实时上传

技术原理

前端埋点实时上传或者伪实时上传,一旦埋点多了,会造成队头阻塞导致超时,会抢占带宽导致请求缓慢。 在微信统计平台上,可以看到埋点的接口调用数量,例如:

image.png

改造方式

前端埋点放入队列,达到阈值再上传。允许少量丢失。

效果

视埋点数量而定,埋点越多效果越明显

总结

方案改造方式效果
TLS1.3运维支持TLS1.3约降低几ms,无明显效果
浏览器缓存CDN支持或者文件存储服务支持约降低10~40ms,有明显效果
响应压缩运维支持或者业务自己做约降低10~30ms,有明显效果
埋点非实时上传前端改造视埋点数量而定,埋点越多效果越明显
  • 方案评估
  1. 不增加硬件成本和运营成本。 只有一次性的软件开发成本

  2. 较少的人力成本。 方案开发,每个项目最快2天即可完成上线

  3. 较强的通用性。 方案适用于公司的所有微信小程序

  4. 较低的改造门槛。 修改简单,门槛低

  5. 较大的性能提升。 整体网络耗时下降几十ms

  • 提速方法论

    浏览器缓存和降低发送时延,是网络提速的捷径