gazou-compressor.jp

Serverless画像最適化 コスト最小化パターン:eCPU秒/GB転送/ストレージ最適化

Serverlessでのオンザフライ画像最適化は CPU課金 + 転送 + ストレージ の三位一体。単体最適ではなく 費用関数 を分解し全体最小化します。

ゴール
  • eCPU秒/GBを可視化
  • 遅延ヒット (lazy variant) 削減
  • 再圧縮効率閾値でCPU無駄削減

1. コスト式

# 月次概算コスト指標 (例: Workers+R2風)
TOTAL = CPU_SEC * unit_cpu + EGRESS_GB * unit_egress + R2_GET * unit_get + R2_PUT * unit_put + STORAGE_GB * unit_storage

2. 基本パターン

// 1. Edgeリクエストハンドラ (pseudo)
if (cacheHit(request)) return cached();
const fmt = negotiateFmt(request.headers.accept); // avif|webp|jpeg
const variantKey = key + "_" + fmt + "_w"+targetW;
let originResp = await fetchOriginIfNeeded(key);
let optimized = await maybeTransform(originResp.body, {fmt,targetW});
return cachePutAndRespond(variantKey, optimized);

3. キャッシュ階層

CDN → Edge KV/Cache API → Origin (R2/S3) → 再生成。ミス原因を variantキー 毎に集計し幅クラスタ再設計。

// 2. 変換判定
function maybeTransform(buf,{fmt,targetW}){
  const meta = sniff(buf);
  if(meta.width <= targetW && meta.format === fmt) return buf; // no-op
  return transcodeResize(buf, {format:fmt,width:targetW,quality:qFromPolicy(meta)});
}

4. ポリシー & 変換

# 3. Policy: 期待削減bytes/CPUms 比で実行
benefit = original_size - est_size_after(fmt,q)
if benefit / est_cpu_ms > THRESHOLD:
  do_transform()
else:
  short_circuit()

5. モニタリング & 人気度減衰

# 4. モニタリング指標 (export)
cache_hit_ratio, avg_cpu_ms, p95_cpu_ms, egress_gb, bytes_saved, transform_success_rate
# 5. 人気度の減衰サンプリング (Redis風)
HINCR popularity <key>
if (rand() < decay_probability(now - last_access)):
  HSET popularity <key> popularity[key] * 0.7

6. FAQ

7. まとめ

費用分解で最も弾性の高い項目へ集中投資し CIパイプライン で継続監視する体制が持続的削減を生みます。

gazou-compressor.jp 編集部

画像圧縮・変換・背景除去などの実践テクニックと、Webで“速く・軽く・崩さない”ためのノウハウを発信しています。

関連記事

トピック/更新日の近いコンテンツ