最难不过二叉树

基于全球加速GA的跨境业务加速方案

2024-08-01

我们国内的产品需要分销到海外,因此有不少位于美国的用户会访问使用我们的接口。经过测试,美国用户请求我们的接口(我们的服务器部署在国内)会有高达3秒的延时,这对于产品的使用来说完全不能接受。为了解决这个问题,我们提出了两个方案来解决:

  • 使用AWS在美国重新搭建一套服务器集群,美国的用户的请求都会请求到AWS的服务器。这个方案的好处是请求时延很低,坏处是多部署了一套服务器集群,维护成本大大增大。
  • 使用全球加速代理,即使用云服务商提供的高速专线转发请求,提升请求速度。这个方案的好处是不需要额外部署服务器,全球只有一套服务器集群,处理来自全球的请求,维护成本低,坏处是时延最低也会有150ms的延迟,这是由地理位置距离决定的,无法克服。

考虑到我们业务场景不需要很低的请求延时,基本请求能在1秒内返回即可,所以使用全球加速代理的效果我们可以接受。另外我们全球加速代理我们不需要额外再购买云服务和部署服务,因此部署成本维护成本都很低,十分适合我们快速上线国外市场来验证产品。

什么是全球加速?

全球加速 GA(Global Accelerator)一款覆盖全球的网络加速服务,实现全球网络就近接入,可以减少延迟、抖动、丢包等网络问题对服务质量的影响,为全球用户提供高可用和高性能的网络加速服务。

根据调研,只有少量的云服务商有提供GA产品,国内比较大的云服务商只有:

  • 阿里云
  • 华为云(很可惜,不支持美国区域的加速)
  • ucloud

GA的应用场景很多,主要就是为了支持跨境业务。

比如全球游戏业务,我们玩国际网络游戏时都会很卡,几乎无法进行游戏,此时我们都开启游戏加速器来降低游戏延迟。针对游戏服务器加速、全球游戏同服的典型场景,GA就可以提供这样的服务,加速游戏内的网络请求速度,降低时延,提供端到端优质游戏用户体验。

image (15).png

第二个是跨境业务,我们的服务器部署在国内,而海外用户要访问国内网站时,一般都很慢,此时要提升全球访问体验。

image (16).png

为什么能降低时延?

GA的核心就是建立专用网络和加速节点来提升请求速度。我们先了解下为什么美国用户访问中国网站会很慢:

  • 运营商线路差异:比如电信的线路是优于联通、移动
  • 路由差异:请求从美国到中国需要经过多级路由器转发,如果跳转次数多,时间自然长。而且路由不同决定光在光缆中走的路程也不同,也会影响访问时间。附上一幅海底光缆地图(如下图所示),可以看到走不同的光缆路径路程差异巨大:https://cablemap.info/_default.aspx
  • 拥挤:高峰期运营商的流量大,出现了拥挤的情况,大概原理就是一条马路原来行使100辆车正常,在高峰的时候有150辆车在并驾齐驱,自然就会出现拥堵了。

image (17).png

所以GA的根本原理是将请求转发到GA运营商的服务器上,然后通过优化过的专线线路(解决路由、拥堵等问题)将请求转发到国内服务器上,这样能降访问延时、降低丢包率等问题。举个生活的例子就是,GA就是一个专线直达的高速公路,而普通请求走的是绕来绕去的城市道路(路程长、车道少、容易拥堵),所以请求到达的时间自然不一样。但必须注意的是,GA无法克服地理位置距离带来的时延。

举个例子说明这个问题,广州市和洛杉矶之间直线距离为11631 km,光速的传播速度时3.00×10^8 m/s,假设我们在洛杉矶请求广州的服务器,请求来回时间至少是11641km*2 / 3.00×10^5 km/s =77.6ms。因为广州市和洛杉矶之间的光缆不是直线,且光在光缆中走的路程也不是直线(折射),所以我们算光走的距离为直线距离的1.5倍,那么请求来回时间为116.4ms。根据此看出,光在光缆中的传播时间已经达到100ms+,如果还考虑请求在路由跳转的消耗,那时间会更长一些。所以如果客户端和服务器距离过大,时延肯定会有变大,像美国用户请求广州的服务器,延时达到150ms+是很正常的事情,也无法克服。如果不能容忍这个时延,那就不要使用GA。

一个位于美国加州的终端ping广州服务器,rtt如下,跟我们的计算差不多。

image (18).png

TCP三次握手建立连接的时间:

image (19).png

使用阿里云的GA进行跨境业务加速实践

首先我们使用阿里云提供的网络拨测工具,它在有全球200+网络拨测节点,可以模拟用户访问域名/IP,我们看一看全球各个区域访问指定域名/IP所要耗费的时间,提前做好记录,用于后续GA加速后的效果对比。

image (20).png

从上图看出,美国加州GET访问指定域名(位于广州的服务器)也要550ms的耗时,后续我们再观察使用GA加速后该域名的访问速度。

购买相关服务和相关申请

阿里云的GA不要求源服务器是否位于阿里云,也就是说,你的业务不管部署到阿里云还是在其他云或者是自建机房,都可以使用。另外DNS域名也不要求必须是阿里云购买的域名,在其他供应商购买的域名一样可以使用GA。

要使用阿里云的GA,需要额外购买以下产品服务:

  • 购买公网流量资源包
  • 购买跨境流量资源包

这里特别注意的是,购买跨境流量资源包需要先完成跨境合规认证。在联通跨境云专线在线申请页面提交资料,申请联通跨境业务资质。这里提交的资料还不少,需要提前准备,而且审核需要时间,一般是2到5天,所以注意时间上的安排,这里会有时间的额外消耗,我这里直接加急催促审核。

image (21).png

使用GA流程

这里我们购买的的是标准型全球加速,因为我们需要进行基于域名的加速,如果只是基于IP的加速,可以选择更为便宜的基础型全球加速。

image (22)-nknb.png

比如我们的业务服务器在广州, 国外目标客户位于美国,我们需要对某些域名进行加速,流程上我们这样操作:

  1. 被加速的应用域名已进行ICP备案
  2. 购买标准型GA、购买国内流量包、申请跨境专线、购买跨境流量包。
  3. 绑定带宽包,添加加速区域为【北美洲】。
  4. 监听指定域名。比如部署在广州机房的web服务通过域名www.example.com对外提供服务,转发端口为80,我们需要在GA配置页面上添加监听www.example.com
  5. 配置终端节点,因为我们的业务服务器部署在广州,因此终端节点选择【华南】
  6. 配置CNAME解析。添加CNAME记录将域名www.example.com指向全球加速实例分配的CNAME地址。此步骤在你买域名的云服务商控制台上操作。

这里介绍下CNAME的作用。

在DNS解析过程中,CNAME记录和A记录是比较常见的两种记录类型。

A记录:它用于将域名指向对应的IP地址空间,通过添加A记录相当于告诉DNS系统,当用户输入域名时将其导向A记录所设置的服务器IP地址。如我们需要将www.example.com这个域名指向1.1.1.1这个IP地址,就需要添加一条A记录,即可完成域名与IP地址之间的绑定关系。

CNAME:当我们想将域名指向另一个域名,而不是一个IP地址时,这时候就需要添加一条CNAME记录。比如,我们需要将www.example.com这个域名指向另外一个域名test.example.com,这时候就需要添加CNAME记录,而非A记录。

A记录和CNAME记录最终都是为了实现域名与服务器IP地之间的映射关系,但区别在于A记录直接将域名解析到一个IP地址,而CNAME记录则需要将域名解析到另外一个域名,然后由另外一个域名解析到IP地址。

看回我们这个GA部署的第五个步骤,需要配置CNAME。首先我们创建配置好GA实例后,会生成一个加速域名的CNAME,例如叫做fast.example.com,此时我们需要在DNS控制台上配置CNAME,选择加速区域【北美洲】。即当北美洲的用户访问www.example.com时,会被指向fast.example.com域名,此时再解析出具体IP进行路由。

测试加速效果

我们测试下建立三次握手所需要的时间:

直接请求IP地址(无加速)

image (23).png

请求加速域名

image (24).png

加速前是0.404s,加速后是0.202秒,提升约为100%。

再从另一个角度来观察加速效果。

我们观察浏览器请求所用的时间,这个是不用全球加速时的响应时间,可以看出三次握手消耗的时间很长。

image (25).png

这是全球加速后的响应时间,优化了连接建立的时间,非加速时请求耗时900ms,GA加速后基本可以优化到200ms。

a218e96afbda7bbb94b5647947fc968.png