网站加速之网络加速

背景

20240229113331
如上图,互联网企业的国内业务肯定部署在国内,出海业务则一般部署在海外;具体部署区域,则一般根据用户所在区域,选择就近的区域。

源站部署到不同区域,选择不同的机房,对于各地用户来说,会带来网络距离及网络线路质量的差异,从而对用户的访问响应时间也会产生一定差异。

网络距离长及网络线路质量差,则会给用户带来比较差的体验,具体情况概括如下:

  • 用户访问国内源站遇到的情况:
    • 内容分类:
      1. 静态内容访问慢,因为静态内容相对动态api接口请求的响应大小,一般大很多;
        • 静态内容包括:静态网页(html、css、js、图片)、大文件、点播;
      2. 动态接口请求响应慢
    • 原因:
    • 用户到源站网络距离远;
    • 用户到源站网络线路质量差;
    • 用户访问静态内容大,本身需要时间;
    • 源站负载大:因为源站带宽、源站硬件资源等受限
  • 用户访问国外源站遇到的情况,同用户访问国内源站遇到的情况外,还有其他特殊场景:
    • 区域跨度更大;
    • 网络距离更远;
    • 网络线路质量更差,不同区域访问还有可能有访问限制。

那么,下文介绍的就是我们常见的网络加速方法,主要包括以下几类:

  • 静态加速
  • 动态加速DCDN(Dynamic Route for Content Delivery Network)
  • 全站加速(Whole Site Acceleration)
  • 全球加速(Global accelerator)

ps:因为是要介绍的技术是通用技术,各家公有云都有自己的产品,所以在下文的介绍中,我为了避免重复的画图及描述,引用了各家公有云的文档,在下文中有对应标示。

静态加速

静态加速,我们听过最多的就是CDN,而且一般用的是CDN的静态文件缓存加速功能。
CDN加速的核心就是就近访问缓存:

  • 让用户就近访问到性能最佳的边缘加速节点;
  • 相对于源站,边缘节点是部署在不同区域,离用户更近的镜像节点,可以缓存源站内容供用户访问。

CDN的加速原理(引用阿里云官网文档):

  • 如图:20240229145925
  • 请求过程:
    1. 当终端用户向www.aliyundoc.com下的指定资源发起请求时,首先向Local DNS(本地DNS)发起请求域名www.aliyundoc.com对应的IP。
    2. Local DNS检查缓存中是否有www.aliyundoc.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向网站授权DNS请求域名www.aliyundoc.com的解析记录。
    3. 当网站授权DNS解析www.aliyundoc.com后,返回域名的CNAME www.aliyundoc.com.example.com。
    4. Local DNS向阿里云CDN的DNS调度系统请求域名www.aliyundoc.com.example.com的解析记录,阿里云CDN的DNS调度系统将为其分配最佳节点IP地址。
    5. Local DNS获取阿里云CDN的DNS调度系统返回的最佳节点IP地址。
    6. Local DNS将最佳节点IP地址返回给用户,用户获取到最佳节点IP地址。
    7. 用户向最佳节点IP地址发起对该资源的访问请求。
    8. 返回用户所需数据:
    9. 如果该最佳节点已缓存该资源,则会将请求的资源直接返回给用户(步骤8),此时请求结束。
    10. 如果该最佳节点未缓存该资源或者缓存的资源已经失效,则节点将会向源站发起对该资源的请求。获取源站资源后结合用户自定义配置的缓存策略,将资源缓存到CDN节点并返回给用户(步骤8),此时请求结束。

阿里云CDN产品架构图,其他公有云产品架构图差不多。 20240229150346

  • 链路质量系统

    • 链路质量探测系统会实时监测缓存系统中的所有节点和链路的实时负载以及健康状况,并将结果反馈给调度系统,调度系统根据用户请求中携带的IP地址解析用户的运营商和区域归属,然后综合链路质量信息为用户分配一个最佳接入节点。
  • 调度系统

    • 支持策略中心、DNS、HTTPDNS和302调度模式。当终端用户发起访问请求时,用户的访问请求会先进行域名DNS解析,然后通过阿里云CDN的调度系统处理用户的解析请求。
  • 缓存系统

    • 用户通过收到的最佳接入节点访问对应的缓存节点,如果节点已经缓存了用户请求的资源,会直接将资源返回给用户;如果L1(边缘节点)和L2(汇聚节点)节点都没有缓存用户请求的资源,此时会返回源站去获取资源并缓存到缓存系统,供后续用户访问,避免重复回源。分级缓存的部署架构可提高内容分发效率、降低回源带宽以及提升用户体验。
  • 支撑服务系统

    • 支撑服务系统包括天眼、数据智能和配置管理系统,分别具备了资源监测、数据分析和配置管理能力。
    • 资源监测:天眼可以对缓存系统上用户业务运行的状态进行监测。例如对CDN加速域名的QPS、带宽、HTTP状态码等常见指标的监控。
    • 数据分析:用户可以分析CDN加速域名的TOP URL、PV、UV等数据。
    • 配置管理:通过配置管理系统,用户可以配置缓存文件类型、缓存时去参数缓存等缓存规则,以提升缓存系统的运作效率。

节点分布(引用华为云官网文档)

  • 华为云国内节点: 20240229152638
  • 华为云国外节点: 20240229152659

cdn加速类型(引用华为云官网文档)

  • 网页加速
    • 网站的html、js、css、图片等静态资源加速。 20240229154346
  • 大文件下载加速
    • APP更新,手游更新等,传统的下载网站类业务。 20240229154444
  • 点播加速
    • 在线教育类网站、在线视频分享网站、互联网电视点播平台、音乐视频点播APP的音视频点播服务,会涉及音视频转码。 20240229154610

动态加速DCDN(Dynamic Route for Content Delivery Network)

web1.0时代,网站大部分是静态内容,所以最开始的静态加速就能满足需求;随着web2.0及移动互联网时代的到来,网站中的动态请求占比逐渐提升。
那如果动态内容请求慢,是否有加速的办法了?答案是有的,那就是动态加速。
如下图,因为动态内容如果加了缓存,那么用户访问到的就不是最新的内容;
所以动态请求一般不做缓存加速的方案,而是通过优化边缘节点到源站的回源链路的方式来加速;
cdn静态缓存加速的边缘节点一般是通过公网线路回源到源站;
动态加速网络会把动态加速网络中的所有边缘节点互联成一个私有网络;
动态加速就是用户就近访问到边缘节点后,通过这个私有网络,智能选择一条最优质量的线路回源,保证回源过程不会受到公网网络的不确定因素的影响的方式来进行动态请求的加速;同时这个私有网络也会进行一些长链接等协议优化的方式来加速。
ps:

  • 动态加速并不能解决因为物理距离增加的响应时间变长的问题。
  • 动态加速效果,需要业务自己实际对比测试,看满不满足业务需求。
  • 图片来自阿里云 20240229164821

全站加速(Whole Site Acceleration)

全站加速,其实就是同时具备静态加速和动态加速的能力。
CDN初代产品具有的能力就是静态加速,随着升级支持动态加速的功能,就变成了全站加速。
不同的云厂商产品规划不同,有些云厂商会把全站加速单独拿出来作为一个产品,有些云厂商则把全站加速集成到了CDN产品中。
全站加速的过程如下图:

  • 用户发起的请求如果是静态请求,则会遵循CDN静态加速的流程,主要是通过缓存来加速;
  • 用户发起的请求如果是动态请求,则会遵循动态加速的流程,主要是通过智能路由来加速。

ps:不同云厂商的动态加速计费方式和静态加速计费方式可能不一样,需要注意计费方式不同带来的成本不同的问题。图片来自华为云:
20240229170909

全球加速(Global accelerator)(引用aws官网文档)

全球加速核心和全站加速中的动态加速的原理类似,大概如下:

  • 把分布在全球的边缘节点组成一个云厂商的私有网络;
  • 用户会访问到就近的边缘节点;
  • 边缘节点会通过私有网络回源到源站;
  • 源站可以部署多个,部署到不同区域(region);
  • 回源可以根据策略回源到不同源站。
  • AnyCast IP可以绑定到不同区域的边缘节点。 20240229184402

应用场景(图片来自华为云):

  • 游戏业务
    20240229190311
  • 跨国办公
    20240229190840

总结

  1. 怎么选择加速产品?
    • 看业务需求:是要对静态文件加速,还是要对动态接口加速,或者对静态文件和动态接口都加速?
    • 静态文件加速选择CDN静态加速即可;
    • 动态api加速选择动态加速DCDN,同时一般会启用静态加速,即开启全站加速;
    • 动态api加速当然也可以选择全球加速(Global accelerator)。
  2. 使用加速产品的注意事项:
    • 确认厂商的计费模式及价格;这个关系到我们的成本;
    • 需要看厂商是自建CDN还是融合CDN?这个关系到厂商产品的性价比;
    • 各家CDN厂商的节点分布情况以及是否能够提供节点清单?用来确认用户访问的节点是不是CDN厂商的节点?
    • 确认使用加速产品前后的性能对比;可以使用RUM(真实用户http访问监控)数据做对比分析;
    • 确认厂商对CDN边缘节点的健康检测及故障迁移能力;这个可能涉及到一种情况:我们的用户访问到了不能正常提供服务的CDN边缘节点,即用户此时不能正常访问;如果厂商不能快速检测到异常的CDN边缘节点并把流量切换到其他正常CDN边缘节点,就会影响我们业务的可用率;这种问题我们自己能否感知,取决于我们的RUM(真实用户http访问监控)的能力。
    • 确认边缘节点的缓存策略;比如说http状态码404、502、503是否缓存?
    • 确认边缘节点的回源策略;有些厂商的cdn静态加速是通过公网回源,有些厂商会通过厂商自己的私有优化的网络回源。
    • 确认跨站请求配置、客户端ip透传配置;不同配置对业务有不同影响;
    • 确认是否支持IP黑白名单功能;内部系统开启CDN加速,可能需要用到IP白名单来限制其他IP的访问;
    • 确认是否部署CDN使用量实时监控;这个主要是避免异常的大流量或大带宽引起的异常费用;比如平常带宽1Gbps,突然涨到5Gbps甚至更大,那么费用也会对应增长。
  3. 选择什么加速产品以及选择哪家厂商可以根据自身业务的需求以及第2点中的注意事项(主要是各厂商的性价比)评估选择即可。

作者介绍

  • 邹永红 高级SRE专家

微鲤技术团队

微鲤技术团队承担了中华万年历、Maybe、蘑菇语音、微鲤游戏高达3亿用户的产品研发工作,并构建了完备的大数据平台、基础研发框架、基础运维设施。践行数据驱动理念,相信技术改变世界。