V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hetiansu5
V2EX  ›  推广

OSS 对象存储的全球加速方案

  •  
  •   hetiansu5 · 2020-11-28 00:43:30 +08:00 · 2019 次点击
    这是一个创建于 1217 天前的主题,其中的信息可能已经有所发展或是发生改变。

    业务场景

    OSS 对象存储作为一种海量、安全、低成本、高持久的云存储服务,深受广大开发人员的喜爱。但是在全球化的业务场景中,不管 OSS 选择放于海外或者大陆地区,都会导致另外一部分用户上传和访问质量不佳的问题。

    本文旨在提供一种基于 OSS 对象存储的低成本的全球加速方案。

    网络架构图

    网络架构图

    方案设计

    下载方案

    • 使用自定义域名配置CDN 加速
    • DNS 解析:自定义域名 CNAME 解析到 CDN 加速域名
    • 对象访问签名调整:改用URL 鉴权的方式进行签名

    上传方案

    配置步骤

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

    2. 创建成功后会生成一个 CDN 加速域名(类似 xxx.com.w.cdngslb.comCDN 列表页

    3. 如果为私有 Bucket,回源配置中需要开启阿里云 OSS 私有 Bucket 回源,访问控制-开启URL 鉴权,填写主备 KEY! URL 鉴权

    • 配置 DNS 解析

    将自定义域名 CNAME 解析到刚才配置后得到的 CDN 加速域名 DNS 解析

    • 对象访问签名
    
        /**
         * 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.命令缓存 CDN 缓存命中网络传输耗时

    2.OSS 传输加速域名回源 CDN 传输加速回源网络传输耗时

    • 使用 CDN 鉴权+OSS 域名回源方案:命中 CDN 缓存和上述方案差不多,回源的网络耗时再 4-7s

    OSS 域名回源 CDN 普通回源网络传输耗时

    从上面的对比测试中,可以很明显的看出 CDN 缓存加速的网络传输质量会更好,相比于传输加速通过选择优质链路从 OSS 源站取数据,CDN 在最近边缘节点的缓存更快,更稳定。

    从成本上来说,传输加速 1.6 元 /G (还不包括 OSS 访问的流量计费),而 CDN 加速的流量计费只需要 0.x/G,显然 CDN 加速更节约成本。

    eluotao
        1
    eluotao  
       2020-11-28 01:06:39 +08:00 via iPhone
    大量文件 多种类型文件 还是要用 oss
    felixin
        2
    felixin  
       2020-11-28 01:59:54 +08:00 via Android
    意思是 oss 传输加速后再套 cdn ?
    Livid
        3
    Livid  
    MOD
       2020-11-28 02:01:04 +08:00
    这个主题已经被移动到 /go/promotions

    推广软文只能发布到这个节点。

    请阅读 V2EX 的节点使用规则 https://www.v2ex.com/help/node

    如果持续忽略规则,你的账号将会被禁用。
    xiadong1994
        4
    xiadong1994  
       2020-11-28 06:42:25 +08:00 via iPhone
    全球访问加速都做不好的 oss,建议换一家
    kerro1990
        5
    kerro1990  
       2020-11-28 09:17:53 +08:00
    S3 不香吗?
    hetiansu5
        6
    hetiansu5  
    OP
       2020-11-28 11:21:33 +08:00
    @kerro1990 S3 不还是对象存储吗,传输速度肯定比不上传统 CDN 的加速。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4165 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:27 · PVG 13:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.