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

概要 — まず全体をつかむ

中級では署名付きURL・冗長化を見ました。上級では、オブジェクトストレージの内部と運用へ。

詳細 — 1段階ずつ追う

オブジェクトストレージの内部

ファイル階層ではなく、キー→オブジェクトのフラットな空間として、水平に分散して保持します。

  • メタデータとデータの分離 — 索引(どこに何があるか)と実体を別に管理
  • 冗長化 — レプリケーション(丸ごと複製)/イレージャーコーディング(断片+パリティで容量効率)
  • 耐久性 — 複数拠点への分散で、非常に高い「失わなさ」を実現
やさしく言うと(中級

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

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

登場人物メモ:

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

大きな塊を扱う流れ

  1. 署名付きURL で、クライアントが倉庫と直接やり取り
  2. 巨大ファイルはマルチパートアップロード(分割・並列・部分再送)
  3. 保存後、イベント通知で後処理を起動(サムネイル生成・ウイルススキャン)
  4. 配信はCDNと組み合わせ、近くから
やさしく言うと(中級
  1. バックが署名付きURLを発行する(「このファイルを、この期限まで、アップしてよい」)
  2. クライアントはそのURLへ直接アップロード(バックは中継しない)。ブラウザから倉庫へは別オリジンへの通信になるため、倉庫側にCORS設定(許可するオリジン・メソッドの指定)が要る
  3. 保存後、DBにはキー/URLだけを記録する
  4. 配信時は、必要ならCDNと組み合わせて近くから配る

運用の勘所

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

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

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

⚠️ 深部の落とし穴

  • 結果整合の読み取り — 分散設計次第では書いた直後に一覧に出ない/削除が見える(現行S3は強整合だが、一般には設計依存)
  • 公開設定・署名ミス — バケット公開や広すぎる署名で情報漏洩(重大事故の定番)
  • 大量の小オブジェクト — メタデータ管理・一覧コストが膨らむ
  • ホットオブジェクト — 特定オブジェクトへの集中(CDN/複製で分散)
やさしく言うと(中級
  • 公開設定ミス — バケットを誤って公開し、機密ファイルが漏洩(重大事故の定番)。バケットポリシーとブロックパブリックアクセスで既定を非公開に保てば防げる
  • 大量の小ファイル — 数が多いと一覧・管理のコストが上がる

理解度チェック

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

1. 巨大ファイルを分割して並列にアップし、途中失敗も部分再送で済ませる仕組みは?

2. レプリケーション(丸ごと複製)に比べ、イレージャーコーディング(消失符号)の利点は?

3. 現行の主要なオブジェクトストレージ(S3など)が提供する整合性モデルとして正しいのは?

4. オブジェクトストレージがデータを保持する構造として正しいのは?

5. オブジェクト保存後に、サムネイル生成やウイルススキャンなどの後処理を自動で起動するのに使うのは?

6. 特定のオブジェクトにアクセスが集中する「ホットオブジェクト」への対処として適切なのは?

7. オブジェクトストレージで、保存時にサーバ側がデータを暗号化する仕組みを英字3文字の略語で答えてください。

8. 古いオブジェクトを「ホット→クール→アーカイブ」と安価な階層へ自動的に移動させ、コストを最適化する設定を何と呼ぶ?