关于oss:OSS对象存储的全球加速方案

59次阅读

共计 1504 个字符,预计需要花费 4 分钟才能阅读完成。

业务场景

OSS 对象存储作为一种海量、平安、低成本、高长久的云存储服务,深受宽广开发人员的青睐。然而在全球化的业务场景中,不论 OSS 抉择放于海内或者大陆地区,都会导致另外一部分用户上传和拜访品质不佳的问题。

本文旨在提供一种基于 OSS 对象存储的低成本的寰球减速计划。

网络架构图

方案设计

下载计划

  • 应用自定义域名配置 CDN 减速
  • DNS 解析:自定义域名 CNAME 解析到 CDN 减速域名
  • 对象拜访签名调整:改用 URL 鉴权的形式进行签名

上传计划

  • 间接应用 OSS 传输减速域名 {bucket}.oss-accelerate.aliyuncs.com

配置步骤

  • 配置 CDN 减速
  1. 减速域名配置 自定义域名 ,后续对象拜访应用此域名。源站信息抉择OSS 域名, 域名类型抉择 自定义 OSS 源站,域名配置为OSS 传输减速域名 {bucket}.oss-accelerate.aliyuncs.com

  1. 创立胜利后会生成一个 CDN 减速域名(相似 xxx.com.w.cdngslb.com)

  1. 如果为公有 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 减速更节约老本。

正文完
 0