OSS對象存儲的全球加速方案

業務場景

OSS對象存儲做爲一種海量、安全、低成本、高持久的雲存儲服務,深受廣大開發人員的喜好。可是在全球化的業務場景中,無論OSS選擇放於海外或者大陸地區,都會致使另一部分用戶上傳和訪問質量不佳的問題。php

本文旨在提供一種基於OSS對象存儲的低成本的全球加速方案。html

網絡架構圖

網絡架構圖

方案設計

下載方案

  • 使用自定義域名配置CDN加速
  • DNS解析:自定義域名CNAME解析到CDN加速域名
  • 對象訪問簽名調整:改用URL鑑權的方式進行簽名

上傳方案

配置步驟

  • 配置CDN加速
  1. 加速域名配置自定義域名,後續對象訪問使用此域名。源站信息選擇OSS域名, 域名類型選擇自定義OSS源站,域名配置爲OSS傳輸加速域名 {bucket}.oss-accelerate.aliyuncs.com

配置CDN加速

  1. 建立成功後會生成一個CDN加速域名(相似xxx.com.w.cdngslb.com)

CDN列表頁

  1. 若是爲私有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普通回源網絡傳輸耗時dom

從上面的對比測試中,能夠很明顯的看出CDN緩存加速的網絡傳輸質量會更好,相比於傳輸加速經過選擇優質鏈路從OSS源站取數據,CDN在最近邊緣節點的緩存更快,更穩定。測試

從成本上來講,傳輸加速1.6元/G(還不包括OSS訪問的流量計費),而CDN加速的流量計費只須要0.x/G,顯然CDN加速更節約成本。ui

相關文章
相關標籤/搜索