巨大なデータを扱う定期実行処理を、データ量に応じてスケールアウトさせたい
状況
巨大なデータを返すWebAPIを使ったスクリプトを、5分間隔程度の比較的短い頻度で定期的に実行したいと考えています。定期実行するスクリプトはWebAPIからデータをガツっと取得し、そのデータをごにょごにょします。
現時点ではそこまで巨大なデータではないので、1台で捌くことができると考えていますが、今後データ量が大幅に増加していくことが予想されています。また、データ量が増えると5分で処理しきれない可能性が出てきます。
そのため、データ量に応じて柔軟にスケールアウトさせる仕組みを整えておきたいと考えています。具体的に言うと、データが増えてもスクリプトを実行するサーバを増やせば対応できるような構成にしたいと考えています。
教えていただきたいこと
このような状況で、何か良い実装方法、ツール、アーキテクチャ等々御存知の方がいましたら、教えていただきたいです。
そもそも根本的な部分の考え方が良くない、というようなものでも構いません。
よろしくお願いいたします。
補足
- WebAPI側にパラメータを増やしたり、機能追加をする方法も可能です
- 現時点では、WebAPIに全データの件数を返すAPIを用意して、その件数を取得し、バッチ処理を行うサーバの台数で割って、それぞれのサーバが処理する件数を均等にする...というような方法を考えています
追記
Yuki Inoueさん、Kenji Noguchiさん
コメントありがとうございます。情報が不足しており申し訳ありません。補足いたします。
実行する定期実行の処理が、スケールアウトできるものであることが前提であるように思われます。その定期実行で何をやりたいかが定義されないと、回答を行うのは難しいのではないか、と感じました。
定期実行でやりたいことは、指定されたURLに対してHTTPリクエストをし、その結果をログに吐くジョブをキューに登録することです。ジョブを実行するのは別サーバの役割です。
巨大なデータを返すAPI、といったところからURLの情報を取得します。
入力と出力のデータ形式、データ量、途中でどんな計算をするのかを示してください。
■ 入力と出力
WebAPIは、現時点ではページネーションのパラメータしかありません。pageパラメータで取得するページ番号、per_pageパラメータで1ページの取得件数が指定できます。
WebAPIのレスポンスは、URL情報がJSON形式になったものです。
[
{ "id": 1, "url": "http://example.com"},
{ "id": 2, "url": "http://example.co.jp"},
...
]
※ APIも自前で持っているものなので、機能拡張は可能です。
■ データ量
データ量は正確には見積もれていないのですが、今後増加することだけはわかっており、現状のままでは破綻する気がしており、今回の質問をした次第です。
■ 途中の処理
バッチスクリプトでは、HTTPリクエストを投げるジョブをキューに登録するのみです。