Asakusa Framework Advent Calendar 2016の3日目です。
Asakusa on M3BPのバッチは1台のサーバーのメモリー上に全データが乗る必要がありますが、当然、バッチの種類およびデータ量によっては、サーバーの全メモリーを使用するわけではありません。
例えばメモリーを512GB搭載しているサーバーであれば、最大128GBしか使わないバッチは4並列まで実行できることになります。
(それぞれのM3BPバッチがマルチスレッドで動くのでCPUのコア数もそれなりに必要ですが、これまでの経験では、コア数はそんなに多くは必要なかったです。メモリーは足りないとバッチが落ちますが)
しかし、256GB使うバッチが混ざっていると3並列まで可能? 256GBのバッチ2つなら2並列?という具合に、並列実行させるのは結構面倒です。
そこでRetzの出番です!(笑)
Retzは、バッチの実行を行うジョブスケジューラーです。
Retz自身はAsakusaFWと直接の関係は無く、AsakusaFW以外でも使用可能です。
スケジューラーと聞くと、個人的には、バッチを特定時刻で起動したり、前のバッチが終わるまで待って後続バッチを実行したりするツールを思い浮かべるのですが、Retzはそういうものではありません。
Retz管理下のクラスター(複数のサーバー)の中からリソース(CPUやメモリー)が空いているサーバーを探し、そのサーバー上でジョブ(バッチ)を実行してくれるものです。
Retzに対して複数のジョブの実行を指示しておけば、リソースが足りている分について並列でジョブを実行してくれます。
リソースが空いていなければ、空くまでジョブの実行を待ちます。
これを応用し、M3BPマシンでクラスター(1台構成でも可w)を組んでおけば、そのマシンのリソースを使い切るまで、バッチを詰め込んで並列で実行してくれるわけです。
ちなみに、Retzを使ってバッチを実行することを、業界(弊社内のごく一部)用語で「Let's Retz」と言うようです。
^^;