各家 CDN 标准和使用

各家 CDN 标准和使用
MeteorCat排除部分国内云服务器特立独行的设置, 其实目前部分厂商 CDN 已经提供标准化的接口
S3(Simple Storage Service)标准: 亚马逊 AWS 定义的对象存储标准协议/API 规范, 现已成为行业通用对象存储标准
一般如果要做下载内容分发的话, 建议询问所在云服务器厂商时候提供这部分 对象存储 业务, 将分发的文件上传来提供全球下载CDN加速
S3 标准当中有以下概念
-
Bucket(桶): 顶级存储对象单位(全局唯一命名), 相当于创建独立的根目录等待资源放置, 用于归类(images,files,apk类似归类) -
Object(对象): 存储最小单元, 即上传的分发文件, 比如你提交的静态图片/文件/压缩包等 -
CORS(跨域设置): 标准跨域访问规则, 控制前端网页能否直接通过 CDN 域名拉取桶内资源, 如果是不符合的域名就不允许拉取资源 -
Lifecycle(生命周期): 基于对象上传时间触发自动操作, 可以给资源设置过期清理/冷热切换/版本控制来保证资源可控
得益于标准化 S3 接口, 切换不同厂商CDN/对象存储时, 仅需同步桶内文件即可复用全部资源目录结构、权限与规则从而实现无缝切换
S3 标准操作有以下通用接口
-
桶操作(Bucket)PUT /{自定义的 bucket 名称}: 创建对应资源桶, 用于放置指定归类的资源GET /: 罗列账号下所有资源桶GET /{自定义的 bucket 名称}: 获取对应资源桶内部所有对象, 可以用于遍历资源从而刷新资源DELETE /{自定义的 bucket 名称}: 删除指定资源桶(谨慎操作), 删除资源桶会导致相关资源对象一起清空
-
对象操作(Object):PUT /{自定义的 bucket}/{自定义 object 名}: 在指定资源桶之中提交对应文件GET /{自定义的 bucket}/{自定义 object 名}: 下载/获取 CDN 当中资源文件HEAD /{自定义的 bucket}/{自定义 object 名}: 获取文件元信息(大小/MIME/ETag, CDN 缓存更新的时候需要对比这部分信息)DELETE /{自定义的 bucket}/{自定义 object 名}: 删除资源桶对应资源PUT /{自定义的 bucket}/{自定义 object 名}?acl: 设置访问权限(公共读/私有读,控制 CDN 是否免鉴权访问等)
其实类比起来 bucket 操作就是相当于系统中的根目录/分类文件夹, 而 object 就是对应文件夹里的实体文件, 需要将文件关联到指定目录之中
Cloudflare 对象存储
Cloudflare 的对象存储目前是个人开发者最友好的, 基本上申请个域名托管就可以
但是部分国内线路可能会产生
负优化, 特别晚上高峰期的时候资源访问可能很不稳定
一般来说需要在项目后台自行编写 HTTP 请求将用于资源提交上来, 这部分因为每种语言都不一样所以这里采用工具模拟提交文件
首先是必须在 Cloudflare R2 当中确定 S3 API/账号ID/令牌信息
API 令牌 需要点击 管理 跳转内部就可以在内部生成, 目前令牌有两种类型:
-
帐户 API 令牌(推荐): 整个帐户相关的服务身份验证和存储桶访问创建 API 令牌 -
用户 API 令牌: 为特定的用户帐户特定的服务身份验证和存储桶访问创建 API 令牌
云服务厂商是支持以
组织来作为单位(组织下面涵盖不同的个人账号), 想做组织下细分才需要用户API令牌来分配
一般来说直接创建 帐户 API 令牌 令牌即可, 后台系统的开发人员只需要上面提到的 S3 URL 和 API 令牌
那么这里就可以用工具模拟 S3 指令操作
API 文档(检索
R2和Bucket相关即可): https://developers.cloudflare.com/api/
这部分没什么好说的, 然后对外访问目录其实只需要在指定 数据桶(Bucket) 当中设置域名解析即可
这部分其实没什么需要太过深入的说明, 看看对应 Cloudflare 的官方文档配置即可
需要注意: Cloudflare 个人版每月免费额度只有 10G 左右, 对于个人一般是足够用, 但对于企业日常使用则建议升级企业套餐
阿里云
如果面向全球, 比较推荐 阿里云香港 的节点服务而不是使用直接国内云服务
阿里云 oss-fs: https://www.alibabacloud.com/help/tc/oss/user-guide/ossfs-quick-start
阿里云的 oss-fs 实际上就是将本地硬盘映射到 oss 的操作, 将文件操作同步变成 bucket 操作
1 | 下载 oss-fs |
阿里云的 oss 操作更加符合现代开发节奏, 无论什么编程语言的 S3 API 都被抽象成简单 fs 操作
如果先提交 CDN 只需要让管理后台直接执行 fopen/fwrite 之类操作即可







