使用 Aspera 高速傳輸
Aspera 高速傳送克服傳統 FTP 及 HTTP 傳輸的限制,改善大部分情況下的資料傳送效能,尤其是網路具有高延遲及封包流失的情況。
此特性目前在 Object Storage for Satellite中不受支援。 進一步瞭解。
Aspera 高速傳送會使用 FASP 通訊協定來上傳物件,而不是標準 HTTP PUT 作業。 使用 Aspera 高速傳送來上傳及下載,提供了下列好處:
- 較快速的傳送速度
- 在主控台中傳送超過 200 MB 的大型物件上傳,以及使用 SDK 或程式庫傳送 1 GB
- 上傳任何資料類型的整個資料夾,例如多媒體檔案、磁碟映像檔,以及任何其他結構化或非結構化資料
- 自訂傳送速度及預設喜好設定
- 可以獨立檢視、暫停、繼續或取消傳輸
Aspera 高速傳送可在 IBM Cloud 主控台 中使用,也可以使用 Aspera Transfer SDK以程式化方式使用。
Aspera 高速傳送僅適用於特定地區。 如需詳細資料,請參閱整合式服務。
如果目標儲存區具有 Immutable Object Storage 原則,則無法使用 Aspera 高速傳送。
使用主控台
如果在支援的地區中使用主控台來新增物件,則系統會提示您選擇安裝 Aspera Connect 用戶端。 此瀏覽器外掛程式提供 Aspera 高速傳送來上傳檔案或資料夾。
安裝 Aspera Connect
- 選取安裝 Aspera Connect 用戶端。
- 遵循作業系統及瀏覽器的安裝指示。
- 繼續檔案或資料夾上傳。
您也可以直接從 Aspera 網站安裝 Aspera Connect 外掛程式。 如需協助疑難排解 Aspera Connect 外掛程式問題,請參閱文件。
安裝外掛程式之後,您可以選擇將 Aspera 高速傳送設為使用相同瀏覽器之目標儲存區的所有上傳的預設值。 選取記住我的瀏覽器喜好設定。 儲存區配置頁面的傳送選項下也提供了選項。 這些選項容許您在「標準」與「高速」進行選擇,作為上傳及下載的預設傳輸。
一般而言,使用 IBM Cloud Object Storage Web 型主控台,不是使用 Object Storage 的最常見方式。 「標準傳送」選項會將物件大小限制為 200 MB,而且檔名及索引鍵將會相同。 Aspera 高速傳送支援較大的物件大小及改良的效能(視網路因素而定)。
Aspera 伺服器在可配置的 TCP 埠上執行一部 SSH 伺服器 (依預設為 33001)。 伺服器端上的防火牆必須容許此 TCP 埠連接 Aspera 伺服器。 沒有伺服器在 UDP 埠上接聽。 當 Aspera 用戶端起始傳送時,用戶端會在指定的 TCP 埠上開啟 SSH 伺服器的 SSH 階段作業,並協議資料將透過的 UDP 埠。 依預設,Aspera 用戶端和伺服器會配置成使用 UDP 埠 33001。 在階段作業起始步驟之後,用戶端和伺服器都會在協議的埠上傳送和接收 UDP 資料流量。 若要容許 UDP 階段作業啟動,Aspera 伺服器端上的防火牆必須容許埠 UDP 33001,才能呼叫到 Aspera 伺服器。 如需相關資訊,請參閱防火牆考量。
傳送狀態
**作用中:**起始傳送之後,傳送狀態即會顯示為作用中。 傳送為作用中時,您可以暫停、繼續或取消作用中傳送。
**已完成:**完成傳送時,此階段作業中這項傳送及所有傳送的相關資訊都會顯示在已完成標籤上。 您可以清除此資訊。 您只會看到現行階段作業中已完成傳送的相關資訊。
**喜好設定:**您可以將上傳及下載的預設值設為「高速」。
使用 Aspera 高速傳送的下載會產生輸出費用。 如需相關資訊,請參閱定價頁面。
**進階喜好設定:**您可以設定上傳及下載的頻寬。
使用 Aspera Transfer SDK
- 從 IBM API Hub 下載 Aspera Transfer SDK。 SDK 是二進位檔 (指令行公用程式及用來接聽傳送要求的常駐程式)、配置檔及語言特定連接器的集合。
- 從適當的套件管理程式 (pip、maven、gem 等) 安裝 grpc 相依關係。
- 啟動常駐程式,並將相關程式設計語言連接器檔案匯入至您的專案。
- 實例化 Aspera 用戶端,方法是將常駐程式所使用的本端埠傳遞給它。
- 建立
transfer_spec,其中包含傳送所需的所有資訊:icos資訊:- API 金鑰
- 服務實例 ID
- 目標端點
- 儲存區名稱
- 傳送方向
- 遠端主機 (您可以透過使用
?faspConnectionInfo查詢參數將 GET 要求傳送至儲存區來尋找此項目) - 要傳送的資產 (基本上是一組檔案路徑)
- 將傳送規格及配置資訊傳遞至傳送要求。
下列是使用 Python的範例:
import random
import string
import grpc
import json
import os.path
from urllib3.connectionpool import xrange
import transfer_pb2 as transfer_manager
import transfer_pb2_grpc as transfer_manager_grpc
def run():
# create a connection to the transfer manager daemon
client = transfer_manager_grpc.TransferServiceStub(
grpc.insecure_channel('localhost:55002'))
# create file
file_path = generate_source_file()
# create transfer spec
transfer_spec = {
"session_initiation": {
"icos": {
"api_key": os.environ.get('IBMCLOUD_API_KEY'),
"bucket": os.environ.get('IBMCLOUD_BUCKET'),
"ibm_service_instance_id": os.environ.get('IBMCLOUD_COS_INSTANCE'),
"ibm_service_endpoint": os.environ.get('IBMCLOUD_COS_ENDPOINT')
}
},
"direction": "send",
"remote_host": "https://ats-sl-dal.aspera.io:443",
"title": "strategic",
"assets": {
"destination_root": "/aspera/file",
"paths": [
{
"source": file_path
}
]
}
}
transfer_spec = json.dumps(transfer_spec)
# create a transfer request
transfer_request = transfer_manager.TransferRequest(
transferType=transfer_manager.FILE_REGULAR,
config=transfer_manager.TransferConfig(),
transferSpec=transfer_spec)
# send start transfer request to transfer manager daemon
transfer_response = client.StartTransfer(transfer_request)
transfer_id = transfer_response.transferId
print("transfer started with id {0}".format(transfer_id))
# monitor transfer status
for transfer_info in client.MonitorTransfers(
transfer_manager.RegistrationRequest(
filters=[transfer_manager.RegistrationFilter(
transferId=[transfer_id]
)])):
print("transfer info {0}".format(transfer_info))
# check transfer status in response, and exit if it's done
status = transfer_info.status
if status == transfer_manager.FAILED or status == transfer_manager.COMPLETED:
print("finished {0}".format(status))
break
def generate_source_file(name='file'):
with open(name, 'w') as file:
# file.write('Hello World!')
file.write(''.join(random.choice(string.ascii_lowercase) for i in xrange(10 ** 10)))
return os.path.abspath(name)
if __name__ == '__main__':
run()