GA联动CDN实现回源加速

电商、在线游戏、音视频点播等行业对于业务的访问速度与质量有非常高的要求。为全面提升终端用户的访问体验,您可以组合使用全球加速 GA(Global Accelerator)与内容分发网络CDN(Content Delivery Network)。全球加速GA依托阿里云优质BGP带宽和全球传输网络,通过联动内容分发网络CDN(Content Delivery Network),帮助您快速构建全球CDN回源网络,保障CDN业务实现动态内容的全面加速。

场景示例

本文以下图场景为例。某Web服务部署在美国硅谷地域的阿里云上,通过域名www.<YOURDOMAIN>.fun对外提供服务,转发端口为HTTP 80端口。客户端主要集中在中国香港。因跨国公网不稳定,中国香港客户端访问美国(硅谷)地域的Web服务经常出现延迟、抖动、丢包等网络问题。

您可以为Web服务部署CDN,CDN可以帮助您构建边缘节点缓存,提升业务访问体验。同时CDN联动全球加速,依托阿里云优质BGP带宽和全球传输网络,帮助您快速构建全球CDN回源网络,保障CDN业务实现动态内容的全面加速。

image

前提条件

  • 您的源站服务器已部署了应用服务。

    本文以Alibaba Cloud Linux 3操作系统为例,并使用NginxNetcat搭建一个包括动态时间显示和静态图片内容的网页,以模拟服务端。

    参考示例:阿里云ECS部署测试服务

    1. 执行 vi ECS_server_install.sh,按i键进入编辑模式。

    2. 复制并粘贴以下脚本内容:

      #!/bin/bash
      
      # 更新系统并安装NginxNetcat
      sudo yum update -y
      sudo yum install nginx -y
      sudo yum install -y nc
      
      # 启动并设置Nginx开机自启
      sudo systemctl start nginx
      sudo systemctl enable nginx
      
      # 配置Nginx
      sudo bash -c 'cat > /etc/nginx/nginx.conf <<EOF
      user nginx;
      worker_processes auto;
      error_log /var/log/nginx/error.log;
      pid /run/nginx.pid;
      
      events {
          worker_connections 1024;
      }
      
      http {
          include /etc/nginx/mime.types;
          default_type application/octet-stream;
          log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" '
                            '\$status \$body_bytes_sent "\$http_referer" '
                            '"\$http_user_agent" "\$http_x_forwarded_for"';
          access_log /var/log/nginx/access.log main;
          sendfile on;
          keepalive_timeout 65;
          include /etc/nginx/conf.d/*.conf;
      
          server {
              listen       80;
              listen       [::]:80;
              server_name  _;
              root         /usr/share/nginx/html;
      
              location / {
                  try_files \$uri \$uri/ =404;
              }
      
              location /dynamic {
                  proxy_pass http://127.0.0.1:8080;
                  proxy_set_header Host \$host;
                  proxy_set_header X-Real-IP \$remote_addr;
                  proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto \$scheme;
              }
      
              error_page 404 /404.html;
                  location = /40x.html {
              }
      
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }
      }
      EOF'
      
      # 创建静态内容
      sudo bash -c 'echo "<img src=\"test.png\" alt=\"Static Image\" width=\"300\"/>" > /usr/share/nginx/html/test.png'
      
      # 创建动态内容脚本
      sudo bash -c 'cat > /usr/share/nginx/html/dynamic_script.sh <<EOF
      #!/bin/bash
      while true; do
          echo -e "HTTP/1.1 200 OK\r\nContent-Length: \$(date | wc -c)\r\n\r\n\$(date)" | /usr/bin/nc -l -p 8080
      done
      EOF'
      
      # 给动态脚本赋予执行权限并后台运行
      sudo chmod +x /usr/share/nginx/html/dynamic_script.sh
      nohup /usr/share/nginx/html/dynamic_script.sh > /dev/null 2>&1 &
      
      # 重启Nginx服务
      sudo systemctl restart nginx
      
      # 创建index.html文件
      sudo bash -c 'cat > /usr/share/nginx/html/index.html <<EOF
      <!DOCTYPE html>
      <html>
      <head>
          <title>Test Page</title>
      </head>
      <body>
          <h1>GA and CDN Test Page</h1>
          <h2>Static Content: Image</h2>
          <img src="test.png" alt="Static Image" width="300"/>
      
          <h2>Dynamic Content: Current Time</h2>
          <div id="dynamic-time">Loading current time...</div>
      
          <script>
              function fetchTime() {
                  fetch("/dynamic")
                  .then(response => response.text())
                  .then(data => {
                      document.getElementById("dynamic-time").innerText = data;
                  })
                  .catch(error => {
                      document.getElementById("dynamic-time").innerText = "Failed to load current time.";
                  });
              }
      
              setInterval(fetchTime, 1000);
              fetchTime();
          </script>
      </body>
      </html>
      EOF'
    3. Esc键退出编辑模式,然后输入:wq保存并退出。

    4. 执行sudo sh ECS_server_install.sh命令,运行脚本。

    5. 上传一个图片文件test.png到示例脚本所指定的/usr/share/nginx/html目录下。

  • 您已为业务域名www.<YOURDOMAIN>.fun配置了DNS解析,即已配置了A记录将域名指向源站服务器的公网IP。

    本文以阿里云云解析 DNS(Alibaba Cloud DNS)为例,为您介绍如何配置DNS解析。如何配置解析记录,请参见添加解析记录。如果您使用的DNS解析服务为非阿里云云解析DNS,请参见您的DNS服务商操作指导。

  • 您已开通CDN服务

操作步骤

步骤一:配置GA实例

本文以按量付费的标准型GA实例为例。

  1. 全球加速控制台标准型实例 > 实例列表列表页面,单击创建标准型按量付费实例

  2. 实例基础配置向导页面,配置基础信息,单击下一步

    GA基础配置.png

  3. 配置加速区域向导页面,添加加速地域并为其分配带宽,然后单击下一步

    本文场景中,加速区域添加为中国香港公网质量类型配置为BGP(多线)加速地域其他参数配置可保持默认值或根据实际情况修改。

    重要
    • 加速地域包含中国内地地域时,自有域名必须完成ICP备案才可对外提供服务。

    • 如果带宽峰值设置过低,可能出现限速从而导致流量被丢弃,请合理规划带宽峰值,确保和业务需求匹配。

    GA加速区域.png

  4. 配置监听配置向导页面,配置转发协议与端口,然后单击下一步

    本文场景中,协议配置为HTTP端口配置为80,其他参数可保持默认值或根据实际情况修改。监听其他参数配置可保持默认值或根据实际情况修改。

    HTTP监听.png

  5. 配置终端节点组配置向导页面,配置终端节点后端服务,然后单击下一步

    本文场景中,地域选择美国(硅谷)后端服务类型选择ECS后端服务选择目标ECS实例,然后阅读并选中数据跨境合规承诺终端节点组其他参数配置可保持默认值或根据实际情况修改。

    EPG.png

    GA 跨境合规.png

  6. 配置审核配置向导页面,确认全球加速的配置信息,然后单击提交

  7. 在实例列表页面,找到已创建的GA实例,在CNAME列获取GA实例分配的CNAME。

步骤二:配置CDN

  1. CDN控制台的域名管理页面,单击添加域名

  2. 域名信息配置向导页面,配置业务信息源站信息

    1. 配置业务信息

      本文场景中,业务信息区域的加速区域选择全球(不包含中国内地)加速域名输入业务域名www.<YOURDOMAIN>.fun,其他参数可保持默认值或根据实际情况修改。关于域名信息配置详细信息,请参见添加加速域名

      CDN 添加域名.png

    2. 配置源站信息

      源站信息区域单击新增源站信息,在新增源站信息对话框中,选择源站的类型,并填写源站地址,然后单击确定

      本文场景中,源站信息选择源站域名类型并输入GACNAME,权重配置为100,其他参数可保持默认值或根据实际情况修改。关于源站信息配置详细信息,请参见添加加速域名

      CDN 配置源站.png

    3. 选中数据跨境合规承诺,并单击下一步

  3. 推荐配置配置向导页面,可为域名配置缓存过期时间、带宽封顶、页面优化等功能的配置,您可以根据实际情况配置并单击一键配置,或直接单击跳过,暂不配置

    本文场景中,在缓存过期时间区域,找到默认缓存规则,在操作列单击修改,并配置地址/dynamic过期时间0秒,以实现动态内容回源获取。关于推荐配置的详细信息,请参见推荐配置(可选)

    CDN PHP不缓存.png

  4. 在域名管理页面,找到已添加的域名,在CNAME列获取CDN分配的CNAME。

步骤三:配置DNS解析

域名添加成功后,您需要将对应域名的DNS解析到CDNCNAME,访问加速域名的请求才能转发到CDN节点,实现加速效果。

为避免已有的A记录与CNAME记录产生冲突,您可以为A记录和CNAME记录设置不同的解析请求来源(即解析线路)。例如,本文场景下,您可以先为中国香港地区添加CNAME记录进行测试,待测试成功后,再逐步扩展至其他地区或切换为默认线路。

  1. 域名解析页面,找到目标业务域名,在操作列单击解析设置

    说明

    对于非阿里云注册域名,需要先添加域名到云解析控制台,才可以进行域名解析设置。

  2. 在解析设置页面,单击添加记录,配置CNAME记录,然后单击确定

    本文场景中,记录类型配置为CNAME主机记录配置为www解析请求来源配置为中国香港,记录值配置为CDNCNAME,解析记录其他参数配置可保持默认值或根据实际情况修改。

    配置CNAME.png

步骤四:访问测试

在加速地域(本文为中国香港地域)的电脑中,使用浏览器打开开发者工具并访问www.<YOURDOMAIN>.fun,可以查看当前网页各资源的加载时间。

  1. 测试配置GACDN后的网络延迟情况。

    CDN+GA回源加速效果.png

  2. 测试未配置GA,仅配置了CDN的网络延迟情况。

    您可以将CDN源站信息从GACNAME修改为源站服务器的公网IP,并在GA中删除终端节点组,然后进行测试。

    CDN加速.png

  3. 测试未配置GACDN的网络延迟情况。

    您可以在CDN中停用加速域名,并在DNS中停用指向CDNCNAME记录,然后进行测试。

    未使用CDN+GA.png

  4. 加速效果对比:

    汇总如上测试数据,可以看出使用CDN后,降低了静态内容(test.png)的访问延迟;在CDN基础上配置GA后,进一步降低了动态内容(dynamic)的访问延迟。

    场景

    静态内容test.png

    耗时(单位:毫秒)

    动态内容dynamic

    耗时(单位:毫秒)

    数据对比

    场景一:使用GA加速并且使用CDN

    5

    228

    相比场景二,动态内容访问速度提升50.5%。

    场景二:使用CDN但不使用GA

    5

    461

    相比场景三,静态内容访问速度提升98.1%。

    场景三:不使用GACDN

    261

    474

    /

说明

GA联动CDN后的加速效果以您的实际业务测试为准。

相关文档