如果您希望實現Bucket遠距離數據傳輸加速,例如從中國內地向非中國內地Bucket請求加速上傳或下載文件,您可以開啟傳輸加速。傳輸加速利用全球分布的云機房,將全球各地用戶對Bucket的訪問,經過智能路由解析至就近的接入點,使用優化后的網絡及協議,為云存儲的上傳、下載提供端到端的加速方案。
前提條件
當前賬號已完成實名認證。具體步驟,請參見未實名認證賬戶認證引導。
使用場景
遠距離數據傳輸加速
例如全球性的論壇、Top在線協同辦公平臺等,部分客戶會因傳輸距離較遠導致上傳和下載體驗非常差。傳輸加速功能可以讓全球各地的客戶使用優化后的網絡來傳輸數據,極大地提升上傳和下載速度,讓不同地域的用戶都能有很好的訪問體驗。
GB、TB級大文件上傳和下載
通過互聯網遠距離上傳和下載大文件時,經常會因為網絡延遲過大而導致傳輸失敗。傳輸加速功能使用優化的互聯網傳輸鏈路、調優的協議棧與傳輸算法,可大幅減少遠距離互聯網傳輸超時的比例。您還可以結合使用傳輸加速功能與分片上傳、斷點續傳下載,形成遠距離大文件上傳和下載的解決方案。
非靜態、非熱點數據下載加速
例如相冊應用、游戲、電商、社交應用的評論內容、企業門戶網站、金融類APP等,用戶的下載體驗直接影響產品競爭力和客戶留存率。傳輸加速功能作為專為OSS上傳、下載加速而設計的功能,可以最大限度利用客戶端的網絡能力,提升用戶的下載體驗。
注意事項
華東1(杭州)、華東2(上海)、華東5(南京-本地地域)、華東6(福州-本地地域)、華北1(青島)、華北2(北京)、華北 3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國香港、美國(硅谷)、美國(弗吉尼亞)、日本(東京)、韓國(首爾)、新加坡、澳大利亞(悉尼)關停中、馬來西亞(吉隆坡)、印度尼西亞(雅加達)、菲律賓(馬尼拉)、泰國(曼谷)、德國(法蘭克福)、英國(倫敦)、阿聯酋(迪拜)地域支持開啟傳輸加速。
通過傳輸加速Endpoint上傳數據時,會產生加速上傳流量。通過傳輸加速Endpoint下載數據時,會產生加速下載流量,同時會與OSS外網流出流量同時計算。例如,通過傳輸加速Endpoint從開啟傳輸加速功能的存儲空間中下載了1 GB的數據,則會產生1 GB傳輸加速費用和1 GB外網流出流量費用。更多信息,請參見傳輸加速費用和流量費用。
開啟傳輸加速功能后,必須使用OSS的傳輸加速域名才會提升訪問速度。此外,OSS提供的默認Endpoint仍可正常使用。在不需要傳輸加速的場景中,您可以使用默認Endpoint以減少傳輸加速的費用。關于默認Endpoint,請參見訪問域名和數據中心。
傳輸加速Endpoint僅支持HTTP/HTTPS協議的API接入,不支持RTMP協議等非HTTP/HTTPS協議的API接入。
為保證數據傳輸安全,傳輸加速后端加速邏輯會視情況選擇使用HTTPS協議進行數據傳輸。所以,客戶端使用HTTP協議通過傳輸加速域名訪問OSS時,在OSS的訪問日志中查看到訪問協議可能是HTTPS。
開啟傳輸加速
開啟傳輸加速后,Bucket會在保留默認Endpoint的基礎上,新增以下兩種傳輸加速Endpoint。
全球加速Endpoint:地址為
oss-accelerate.aliyuncs.com
。傳輸加速接入點分布在全球各地,全球各地的Bucket均可以使用該域名進行傳輸加速。非中國內地加速Endpoint:地址為
oss-accelerate-overseas.aliyuncs.com
。傳輸加速接入點分布在除中國內地以外的各地域,僅在中國香港及海外各地域Bucket綁定未備案的域名做CNAME指向時使用。
您可以通過以下多種方式開啟傳輸加速。
使用OSS控制臺
登錄OSS管理控制臺。
單擊Bucket 列表,然后單擊目標Bucket名稱。
在左側導航欄,選擇Bucket 配置>傳輸加速。
在傳輸加速頁面,打開開啟傳輸加速開關,然后在彈出的對話框單擊確定。
傳輸加速開啟操作會在30分鐘內全網生效。關閉傳輸加速操作也需要在30分鐘內全網生效。
使用阿里云SDK
以下僅列舉常見SDK開啟傳輸加速的代碼示例。關于其他SDK的開啟傳輸加速的代碼示例,請參見SDK簡介。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填寫Bucket名稱,例如examplebucket。
String bucketName = "examplebucket";
// 創建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 設置Bucket的傳輸加速狀態。
// 當設置enabled為true時,表示開啟傳輸加速;當設置enabled為false時,表示關閉傳輸加速。
boolean enabled = true;
ossClient.setBucketTransferAcceleration(bucketName, enabled);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# 填寫Bucket名稱。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 設置Bucket的傳輸加速狀態。
# 當設置enabled為true時,表示開啟傳輸加速;當設置enabled為false時,表示關閉傳輸加速。
enabled = 'true'
bucket.put_bucket_transfer_acceleration(enabled)
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
endpoint := "yourEndpoint" // 替換為實際的Endpoint
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
log.Fatalf("Error: %v", err)
}
// 填寫Bucket名稱。
bucketName := "examplebucket"
// 開啟Bucket的傳輸加速狀態。
// Enabled表示傳輸加速的開關,取值為true表示開啟傳輸加速,取值為false表示關閉傳輸加速。
accConfig := oss.TransferAccConfiguration{
Enabled: true,
}
err = client.SetBucketTransferAcc(bucketName, accConfig)
if err != nil {
log.Fatalf("Error: %v", err)
}
// 輸出成功信息
log.Println("Set bucket transfer accelerate success")
}
使用REST API
如果您的程序自定義要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多信息,請參見PutBucketTransferAcceleration。
使用傳輸加速
使用瀏覽器
通過瀏覽器訪問OSS時,將文件URL的Endpoint字段替換為傳輸加速Endpoint,例如https://test.oss-cn-shenzhen.aliyuncs.com/myphoto.jpg
需改為https://test.oss-accelerate.aliyuncs.com/myphoto.jpg
。如果文件訪問權限為私有,則還需要加上簽名信息。
使用命令行工具ossutil
替換配置文件的Endpoint為傳輸加速Endpoint
通過ossutil訪問時,您可以將配置文件內的Endpoint替換為傳輸加速Endpoint。具體操作,請參見ossutil。
在命令示例中增加
-e oss-accelerate.aliyuncs.com
在使用ossutil相關命令時,在命令示例中增加
-e oss-accelerate.aliyuncs.com
。下圖表示在cp命令上傳場景中使用了傳輸加速Endpoint。
使用圖形化管理工具ossbrowser
通過ossbrowser訪問OSS時,除了要填寫AccessKey(AK)信息以外,還必須指定預設OSS路徑。
各配置項說明如下:
參數 | 說明 |
Endpoint | 選擇自定義,并填寫傳輸加速Endpoint |
AccessKeyId、AccessKeySecret | 填寫賬號的AccessKey(AK)信息。獲取AccessKey的方式,請參見創建AccessKey。 重要 為保證數據安全,推薦您使用RAM用戶的AccessKey登錄ossbrowser。使用RAM用戶登錄之前,需要為RAM用戶授予 |
預設OSS路徑 | 指定訪問某個Bucket或Bucket某個路徑下資源的訪問權限。預設OSS路徑格式為 |
配置示例如下:
使用阿里云SDK
通過各語言SDK訪問OSS時,將Endpoint設置為傳輸加速Endpoint。此處以Java SDK的簡單上傳和簡單下載為例介紹。
簡單上傳
import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.PutObjectRequest; import java.io.File; public class Demo { public static void main(String[] args) throws Exception { // 填寫傳輸加速Endpoint。以全球加速Endpoint為例。 String endpoint = "https://oss-accelerate.aliyuncs.com"; // 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // 填寫Bucket名稱,例如examplebucket。 String bucketName = "examplebucket"; // 填寫Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。 String objectName = "exampledir/exampleobject.txt"; // 填寫本地文件的完整路徑,例如D:\\localpath\\examplefile.txt。 // 如果未指定本地路徑,則默認從示例程序所屬項目對應本地路徑中上傳文件。 String filePath= "D:\\localpath\\examplefile.txt"; // 創建OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // 創建PutObjectRequest對象。 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, filePath); // 如果需要上傳時設置存儲類型和訪問權限,請參考以下示例代碼。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上傳文件。 ossClient.putObject(putObjectRequest); } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message:" + oe.getErrorMessage()); System.out.println("Error Code:" + oe.getErrorCode()); System.out.println("Request ID:" + oe.getRequestId()); System.out.println("Host ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + "such as not being able to access the network."); System.out.println("Error Message:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
簡單下載
import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.GetObjectRequest; import java.io.File; public class Demo { public static void main(String[] args) throws Exception { // 填寫傳輸加速Endpoint。以全球加速Endpoint為例。 String endpoint = "https://oss-accelerate.aliyuncs.com"; // 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // 填寫Bucket名稱,例如examplebucket。 String bucketName = "examplebucket"; // 填寫不包含Bucket名稱在內的Object完整路徑,例如testfolder/exampleobject.txt。 String objectName = "testfolder/exampleobject.txt"; String filePath = "D:\\localpath\\examplefile.txt"; // 創建OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // 下載Object到本地文件,并保存到指定的本地路徑中。如果指定的本地文件存在會覆蓋,不存在則新建。 // 如果未指定本地路徑,則下載后的文件默認保存到示例程序所屬項目對應本地路徑中。 ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(filePath)); } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message:" + oe.getErrorMessage()); System.out.println("Error Code:" + oe.getErrorCode()); System.out.println("Request ID:" + oe.getRequestId()); System.out.println("Host ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + "such as not being able to access the network."); System.out.println("Error Message:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
測試傳輸加速效果
使用命令行工具ossutil
通過在ossutil命令示例中測試未開啟傳輸加速前(即使用-e oss-us-west-1.aliyuncs.com
)以及開啟傳輸加速后(即使用-e oss-accelerate.aliyuncs.com
)上傳文件所需時間的差異。
使用在線工具
您可以通過OSS互聯網連通與測速工具測試您本地訪問全球各地數據中心時,開啟傳輸加速與未開啟傳輸加速的訪問速度。
常見問題
除傳輸加速外,OSS是否提供其他加速方案?
除傳輸加速外,您還可以選擇CDN加速實現加速訪問OSS資源。更多信息,請參見CDN加速訪問。
是否支持同時配置多種加速方案?
支持。例如您已開啟CDN加速,并希望同時使用傳輸加速。您只需要開啟傳輸加速,并將CDN回源到傳輸加速域名即可。更多信息,請參見綁定CDN加速域名。
為什么使用傳輸加速Endpoint無法列舉Bucket?
傳輸加速服務僅針對攜帶Bucket名稱信息的三級域名(格式為https://BucketName.oss-accelerate.aliyuncs.com
)提供解析服務。而列舉Bucket的請求域名中不攜帶Bucket名稱信息,因此您無法使用傳輸加速Endpoint列舉Bucket。建議您通過默認Endpoint列舉目標地域的Bucket,例如https://oss-cn-hangzhou.aliyuncs.com
。