すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS パフォーマンスのベストプラクティス

最終更新日:Jun 03, 2026

Alibaba Cloud Object Storage Service (OSS) の分散アーキテクチャを活用して、OSS のデータ処理速度を向上させ、レイテンシーを削減し、アプリケーションの応答を高速化します。

シーケンシャルプレフィックスからランダムプレフィックスへの変更

OSS は、オブジェクトキーの UTF-8 順序に基づいてデータをパーティション分割し、高同時実行リクエストをサポートします。シーケンシャルプレフィックス (タイムスタンプや辞書順にソートされた文字列) は、ファイルを少数のパーティションに集中させ、過負荷を引き起こします。代わりにランダムプレフィックスを使用して、負荷を均等に分散します。

リクエストレートが毎秒 2,000 リクエストを超えると、以下の問題が発生する可能性があります。ダウンロード、アップロード、削除、コピー、またはメタデータの取得はそれぞれ 1 回の操作としてカウントされます。N 個のファイルの一括削除または一覧表示は、N 回の操作としてカウントされます。

  • ホットスポットパーティションの形成:高頻度のリクエストが特定のパーティションに集中し、その I/O 容量を使い果たすか、自動的なスロットリングをトリガーします。

  • リクエストレートの制限:ホットスポットパーティションが継続的なデータリバランスをトリガーすることで、リクエスト処理時間が増加します。

    説明

    リバランスは、固定されたシャーディングルールではなく、リアルタイムのシステムステータスと処理能力の分析に基づいて行われます。シーケンシャルプレフィックスを持つファイルは、データリバランス後もホットスポットパーティションに残る可能性があります。

これらの問題を解決するには、シーケンシャルプレフィックスをランダムなものに変更します。これにより、オブジェクトのインデックスと I/O 負荷がパーティション間で均等に分散されます。

  • オブジェクトキーへの16進数ハッシュプレフィックスの追加

    日付と顧客 ID を使用してオブジェクトキーを生成する場合、キーにはシーケンシャルなタイムスタンププレフィックスが含まれます:

    sample-bucket-01/2024-07-19/customer-1/file1
    sample-bucket-01/2024-07-19/customer-2/file2
    sample-bucket-01/2024-07-19/customer-3/file3
    ...
    sample-bucket-01/2024-07-20/customer-2/file4
    sample-bucket-01/2024-07-20/customer-5/file5
    sample-bucket-01/2024-07-20/customer-7/file6
    ...

    顧客 ID のハッシュ (MD5 など) を計算し、数文字をオブジェクトキーのプレフィックスとして使用します。4 文字のハッシュプレフィックスを使用すると、キーは次のようになります:

    sample-bucket-01/9b11/2024-07-19/customer-1/file1
    sample-bucket-01/9fc2/2024-07-19/customer-2/file2
    sample-bucket-01/d1b3/2024-07-19/customer-3/file3
    ...
    sample-bucket-01/9fc2/2024-07-20/customer-2/file4
    sample-bucket-01/f1ed/2024-07-20/customer-5/file5
    sample-bucket-01/0ddc/2024-07-20/customer-7/file6
    ...

    4 文字の 16 進数ハッシュは 164 (65,536) 通りの組み合わせを提供し、最大 65,536 個のパーティションを可能にします。これが十分であるかどうかは、リクエストレートとパーティションあたり毎秒 2,000 操作の制限に基づいて判断してください。

    日付でオブジェクトを一覧表示する (たとえば、sample-bucket-01 内の 2024-07-19 のすべてのオブジェクト) には、ListObject API をバッチで呼び出してバケット内のすべてのオブジェクトを一覧表示し、目的の日付に一致する結果をマージします。

  • オブジェクトキーの反転

    ミリ秒精度の UNIX タイムスタンプをオブジェクトキーとして使用することも、シーケンシャルプレフィックスになります:

    sample-bucket-02/1513160001245.log
    sample-bucket-02/1513160001722.log
    sample-bucket-02/1513160001836.log
    sample-bucket-02/1513160001956.log
    ...
    sample-bucket-02/1513160002153.log
    sample-bucket-02/1513160002556.log
    sample-bucket-02/1513160002859.log
    ...

    シーケンシャルな順序を避けるためにタイムスタンプを反転します。反転した結果:

    sample-bucket-02/5421000613151.log
    sample-bucket-02/2271000613151.log
    sample-bucket-02/6381000613151.log
    sample-bucket-02/6591000613151.log
    ...
    sample-bucket-02/3512000613151.log
    sample-bucket-02/6552000613151.log
    sample-bucket-02/9582000613151.log
    ...

    最初の 3 桁はミリ秒 (1,000 通りの値) を表し、4 桁目は 1 秒ごとに、5 桁目は 10 秒ごとに変化します。反転によりプレフィックスのランダム性が大幅に向上し、負荷が均等に分散され、ボトルネックを回避できます。

バイト範囲フェッチの利用

OSS から大きなファイル (100 MB 超) をダウンロードする際に、ネットワークが不安定だと転送が中断されることがあります。HTTP Range リクエストを使用して、ファイルの特定の部分をフェッチしてください:

Get /ObjectName HTTP/1.1
Host:examplebucket.oss-cn-hangzhou.aliyuncs.com
Date:Fri, 19 Jul 2024 17:27:45 GMT
Authorization:SignatureValue
Range:bytes=[$ByteRange]

Range ヘッダーは、0 から content-length - 1 までのバイト範囲を指定します。詳細については、「HTTP Range リクエストを使用して OSS リソースをセグメント単位で取得する方法」をご参照ください。

OSS 転送アクセラレーションの利用

転送アクセラレーションは、ギガバイトまたはテラバイト規模のファイルや、中国本土と他のリージョン間のクロスリージョンリクエストにおける長距離データ転送を高速化します。スマートルーティングを通じてリクエストを最寄りのアクセスポイントにルーティングし、エンドツーエンドのアクセラレーションを提供します。詳細については、「転送アクセラレーションを使用した OSS へのアクセス」をご参照ください。

頻繁にアクセスされるコンテンツのキャッシュ

Alibaba Cloud CDN は、世界中のポイントオブプレゼンス (POP) で静的コンテンツをキャッシュします。ユーザーは最寄りの POP からコンテンツをフェッチするため、アクセス速度が向上し、オリジンの負荷が削減されます。

リクエストされたファイルが POP にないか期限切れの場合、CDN はオリジンの OSS バケットからそれをフェッチしてキャッシュします。オリジン上のコンテンツが変更された場合、CDN は設定されたキャッシュルール (有効期限など) に基づいて POP のキャッシュを更新します。

これは、グローバルなユーザーベースを持つビジネスに特に役立ちます。詳細については、「CDN を使用した OSS へのアクセスの高速化」をご参照ください。

最新バージョンの OSS SDK の使用

最新の Alibaba Cloud OSS SDK には、組み込みのパフォーマンス最適化が含まれています:

  • 新機能:最新の API、最適化されたアルゴリズム、より効率的なコーデックが含まれます。

  • エラー処理とリトライ:一般的なエラー (HTTP 503 など) を自動的に処理し、失敗を減らして成功率を高めます。

  • 転送管理:接続を自動的にスケーリングし、範囲リクエストを使用して高いスループットを実現します。

  • マルチスレッドサポート:複数のリクエストを並列処理して、データ処理速度を向上させます。

  • 最適化されたメモリ管理:不要なメモリオーバーヘッドを削減し、使用効率を向上させます。

  • 互換性の向上:レガシーな問題を修正し、サードパーティのライブラリやオペレーティングシステムとの互換性を向上させます。

最新の SDK は、「SDK の概要」からダウンロードしてください。

同一リージョン内での OSS と ECS の使用

Elastic Compute Service (ECS) インスタンスと OSS バケットを同じリージョンにデプロイすることで、データ転送のレイテンシーを削減し、読み取り速度を向上させます。同一リージョン内の通信は内部エンドポイントを使用し、トラフィック料金は発生しないため、帯域幅コストなしで大規模なデータ転送が可能です。詳細については、「内部ネットワーク経由での ECS インスタンスからの OSS リソースへのアクセス」をご参照ください。

レイテンシーに敏感なアプリケーションのためのタイムアウトとリトライの実装

OSS は、管理 API (GetServicePutBucketGetBucketLifecycle など) の QPS を制限します。リクエストレートが高い場合、HTTP 503 の低速応答がトリガーされることがあります。この場合、数秒待ってからリトライしてください。

単一の Alibaba Cloud アカウントの合計 QPS は 10,000 です。より高い上限をリクエストするには、テクニカルサポートにお問い合わせください。このしきい値を下回っていても、リクエストが単一のパーティションに集中し、その容量を超えると、サーバーがスロットリングを行い、503 エラーを返すことがあります。リクエストプレフィックスをランダム化した場合 (「OSS のパフォーマンスと拡張性のベストプラクティス」をご参照ください)、OSS は自動的にパーティションをスケーリングして、より高い QPS をサポートします。待機してリトライするだけで済みます。

大きなリクエスト (128 MB 超) の場合は、スループットを測定し、最も遅い 5% をリトライします。小さなリクエスト (512 KB 未満) で、一般的なレイテンシーが数十ミリ秒の場合は、2 秒後に GET または PUT 操作をリトライします。その後のリトライには、エクスポネンシャルバックオフを使用します (例:2 秒後、次に 4 秒後)。

固定サイズのリクエストで応答時間が一貫している場合は、最も遅い 1% を特定してリトライします。1 回のリトライで、多くの場合レイテンシーが効果的に削減されます。

水平スケーリングと並列リクエストによる高スループットの実現

OSS は大規模な分散システムです。並列リクエストを水平スケーリングして、複数のネットワークパスに負荷を分散してください。

複数のスレッドまたはインスタンスでデータを並列にアップロードおよびダウンロードしてください。最適なスケーリング戦略は、アプリケーションとオブジェクトの構造によって異なります。

まず単一のリクエストで帯域幅とリソース使用量を測定し、次に最大同時リクエスト数を決定してください。たとえば、1 つのリクエストが CPU の 10% を使用する場合、最大 10 の同時リクエストをサポートできます。

ストレージ接続の水平スケーリング

OSS を単一のエンドポイントではなく、分散システムとして扱ってください。異なる接続を介して複数の同時リクエストを送信し、利用可能な帯域幅を最大化してください。OSS はバケットへの接続数を制限しません。

リトライ回数の増加

リクエストが遅い場合は、リトライを送信してください。アプリケーションのフォールトトレランス要件に基づいて、OSS SDK でタイムアウトとリトライの値を設定してください。