求人広告ネットワークサービス「求人Hub」のバッチ処理のしくみ
はじめまして、求人Hubでバックエンドエンジニアをしている高井です。
本記事ではCaratが運営する求人広告ネットワークサービス「求人Hub」のバッチ処理について解説します。
求人Hubとは
「適切な求人を必要とする求職者に自然に届ける」をビジョンとし、複数の求人出稿企業の求人データを適切に変換し、それらを複数の求人掲載企業に届け、発生した応募データを出稿企業に移送するためのプロダクトです。
主な利用技術はRuby on Rails, AWS, Terraformになります。
バッチ処理の要件
複数の出稿企業からの求人データのインポートが完了してから、複数の掲載企業に求人データのエクスポートを実施する必要がある
それぞれの企業に対してのインポート・エクスポートは全体の実行時間短縮のため並列実行したい
インポートした求人データはデータベースに保存して、エクスポートする際はデータベースからデータを読み出すため、並列処理によりデータベースの負荷が大きくならないよう同時実行数を制限したい
インポート・エクスポート処理の中には15分を超えるものがある(Lambdaが使えない)
バッチ処理のしくみ
上述の要件からAWSサービスのECS(Fargate) + Step Functionsを使い、バッチ処理を実装しています。
Step Functionsについてご存知ない方は下記ページで詳細を確認ください。
求人Hubのバッチ処理ではStep Functionsを利用することで、複数の長時間稼働するジョブを順番に実行して正常に完了させています。
バッチ処理のStep Functionsステートマシン一覧は下記になります。
インポート実行制御ステートマシン
インポート実行・エクスポート実行制御ステートマシンの開始と同時実行数管理をするタスクを含みます。
インポート実行・エクスポート実行制御ステートマシン
各出稿企業からのインポート処理を実行するタスクとそれらの完了後にエクスポート実行ステートマシンの開始と同時実行数管理をするタスクを含みます。
エクスポート実行ステートマシン
各掲載企業へのエクスポート処理を実行するタスクを含みます。
上述したステートマシンを用いた、バッチ処理全体のフローチャートは下図のようになります。
上述したしくみでバッチ処理を実装することにより下記のようなメリットが得られています。
インポート・エクスポートの並列実行処理を比較的簡単に実装できる
インポート完了後のエクスポート呼び出しを1つのステートマシンで連続実行できるので、時間効率よくバッチ処理を実行できる
各インポート・エクスポート処理に必要なリソースをステートマシン単位で確保するため、リソース(CPU・メモリ)を効率よく利用できる
同時実行するステートマシン数の制限をかけているため、データベースへの負荷を分散できる
各インポート・エクスポート処理の独立性が保たれているため、エラー発生時の再実行処理などが小さい単位で実行しやすい
さいごに
求人Hubの開発は主にバックエンドエンジニアにより行われており、Rails, AWSを中心とした経験を積みたいエンジニアの方には適した環境です。
少しでも興味を持ってくださった方は下記の募集から気軽にエントリーいただければ幸いです。
この記事が気に入ったらサポートをしてみませんか?