業務場景
OSS物件儲存作為一種海量、安全、低成本、高持久的雲端儲存服務,深受廣大開發人員的喜愛。但是在全球化的業務場景中,不管OSS選擇放於海外或者大陸地區,都會導致另外一部分使用者上傳和訪問質量不佳的問題。
本文旨在提供一種基於OSS物件儲存的低成本的全球加速方案。
網路架構圖
方案設計
下載方案
上傳方案
- 直接使用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加速更節約成本。
本作品採用《CC 協議》,轉載必須註明作者和本文連結