見出し画像

大量の画像を高速で取得してS3とDBに保存する

こんにちは、求人Hubでバックエンド兼インフラを担当している川口( @kawasystem )です。

今回は求人Hubで利用している大量の画像を高速で取得してS3に保存する仕組みを紹介したいと思います。

背景

求人Hubでは、1日数十万件の求人データを取り扱います。当然、数十万件以上の画像URLを出稿企業様から頂戴するのですが、この画像URLから画像を取得し、掲載企業様に提供する時は求人HubのCDNにアクセスされるように画像URLを提供します。

処理概要イメージ

どの様に処理するのか

数十万件ある画像を直列で処理していたら、時間がメチャメチャかかります。コンテナ環境なのでRubyでマルチスレッド処理を実装するとマシンスペックに依存します。つまり、スケールアップの限界がシステムの処理限界になってしまいます。

この為、非同期処理(RailsのActiveJob)+AWS SQSを利用し、queueの数でオートスケールするようにしました。

画像を処理するフロー

効果

2時間以上かかっていた処理が15分程度に短縮できました。理由は以下になります。

  • 直列 → 並列になることによって同時実行できるようになった。

  • ActiveJobのタスクがオートスケールするので、どれだけ処理する数が増えても対処できる。

  • 求人出稿企業のCDNに処理スピードが依存しない。(先方CDNの画像レスポンスが遅くても、求人Hubの処理スピードに影響しない)

今後

現在は画像だけですが、CSV読み込みのみバッチ処理で実施し、残りをすべてActiveJobで実施することを検討しています。
(画像以外全て求人データの取り込み処理が高速化されると考えています。)

おわりに

Rails, AWSを中心とした経験を積みたいエンジニアの方には適した環境です。少しでも興味を持った方は下記の募集から気軽にエントリーしてください。


この記事が気に入ったらサポートをしてみませんか?