来了!应用加速方式应该对你有用!

301 阅读4分钟

当应用系统的客户端访问服务端时,客户端所在地域与请求服务端的地域远近也是一个很关键的因素。优化就近地选择网络,可以极大地减少网络延迟、丢包,提升传输效率。

而在一个系统中,会存在很多的静态资源,比如系统里的图片、html页面、js 文件、css 文件和动态获取的数据,如业务数据的接口访问。

静态资源加速

对于静态数据,这些数据在很大的概率下,在一定时间内是不会频繁进行修改,对于这部分数据,可以使用 CDN(内容分发网络),当下很多云厂商都有提供该能力,CDN的主要功能就是就近接入节点去访问资源,同时会在节点上对访问过的文件进行缓存,在访问同一个文件时,可以从缓存中获取; 如果节点缓存里找不到对应的资源,则会通过回源机制,从源服务器获取相应的资源,并在对应的节点上设置缓存。

大致流程解析:

  1. 客户端访问资源地址
  2. 通过本地DNS 系统,CDN 厂商会授权DNS服务器进行解析域名
  3. 当通过本地DNS系统获取到对应区域的节点,会缓存到本地DNS系统中,便于后续访问
  4. 当客户端拿到对应节点的ip后,开始访问CDN系统
  5. CDN系统的节点是经过就近选择,相对于客户端是比较近的节点
  6. 当CDN系统收到请求后,会判断缓存里是否已经有当前的文件,如果有则直接返回
  7. 如果当前的缓存里不存在,则会向源站发起请求获取对应的资源,并在获取成功后,会缓存在对应的节点上

之后,客户在发起静态资源时,都会从CDN节点上获取,因为节点是就近部署的,访问速度会比直接从源站访问快很多,但因为有缓存,在缓存失效前,访问到的文件数据都是一样的,所以对于更新频率很高的资源,是不适合通过cdn 进行加速访问的。

动态资源加速

静态资源可以通过就近的节点进行缓存资源,来优化客户端的访问速度,前提是修改频率低。那对于应用接口的数据,可不可以同样使用这样的方式进行处理呢?因为应用接口的数据是动态的,不能在客户端(CDN节点)进行缓存,所以cdn的方式不合适。

CDN 是通过在就近部署节点进行缓存,那应用服务器是否可以呢?从CDN的架构,我们也可以推断,也可以通过在本地部署应用服务器,再通过DNS进行相应的配置,指向本地应用服务器进行访问。这样就涉及到 DNS ,应用服务器部署等开发,那有没有其他的方案呢?

现在各云厂商都有提供应用全球加速的产品,大概的原理和CDN的流程类似的。就近接入加速节点,加速节点通过云厂商的专线网络和后端的源应用站点进行连接,提升在加速区域的访问速率。

例如阿里云的全球加速产品的图示(引自阿里云的示意图)

  1. 客户端访问资源地址
  2. 通过本地DNS 系统, 厂商会通过授权DNS服务器进行解析域名
  3. 当通过本地DNS系统获取到对应区域的节点,会缓存到本地DNS系统中,便于后续访问
  4. 当客户端拿到对应节点的ip后,开始访问应用系统
  5. 客户获取的ip已经是经过就近选择,是通过加速的产品进行配置的ip
  6. 当加速区域系统收到请求后,会通过内部加速网络访问到应用后端