大量の画像を高速で取得して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を中心とした経験を積みたいエンジニアの方には適した環境です。少しでも興味を持った方は下記の募集から気軽にエントリーしてください。