ストレージの役割と特性
ストレージ(NFS / SAN / オブジェクトストレージ)は永続データの保管・共有ファイルシステムの提供を担う。ボトルネックとなるのはIOPS(ランダムアクセス)・スループット(シーケンシャル)・容量・レイテンシの4軸であり、ワークロードの特性によって対処方法が異なる。
ボトルネックになるリソース
| ストレージ種 | 主なボトルネック | 確認方法 |
|---|---|---|
| NFS サーバー | CPU(プロトコル処理)・ネットワーク帯域・ディスク IOPS | nfsstat -s / iostat |
| SAN / iSCSI | FC / iSCSI 帯域・バックエンドディスク IOPS | ストレージ管理コンソール |
| AWS S3 | プレフィックス単位のリクエストレート(3,500 PUT / 5,500 GET per prefix) | CloudWatch S3 RequestMetrics |
| EFS / Azure Files | スループットモード・バーストクレジット残量 | CloudWatch BurstCreditBalance |
スケールアップの内容と効果
① IOPS 増強
■ 必要 IOPS の試算
必要 IOPS = 1秒あたりのファイル操作数 × アクセスパターン係数
例:2,000 ops/s(70% ランダム) → 2000 × 0.7 + 2000 × 0.3 × 0.3 ≈ 1,580 IOPS → gp3 を 3,000 IOPS に設定
iostat -x 1 10
# r/s: 読み取り IOPS w/s: 書き込み IOPS
# await: I/O 待機時間(ms)。SSD なら 1ms 以下が正常
# %util: 70% 超えで飽和気味
nfsstat -s # NFS サーバー側統計
② スループット増強
■ 必要スループットの試算
必要 MB/s = 最大同時転送数 × 平均ファイルサイズ(MB) ÷ 転送時間(s)
例:10ユーザー同時に 500MB を 30秒でダウンロード → 10 × 500 ÷ 30 ≈ 167 MB/s → EFS Provisioned Throughput を 200 MB/s に設定
③ S3 リクエストレート問題の対処
import hashlib
def s3_key_with_distributed_prefix(original_key: str, prefix_len: int = 4) -> str:
# ランダムなプレフィックスを付与してアクセスを分散させる
# 例: "logs/2026/05/30.log" -> "a3f2/logs/2026/05/30.log"
hash_prefix = hashlib.md5(original_key.encode()).hexdigest()[:prefix_len]
return f"{hash_prefix}/{original_key}"
# 1プレフィックスあたり: 3,500 PUT / 5,500 GET req/s
# 16 プレフィックスなら: 56,000 PUT / 88,000 GET まで対応可能
スケールダウンの考え方
| 条件 | スケールダウン可否 |
|---|---|
| EBS %util < 20% かつ await < 1ms が常態化 | gp3 の IOPS/スループット削減を検討 |
| EFS BurstCreditBalance が常に増加 | Provisioned Throughput を下げることを検討 |
✅ AWS EBS gp3 は IOPS とスループットを独立調整できる
ベースライン(3,000 IOPS / 125 MB/s)に対して必要分だけ追加課金で増強。「試してから下げる」アプローチが取りやすいです。
スケールアップ vs スケールアウト
| 状況 | 推奨アプローチ |
|---|---|
| 単一ボリュームの IOPS 限界 | スケールアップ(gp3 増強 / io2 化) |
| 容量が 16TB(EBS 上限)に迫る | ストレージアレイ追加 / S3 ライフサイクル移行 |
| S3 スロットリング | プレフィックス分散(スケールアップでは解決しない) |
判断指標(監視メトリクス)
| メトリクス | 確認方法 | スケールアップの目安 |
|---|---|---|
| %util(ディスク使用率) | iostat -x | ≥ 70% が継続 |
| await(I/O 待機時間) | iostat -x | HDD: ≥ 15ms / SSD: ≥ 5ms |
| EBS VolumeQueueLength | CloudWatch | ≥ 0.1 が継続 |
| S3 ThrottledRequests | CloudWatch | > 0 が継続 |
まとめ
| 項目 | 要点 |
|---|---|
| IOPS 増強 | ランダムアクセス多 → gp3 IOPS 増強 / io2 Block Express 化 |
| スループット増強 | 大容量転送 → gp3 スループット増強 / EFS Provisioned Throughput |
| S3 スロットリング | プレフィックス分散で解決する(スケールアップでは解決しない) |
| スケールダウン | EBS gp3 は IOPS とスループットを個別に削減できる |