このトピックでは、OSS で使用されるいくつかの基本的な用語について説明します。

バケット

OSS オブジェクトのコンテナー。 すべての OSS のオブジェクトは、バケットに保存されます。 リージョン、ACL、ストレージクラスなど、バケットのさまざまな属性を設定することができます。 要件に基づいて、異なるストレージクラスのバケットを作成してデータを保存することができます。

  • OSS には、ファイルシステムのようなディレクトリとサブフォルダの階層構造がありません。 すべてのオブジェクト (ファイル) は、バケットに直接関連付けられています。
  • 複数のバケットを作成することができます。
  • バケット名は OSS 内でグローバルに一意である必要があります。 バケットの作成後にバケット名を変更することはできません。
  • バケットには、無制限の数のオブジェクトを保存できます。

バケットの命名規則:

  • 名前には、小文字、数字、ハイフン (-) のみを使用できます。
  • 名前の最初と最後は、小文字または数字にする必要があります。
  • 名前の長さは 3 ~ 63 バイトにする必要があります。

オブジェクト

OSS でのデータ操作の基本単位。 オブジェクトはファイルとも呼ばれます。 OSS ではオブジェクトに階層構造ではなく、フラットな構造を採用しています。 すべての要素は、オブジェクトとしてバケットに保存されます。 オブジェクトは、オブジェクトのメタデータ、ユーザーデータ、キーで構成されます。 キーは、バケット内のオブジェクトを識別するために使用されます。 オブジェクトのメタデータは、最終更新時刻やオブジェクトサイズなどのオブジェクトのプロパティを定義するキーと値のペアのグループです。 また、ユーザーのメタデータをオブジェクトに割り当てることもできます。

オブジェクトのライフサイクルは、オブジェクトのアップロードで始まり、削除で終わります。 ライフサイクルの間、コンテンツは追加アップロードを使用して作成されたオブジェクトにのみ追加することができます。 オブジェクトを変更する場合は、既存のオブジェクトと同じ名前の新しいオブジェクトをアップロードして置き換える必要があります。

オブジェクトの命名規則:

  • 名前には UTF-8 文字のみを使用できます。
  • 名前の長さは 1 から 1,023 バイトにする必要があります。
  • 名前を、スラッシュ (/) またはバックスラッシュ (\) で始めることはできません。
    オブジェクト名では、大文字と小文字が区別されます。 特に明記しない限り、OSS ドキュメントに記載されているオブジェクトとファイルは、オブジェクトと呼ばれます。

ObjectKey

ObjectKey、Key、ObjectName は異なる SDK でも同じです。 これらはすべてオブジェクト名であり、オブジェクトに対して関連した操作を実行するときに指定する必要があります。 たとえば、オブジェクトをバケットにアップロードする場合、ObjectKey はオブジェクトの拡張子を含む完全なパスを示します。 たとえば、ObjectKey を abc/efg/123.jpg に設定できます。

リージョン

OSS データセンターの物理的な場所。 バケットを作成するときに、コストとリクエストソースに基づいてリージョンを選択することができます。 ほとんどの場合、ユーザーは、遠いリージョンよりも、近いリージョンの OSS データセンターの方が高速にアクセスできます。 詳細は、「リージョンとエンドポイント」をご参照ください。

バケットの作成時にリージョンを指定します。 バケットの作成後は、リージョンの変更はできません。 バケット内のすべてのオブジェクトは、対応するデータセンターに保存されます。 リージョンは、オブジェクトレベルではなくバケットレベルで設定します。

エンドポイント

OSS にアクセスするためのドメイン名。 OSS は、HTTP RESTful API を利用してサービスを提供します。 アクセスするリージョンによって使用するエンドポイントは異なります。 リージョンには、内部ネットワークを介したアクセスとインターネットを介したアクセスのそれぞれに異なるエンドポイントがあります。 たとえば、中国 (杭州) リージョンの OSS データにアクセスするために使用されるパブリックエンドポイントは oss-cn-hangzhou.aliyuncs.com であり、内部エンドポイントは oss-cn-hangzhou-internal.aliyuncs.com です。 詳細は、「リージョンとエンドポイント」をご参照ください。

AccessKey ペア

リクエスタを識別するために使用するアクセス資格情報。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 OSS は、AccessKey ID と AccessKey Secret を含む AccessKey ペアを使用して、対称暗号化を実装し、リクエスタの ID を確認します。 AccessKey ID は、ユーザーの識別に使用されます。 AccessKey Secret は、署名文字列の暗号化と認証に使用されます。 AccessKey Secret は、機密情報として扱う必要があります。 OSS は、以下の方法で取得した AccessKey ペアをサポートしています。

  • バケットオーナーが AccessKey ペアを申請します。
  • バケットのオーナーは RAM を使用して AccessKey ペアをサードパーティに割り当てます。
  • バケットオーナーはセキュリティトークンサービス (STS) を使用して、AccessKey ペアをサードパーティに割り当てます。

AccessKey ペアの詳細については、「AccessKey ペアの作成」をご参照ください。

強力な整合性

OSS のオブジェクト操作がアトミックであることが要求される機能では、操作に中間状態はありえず、操作の結果は成功または失敗のみです。 ユーザーが完全なデータのみにアクセスできるようにするために、OSS は破損したデータや部分的なデータを返しません。

OSS でのオブジェクト操作には、高い一貫性があります。 たとえば、ユーザーがアップロード (PUT) 成功の応答を受信すると、アップロードされたオブジェクトをすぐに読み取ることができ、オブジェクトのコピーは冗長性のために複数のデバイスに書き込まれます。 そのため、書き込み直後に読み取り操作を実行した場合に、データの取得ができないことはありません。 削除の操作についても同じことが言えます。 オブジェクトを削除すると、そのオブジェクトとコピーは完全に削除されます。

データ冗長メカニズム

イレイジャーコーディングと複数のレプリカに基づくデータ冗長性メカニズム。 各オブジェクトのコピーは、同一のリージョンの異なる施設にある複数のデバイスに保存されています。 このように、ハードウェアに障害が発生しても、データの耐久性と可用性は確保されています。
  • OSS でオブジェクトに対して実行される操作は、非常に安定しています。 たとえば、ユーザーがアップロード成功の応答を受信すると、アップロードされたオブジェクトをすぐに読み取ることができ、オブジェクトのコピーは冗長性のために複数のデバイスに書き込まれます。
  • OSS は、完全なデータ伝送を保証するために、クライアントとサーバー間でパケットが伝送されるときに、ネットワークトラフィックのパケットのチェックサムを計算してエラーをチェックしています。
  • OSS のデータ冗長化メカニズムは、2 台のストレージが同時に破損した場合のデータ損失を防ぐことができます。
    • データが OSS に保存された後、OSS は定期的にデータのコピーが失われていないかどうかをチェックします。 失われている場合、OSS はデータの耐久性と可用性を確保するためにコピーを回復します。
    • OSS は定期的にデータの整合性を検証し、ハードウェア障害などのエラーによるデータの破損を検出します。 データが部分的に破損したり失われた場合、OSS は他のコピーを使用して破損したデータの再構築と修復を行います。

OSS とファイルシステムの比較

項目 OSS ファイルシステム
データモデル OSS は、データをキーと値をペアとして保存する分散オブジェクトストレージサービスです。 ファイルシステムは、ディレクトリのインデックス作成に典型的なツリー構造を使用しています。
データ取得 オブジェクトは、一意のオブジェクト名 (キー) に基づいて取得されます。

たとえば、オブジェクト名 test1/test.jpg は、オブジェクトが test1 という名前のディレクトリに保存されていることを意味しません。 OSS では、test1/test.jpg は単なる文字列です。基本的に test1/test.jpg は a.jpg と同じです。 そのため、アクセスするオブジェクトに関係なく、同じ量のリソースが消費されます。

test1/test.jpg という名前のファイルにアクセスするには、まず test1 ディレクトリにアクセスして、このディレクトリ内の test.jpg ファイルを検索する必要があります。
メリット OSS は複数のユーザーからの突発的なバーストアクセスに対応しています。 ファイルシステムは、指定されたオフセット位置での内容の変更やファイルの末尾の切り捨てなど、ファイルの変更に対応しています。 また、名前の変更や削除、フォルダの移動などのフォルダ操作にも対応しています。
デメリット OSS に保存されているオブジェクトは変更できません。 オブジェクトを追加するには特定の操作を実行する必要があり、生成されるオブジェクトは他のメソッドを使用してアップロードされるオブジェクトとは異なります。 1 バイトでも変更するには、オブジェクト全体を再度アップロードする必要があります。

OSS でファイルシステムに似たような機能を疑似的に実施することができますが、そのような操作にはコストがかかります。 たとえば、test1 ディレクトリの名前を test2 に変更したい場合、OSS は test1/ で始まる名前のオブジェクトをすべてコピーして、test2 で始まる名前のオブジェクトを生成する必要があります。 この操作では、大量のリソースを使います。 したがって、OSS ではこのような操作を行わないよう推奨します。

ファイルシステムの性能は、単一のデバイス性能に左右されます。 ファイルシステム内のファイルやディレクトリが増えると、それに従いリソースが消費され、処理時間が長くなります。

非効率であるため、OSS オブジェクトの操作をファイルシステムにマッピングしないよう推奨いたします。 OSS をファイルシステムとしてアタッチする場合は、ファイルの追加、ファイルの削除、ファイルの読み取りのみを行うよう推奨いたします。 画像、ビデオ、ドキュメントなどの非構造化データを大量に処理および保存する機能など、OSS の利点を最大限に活用できます。

次の表では、OSS とファイルシステムのいくつかの用語の違いを示しています。

OSS ファイルシステム
オブジェクト ファイル
バケット ホームディレクトリ
リージョン 対応外
エンドポイント 対応外
AccessKey 対応外
対応外 マルチレベルディレクトリ
GetService ホームディレクトリリストの取得
GetBucket ファイルリストの取得
PutObject ファイルの追加
AppendObject 既存のファイルへのデータの追加
GetObject ファイルの読み取り
DeleteObject ファイルの削除
対応外 ファイル内容の変更
CopyObject (ソースとコピー先のバケットが同一) ファイル属性の変更
CopyObject ファイルのコピー
対応外 ファイル名の変更