业务场景
OSS对象存储作为一种海量、平安、低成本、高长久的云存储服务,深受宽广开发人员的青睐。然而在全球化的业务场景中,不论OSS抉择放于海内或者大陆地区,都会导致另外一部分用户上传和拜访品质不佳的问题。
本文旨在提供一种基于OSS对象存储的低成本的寰球减速计划。
网络架构图
方案设计
下载计划
- 应用自定义域名配置CDN减速
- DNS解析:自定义域名CNAME解析到CDN减速域名
- 对象拜访签名调整:改用URL鉴权的形式进行签名
上传计划
- 间接应用OSS传输减速域名 {bucket}.oss-accelerate.aliyuncs.com
配置步骤
- 配置CDN减速
- 减速域名配置
自定义域名
,后续对象拜访应用此域名。源站信息抉择OSS域名
, 域名类型抉择自定义OSS源站
,域名配置为OSS传输减速域名 {bucket}.oss-accelerate.aliyuncs.com
- 创立胜利后会生成一个CDN减速域名(相似xxx.com.w.cdngslb.com)
- 如果为公有Bucket,回源配置中须要开启
阿里云OSS公有Bucket回源
,访问控制-开启URL鉴权
,填写主备KEY
!
- 配置DNS解析
将自定义域名CNAME解析到方才配置后失去的CDN减速域名
- 对象拜访签名
/** * CND鉴权-A计划的签名 * * @param string $host eg. https://mall.xxx.com * @param string $path eg. resume/110/abc.jpg * @param string $args eg. ?x-oss-process=image%2Fauto-orient%2C1%2Fresize%2Cw_160 * @param string $key 鉴权的key * @param int $expireAt 过期工夫戳 * @return string */ function sign($host, $path, $args, $key, $expireAt) { $path = Str::startsWith($path, '/') ? $path : "/$path"; $path = implode('/', array_map('urlencode', explode('/', $path))); $rand = '0'; $uid = '0'; $str = sprintf('%s-%s-%s-%s-%s', $path, $expireAt, $rand, $uid, $key); $hash = md5($str); $authKey = sprintf('%s-%s-%s-%s', $expireAt, $rand, $uid, $hash); $symbol = $args ? '&' : '?'; return sprintf('%s%s%s%sauth_key=%s', $host, $path, $args, $symbol, $authKey); }
比照测试
本次测试以3种计划进行比照测试,测试的图片为948KB。
- 间接应用OSS传输减速域名计划:网络耗时不是很稳固,快的0.48s,慢的1s多
- 应用CDN鉴权+OSS传输减速域名回源计划:命中CDN缓存的网络耗时在0.15s左右,回源的网络耗时1-2s
1.命令缓存
2.OSS传输减速域名回源
- 应用CDN鉴权+OSS域名回源计划:命中CDN缓存和上述计划差不多,回源的网络耗时再4-7s
OSS域名回源
从下面的比照测试中,能够很显著的看出CDN缓存减速的网络传输品质会更好,相比于传输减速通过抉择优质链路从OSS源站取数据,CDN在最近边缘节点的缓存更快,更稳固。
从老本上来说,传输减速1.6元/G(还不包含OSS拜访的流量计费),而CDN减速的流量计费只须要0.x/G,显然CDN减速更节约老本。