ストレージサーバ — 大きな塊を置く倉庫

中級の解説は準備中のため、中級の内容を表示しています。

概要 — まず全体をつかむ

初級ではストレージを「大きな荷物の倉庫」と捉えました。中級では、オブジェクトストレージの仕組みと配り方を見ます。

詳細 — 1段階ずつ追う

これは何をする係?

Webでよく使うのはオブジェクトストレージ(S3 のような方式)。ファイルをオブジェクトとして、バケット(入れ物)に入れて管理します。ファイル階層というより「キー=住所でオブジェクトを出し入れする」イメージです。

  • バケット/オブジェクト — 入れ物と、その中の1ファイル
  • 署名付きURL — 期限・権限を埋め込んだ一時URL。直接アップ/ダウンロードに使う
  • 冗長化 — 複数拠点にコピーを持ち、高い耐久性を得る

登場人物メモ:

  • ※1 署名付きURL — バックを経由せず、クライアントが倉庫と直接やり取りする一時許可証
  • ※2 耐久性 — データを失わない度合い(複製で担保)

仕事の流れ

  1. バックが署名付きURLを発行する(「このファイルを、この期限まで、アップしてよい」)
  2. クライアントはそのURLへ直接アップロード(バックは中継しない)。ブラウザから倉庫へは別オリジンへの通信になるため、倉庫側にCORS設定(許可するオリジン・メソッドの指定)が要る
  3. 保存後、DBにはキー/URLだけを記録する
  4. 配信時は、必要ならCDNと組み合わせて近くから配る

種類と設計

  • ブロック/ファイル/オブジェクト — 用途で選ぶ。Webの静的資産はオブジェクトが定番
  • 耐久性 vs 可用性 — 失わなさ(複製)と、いつでも使える度合いは別の指標
  • ライフサイクル — 古いファイルを自動で安価な階層へ移す/削除する
  • アクセス制御 — 誰が何をできるかはバケットポリシーで定め、ブロックパブリックアクセスを効かせて既定は非公開に保つ(公開は明示的に許可したものだけ)
  • 結果整合性 — 分散ストレージ一般では、書いた直後に読むとまだ見えない・反映が遅れることがある(※主要クラウド(現行のS3など)は全操作で強整合になった)

3方式は「何を単位にまとめるか」で選び分けます。巨大な塊はオブジェクト、速いディスクはブロック、みんなで共有はファイルが定番です。

アニメーション『ストレージ3方式(オブジェクト/ブロック/ファイル)』を開く
ストレージ3方式 — 何を単位にまとめるかで選ぶオブジェクトID+メタデータで丸ごとid: 9f3a単位:オブジェクト(1ファイル)アクセス:HTTP API でID指定特徴:巨大・分散、ほぼ無限に拡張得意:画像・動画・バックアップ・ログブロック固定長ブロックに分割単位:固定長ブロック(低レベル)アクセス:OSがFSを載せて使う特徴:高速・低遅延(1台に接続)得意:DB・VMのディスク(起動用)ファイル階層フォルダで共有単位:ファイル(フォルダ階層)アクセス:パス指定(/共有/a.txt)特徴:複数マシンで同時共有(NAS)得意:部署の共有ドライブ・置き場巨大な塊はオブジェクト/速いディスクはブロック/みんなで共有はファイルWebの静的資産(画像・動画)はオブジェクトが定番

⚠️ うまくいかないとき

  • 公開設定ミス — バケットを誤って公開し、機密ファイルが漏洩(重大事故の定番)。バケットポリシーとブロックパブリックアクセスで既定を非公開に保てば防げる
  • 大量の小ファイル — 数が多いと一覧・管理のコストが上がる

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. オブジェクトストレージが「99.999...%データを失わない」と言えるのは主に何のおかげ?

2. オブジェクトストレージで、オブジェクト(1ファイル)をキーで出し入れする「入れ物」を何と呼ぶ?

3. ブラウザから巨大ファイルをアップロードさせるとき、バックを経由せず倉庫へ直接送らせるのに使うのは?

4. ブラウザから別オリジンの倉庫(オブジェクトストレージ)へ直接アップロードさせるとき、倉庫側に必要な設定はどれ?

5. 署名付きURLで倉庫へファイルを保存したあと、DBに記録しておくのは?

6. 誤って機密ファイルを公開しないよう、既定を非公開に保つために効かせる仕組みはどれ?

7. 3つのストレージ方式のうち、「速いディスクとして1台のサーバに付けて使う」のに定番なのはどれ?

8. 分散ストレージ一般で「書いた直後に読むと、まだ反映されず見えないことがある」性質を何と呼ぶ?