历史背景

网站从19年开始接手,网站CDN就是使用的七牛,网站有三大块使用了七牛的CDN做网站加速

  1. 静态资源,比如 css、javascript、logo
  2. 图片资源,比如全站的房源图片资源
  3. 视频资源,代理商上传的MP4视频,上传至七牛OSS通过多媒体服务转码为 m3u8

这些服务从 2017.10月开始运行到了今天(2024.08),从每月的100~200¥ 到现在的400~500¥(使用套餐抵扣后的每月消费金额) cloudfont qiniu bills

七牛云提供的对象存储kodo和大多数云服务商如阿里云 OSS,提供的服务基本上都一样,使用起来简单技术文档齐全,而且支持一些附加服务,比如图片裁剪、缩略,跨区复制等等很实用的功能。

再几年的使用过程中,有两个经常遇到的问题?

  1. 七牛提供 CDN 配置页面只要修改总是会卡主,卡主以后只能提工单人工介入,虽说人工介入蛮快,但每次也会消耗20分钟左右的时间,复发率贼高
  2. 七牛CDN 回源有时会很慢甚至500,可能我们的源在东京地区 AWS S3上

服务对比

免费额度对比

针对上面出现的问题,我再寻找是否其他更优的替代方案,再通过查找发现 Amazon 本身也提供 CloudFront 全球内容分发网络,而且每月免费额度还多

[!tip] 包含在永久免费套餐中

  • 每月传出 1TB 数据至互联网
  • 每月 10000000 个 HTTP 或 HTTPS 请求
  • 每月 200 万次 CloudFront 函数调用
  • 每月 200 万次 CloudFront KeyValueStore 读取
  • 免费 SSL 证书
  • 无限制,所有功能均可用

对比七牛云每月只有 50GB 的免费流量,CloudFront 真香,

分发质量测试

这里主要针对个单个Logo进行了国内全国主要城市运营线(IDC)网络测试,台湾、日本东京地区测试(因为我们的网站主要流量访客来自台湾)测试结果如下

  1. 全国主要城市测试结果 cloudfont qiniu cdn china

  2. 台湾、日本东京地区测试结果 cloudfont qiniu cdn test cloudfont qiniu cdn test table

可以明显看出无论是国内主要城市还是国外东京,Amazon 的 CloudFont 都完胜 Qiniu CDN,但在国内部分地区网络可用性存在DNS 解析失败的问题,目测可能是因为使用的是Amazon分配域名导致DNS解析失败。

迁移实施

在真正使用 Amazon CloudFont 之前还需要知道,S3 和 CloudFont 是默认都是不支持图片裁剪服务的,想要实现类似图片基本操作,通过参数完成缩略、格式转换,需要自行实现。

1
https://dora-doc.qiniu.com/gogopher.jpg?imageView2/1/w/200/h/200

好在也有相对成熟的方案,使用的技术原理如图所示 cloudfont image optimization set

参考开源项目:https://github.com/aws-samples/image-optimization

详细的步骤:

1
2
3
4
5
6
git clone https://github.com/aws-samples/image-optimization.git 
cd image-optimization
npm install
cdk bootstrap
npm run build
cdk deploy

执行CDK命令前还需要三个小步骤这里没有体现,

  1. 创建IAM用户拿到访问密钥(AK、SK)
  2. 为该账号分配好权限策略
  3. 根据分配的账号 AWS CLI

搭建过程中你可能会遇到的问题,需要为当前部署的账号设定权限策略,但是部署CDK需要具体的什么权限策略没有找到明显的说明文档,为此耽误了不少时间,为了快速解决这个问题,这里我使用的自己创建的策略,给予所有权限(这个方式很暴力,不推荐

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:*",
                "ssm:*",
                "cloudformation:*",
                "s3:*",
                "iam:*"
            ],
            "Resource": "*"
        }
    ]
}

aws iam permissions

在同样尺寸的图片下,Format=auto,根据浏览器accept支持的参数自动转换后的图片质量大小也有比较明显的减少,原图127KB,转化后81.5KB

cloudfont image optimization

如果需要指定宽高设定也是可以的,URL 后面追加参数即可,

1
?format=auto&width=300&height=300

再开始实施前,仍是先建议完成基础入门文档的通读,

最后感谢访问,希望对你也有帮助。

引用