OSS を使用する前に、次の基本概念を理解することを推奨します。
バケット
バケットは、OSS に保存されているオブジェクトのコンテナーです。 すべてのオブジェクトは、バケットに保存されます。 OSS のデータモデル構造は、階層型モデルではなくフラットモデルです。
- すべてのオブジェクト (ファイル) は、対応するバケットに直接関連付けられています。 したがって、OSS には、ファイルシステムのようなディレクトリとサブフォルダーの階層構造がありません。
- ユーザーは複数のバケットを所有できます。
- バケット名は OSS 全体で一意でなければなりません。また、バケットの作成後にバケット名を変更することはできません。
- バケットには、無制限の数のオブジェクトを保存できます。
バケットの命名規則は次のとおりです。
- バケット名は、小文字、数字、ハイフン (-) のみを使用できます。
- バケット名の先頭と末尾は、小文字または数字にする必要があります。
- バケット名は 3 バイト以上 63 バイト以下にする必要があります。
オブジェクト
オブジェクトはファイルとも呼ばれ、 OSS に保存される基本的なエンティティです。 オブジェクトは、メタデータ、データ、キーで構成されます。 キーは、バケット内の一意のオブジェクト名です。 メタデータによって、最終変更時刻やオブジェクトサイズなど、オブジェクトの属性が定義されます。 オブジェクトのカスタムメタデータを指定することもできます。
オブジェクトのライフサイクルは、アップロードで始まり、削除で終わります。 ライフサイクルの間、オブジェクトの内容を変更することはできません。 オブジェクトを変更する場合は、既存のオブジェクトと同じ名前の新しいオブジェクトをアップロードして置き換える必要があります。 したがって、ファイルシステムとは異なり、OSS ではユーザーがオブジェクトを直接変更することはできません。
OSS には、追加アップロード機能があります。これにより、オブジェクトの最後にデータを続けて追加できます。
オブジェクトの命名規則は次のとおりです。
- オブジェクト名には UTF-8 エンコードを使用する必要があります。
- オブジェクト名は 1 バイト以上 1023 バイト以下にする必要があります。
- オブジェクト名の先頭にバックスラッシュ (\) とフォワードスラッシュ (/) は使用できません。
注 オブジェクト名は、大文字と小文字が区別されます。 特に明記しない限り、OSS ドキュメントに記載されているオブジェクトとファイルは、まとめてオブジェクトと呼ばれます。
リージョン
リージョンは、 OSS データセンターの物理的な場所を表します。 作成したバケットを保存する OSS のリージョンを選択できます。 レイテンシとコストを最小限に抑えることが可能なリージョン、あるいは特定の規制要件を満たすリージョンを選択します。 一般的に、ユーザーに近いリージョンほど、アクセス速度は速くなります。 詳細は、「OSS リージョンとエンドポイント」をご参照ください。
リージョンは、オブジェクトレベルではなくバケットレベルで設定します。 したがって、バケットに含まれるすべてのオブジェクトは同じリージョンに保存されます。 バケットの作成時にリージョンを指定します。バケット作成後にリージョンを変更することはできません。
エンドポイント
エンドポイントは、 OSS へのアクセスに使用されるドメイン名です。 OSS は HTTP RESTful API を介して外部サービスを提供します。 リージョンごとに異なるエンドポイントを使用します。 同じリージョンでも、イントラネットを経由するアクセスかインターネットを経由するアクセスかによって、使用するエンドポイントは異なります。 たとえば、杭州リージョンの場合、インターネットエンドポイントは oss-cn-hangzhou.aliyuncs.com、イントラネットエンドポイントは oss-cn-hangzhou-internal.aliyuncs.com です。 詳細は、「OSS リージョンとエンドポイント」をご参照ください。
AccessKey
AccessKey は、AccessKeyID と AccessKeySecret で構成されます。 この 2 つが 1 組で、アクセス ID が検証されます。 OSS では、 AccessKeyId と AccessKeySecret の対称暗号方式を使用して、リクエスト送信者の ID を検証します。 AccessKeyID は、ユーザーを識別するために使用されます。 AccessKeySecret は、ユーザーが署名を暗号化するため、およびその署名を OSS で検証するために使用されます。 AccessKeySecret の機密性を保つ必要があります。 OSS では、AccessKey は次の 3 つの方法で生成されます。
- バケット所有者が AccessKey を申請します。
- バケットの所有者が、 RAM を使用して第三者による AccessKey の申請を許可します。
- バケット所有者が、STS を使用して第三者による AccessKey の申請を許可します。
AccessKey の詳細は、「アクセス制御」をご参照ください。
強力な一貫性
OSS では、オブジェクト操作はアトミックです。つまり中間状態がなく、操作は成功か失敗のどちらかです。 破損したデータや部分的なデータを書き込むことはありません。
OSS でのオブジェクト操作は、非常に一貫性があります。 たとえば、ユーザーが アップロード (PUT) 成功のレスポンスを受信すると、そのオブジェクトはすぐに読み取り可能になり、オブジェクトのデータは既に冗長化して書き込まれています。 したがって、書き込み後の読み取りに対して、強力な一貫性が提供されます。 削除操作についても同じことが言えます。 オブジェクトを削除すると、そのオブジェクトは直ちに削除されます。
データ冗長メカニズム
- OSS でのオブジェクト操作は、非常に一貫性があります。 たとえば、ユーザーがアップロードまたはコピー成功のレスポンスを受信すると、そのオブジェクトはすぐに読み取り可能になり、冗長データは既に複数のデバイスに書き込まれています。
- 完全なデータ送信を保証するため、OSS はネットワークトラフィックパケットのチェックサムを計算することにより、クライアントとサーバー間でパケットが送信されるときにエラーが発生するかどうかをチェックします。
- OSS の冗長ストレージメカニズムは、2 つのストレージ施設が同時に損傷した場合でもデータの損失を回避できます。
- データが OSS に保存された後、OSS は冗長データが失われているかどうかチェックします。 冗長データが失われた場合、OSS は失われた冗長データを復旧し、データの信頼性と可用性を確保します。
- OSS は、検証を通じて定期的にデータの整合性をチェックし、ハードウェア障害などの要因で引き起こされたデータ損傷を発見します。 データが部分的に破損または失われた場合、OSS は冗長データを使用して破損したデータを再作成し、修復します。
OSS とファイルシステムの比較
比較項目 | OSS | ファイルシステム |
---|---|---|
データモデル | OSS は、キーと値のペア形式を使用した分散オブジェクトストレージサービスです。 | ファイルシステムは、ファイルが保存されたディレクトリの階層ツリー構造です。 |
データ取得 | オブジェクトは、一意のオブジェクト名 (キー) に基づいて取得されます。
test1/test.jpg などの名前を使用できますが、これはオブジェクト test.jpg が、test1 という名前のディレクトリに保存されていることを示す訳ではありません。 OSS の場合、test1/test.jpg と a.jpg との間に本質的な違いはありません。 名前の異なるオブジェクトにアクセスする場合でも、同じ量のリソースが消費されます。 |
ファイルはディレクトリ内の位置に基づいて取得されます。 |
利点 | 大規模な同時アクセスをサポートしています。つまり、過剰なリソースを使用せずに、大量の非構造化データ (画像、ビデオ、ドキュメントなど) の保存と取得が可能です。 | データのコピーや置き換えが不要なため、ディレクトリの名前変更、移動、削除などのフォルダー操作は非常に簡単です。 |
注意点 | 保存されているオブジェクトを直接変更することはできません。
オブジェクトを変更する場合は、既存のオブジェクトと同じ名前の新しいオブジェクトをアップロードして置き換える必要があります。 |
システムのパフォーマンスは、デバイスの容量に依存します。 ファイルシステム内に作成されるファイルやディレクトリが多いほど、多くのリソースが消費され、ユーザープロセスが長くなります。 |
そのため、OSS をファイルシステムにマッピングすることは推奨しません。 OSS を使用する際、大量の非構造化データ (画像、ビデオ、ドキュメントなど) を保存するための大量データ処理能力などの利点を最大限に活用することを推奨します。
OSS の概念とファイルシステムの概念の対応表は次のとおりです。
OSS | ファイルシステム |
---|---|
オブジェクト | ファイル |
バケット | ホームディレクトリ |
リージョン | 該当なし |
エンドポイント | 該当なし |
AccessKey | 該当なし |
該当なし | マルチレベルディレクトリ |
GetService | ホームディレクトリリストの取得 |
GetBucket | ファイルリストの取得 |
PutObject | ファイルへの書き込み |
AppendObject | 既存のファイルへのデータの追加 |
GetObject | ファイルの読み取り |
DeleteObject | オブジェクトの削除 |
該当なし | ファイルの内容の変更 |
CopyObject (同じターゲットとソース) | ファイル属性の変更 |
CopyObject | ファイルのコピー |
該当なし | ファイル名の変更 |