このトピックでは、Object Storage Service (OSS) でのアップロードとダウンロードが遅い原因と解決策について説明します。
原因
オブジェクトのアップロードおよびダウンロード速度は、主にローカルの帯域幅とインターネットサービスプロバイダー (ISP) のネットワークパスによって制限されます。
ソリューション
SDK 以外
オブジェクトのアップロードまたはダウンロード方法の確認
OSS コンソール、ossfs、ossbrowser、ossftp などのツールでパフォーマンスが低下する場合は、大容量または多数のファイルの高スループットなアップロードに最適化された ossutil を使用してください。詳細については、「cp (ファイルのアップロード)」および「cp (オブジェクトのダウンロード)」をご参照ください。
ossutil を使用してもパフォーマンスが改善されない場合は、次のステップに進んでください。
帯域幅の使用量が制限を超えていないかの確認
ローカルネットワーク環境の確認。MTR を使用してバケットドメイン名をテストし、クライアントと OSS 間のリンクでのパケット損失を確認します。詳細については、「MTR ツールの使用」をご参照ください。
説明内部ネットワーク経由でファイルをアップロードする場合は、内部エンドポイントを使用してください。
ossutil の
probeコマンドを使用して、ネットワーク環境とアップロード速度をテストし、クライアントと OSS 間のネットワーク接続を診断します。詳細については、「probe」をご参照ください。データ転送にクライアントと OSS リージョン間で長距離の通信が含まれていないかの確認
たとえば、バケットが中国 (杭州) リージョンにあり、クライアントが中国 (香港) リージョンにある場合、高いネットワーク遅延がアップロードパフォーマンスを制限する可能性があります。この場合は、転送アクセラレーションを有効にしてください。
転送アクセラレーションは、グローバルなデータセンターのネットワークを利用します。ユーザートラフィックを最も近いアクセスポイントにインテリジェントにルーティングし、最適化されたネットワークとプロトコルを使用して、インターネットベースのアップロードとダウンロードを高速化します。詳細については、「転送アクセラレーションを使用した OSS へのアクセス」をご参照ください。
説明転送アクセラレーションを有効にすると、変更は 30 分以内にグローバルで有効になります。有効な転送アクセラレーションエンドポイントを使用してください。
グローバルアクセラレーションエンドポイント:
oss-accelerate.aliyuncs.com。転送アクセラレーションのアクセスポイントはグローバルに分散しています。このエンドポイントを使用して、任意のリージョンのバケットへのデータ転送を高速化できます。中国本土以外のアクセラレーションエンドポイント:
oss-accelerate-overseas.aliyuncs.com。アクセラレーションエンドポイントは中国本土以外のリージョンに分散しています。このエンドポイントは、ICP (Internet Content Provider) 登録のないドメイン名を、CNAME レコードを使用して中国 (香港) リージョンまたは中国本土以外の他のリージョンのバケットにマッピングする場合にのみ使用されます。
SDK
以下では、OSS SDK for Python を使用してオブジェクトをアップロードする際の速度が遅い場合のトラブルシューティング方法の例を示します。
オブジェクトのアップロード方法の確認。100 MB を超えるオブジェクトをアップロードする場合は、再開可能アップロードを使用します。詳細については、「マルチパートアップロード」をご参照ください。再開可能アップロードを使用する場合、以下のパラメーターの構成を確認してください。
multipart_threshold: オブジェクトサイズがこのパラメーターの値より大きい場合、マルチパートアップロードが使用されます。単位:バイト。
part_size: パートのサイズ。単位:バイト。オブジェクトサイズに基づいてパートサイズを指定する必要があります。たとえば、オブジェクトが 1 GB を超える場合は、part_size パラメーターを 100 MB に設定することを推奨します。
説明ネットワーク接続が安定している場合は各パートのサイズを大きくし、不安定な場合は小さくします。
num_threads: 同時アップロードのスレッド数。ほとんどの場合、num_threads パラメーターは 4 に設定されます。
推奨構成:
multipart_threshold=100*1024*1024, part_size=100*1024*1024, num_threads=4CRC-64 が有効になっているかの確認
CRC-64 が有効になっている場合は、OSSClient インスタンスを初期化する際に CRC-64 を無効にしてください。リクエストに Content-MD5 リクエストヘッダーを追加することで、CRC-64 を MD5 に置き換えることができます。OSS SDK for Python の初期化方法の詳細については、「初期化」をご参照ください。
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = 'yourEndpoint' # バケット名を指定します。例: examplebucket。 # enable_crc=False は CRC-64 が無効であることを指定します。 bucket = oss2.Bucket(auth, endpoint, 'examplebucket',enable_crc=False)説明CRC-64 はデータの検証にのみ使用され、データのセキュリティを保証するものではありません。