料理写真をs3へ移行したので、再度、簡単に構成をまとめてみた。
この構成で月間数千万(まだ億には届いていない、行きたい)単位の画像を大中小を配信している。
構成
| 項目 | 内容 |
|---|---|
| エッジ | Cloudfront |
| オリジン | リサイズ用途 c3.large x 2 |
| フィルター | nginx_image_filterを使用 |

GridFSを一時保存に使っているのは、過去の遺産でいずれS3へ移動する予定。
画像のアップロード
- クライアントからAPPサーバー経由で画像をアップする
- アップロードスピードを体感てアップするために、一時保存領域に、先に画像をアップしておく
- 一時領域にアップが完了しIDを取得したら、画像以外とそのIDをアップしs3へ画像を移動する
画像の取得
- クライアントからCloudfrontに画像をリクエスト
- Cloudfrontからフィルターサーバー画像を取得しにいき、Expiresは3時間に設定
- 投稿直後の約3時間がアクセスが多いので3時間に設定
- フィルターサーバーのプロキシ経由でs3にある画像を取得しに行き、リサイズして返す
- 画像が無ければ404へ
課題
- Cloudfrontの費用をもっと抑えたい
- Appサーバー経由でアップロードする箇所を見直したい
- キャッシュのコントロールをもう少し整理したい
など、他にも考えるところがありそう