
BoltzEngine の並列動作
BoltzEngine は、Master と Slave のプロセスが連携して動作します。 1つの Master は複数の Slave を扱うことが可能で、また、1つの Slave は複数の Master から参照することが可能です。 複数の Slave を利用する場合は、boltz master
コマンドの-slaves
オプションを使って Slave のホスト名とポート番号を与えます。
Slave の動作仕様
Slave は、Master から同時に受け付けることが可能な通知リクエスト数が決まっています。 EL7 版の場合は/etc/sysconfig/boltz/slave
、EL6 版の場合は/etc/init/boltz-slave
のmax_agents
変数が、1つの Master から同時に処理可能な上限です。
max_agents
は、異なる Master であれば別のものとして扱います。 そのため、例えばmax_agents=10
の Slave が2つの Master から参照された場合は、 Slave プロセスは全体として同時に20個まで同時実行を行います。
Masterの動作仕様
Masterは、自分が扱えるSlaveのmax_agents
を全てまとめて、同時に利用するワーカーを構成します。 例えばmax_agents=30
の Slave が3つあれば、Master は90個のワーカーが利用可能です。 十分に小さい通知を1回リクエストすると、ワーカーを1つ消費して APNs/FCM/WebPush/ADM などへ通知を行い、 処理が終わればワーカーとして再利用ができる状態へ戻ります。
1つのリクエストが一定以上大きい場合は、通知速度を上げるため、複数のワーカーを消費して並列処理を行います。 Master が扱うワーカー数を超えた通知がリクエストされた場合、 溢れたメッセージは Master の待機リストに入りますが、 処理を終えたワーカーが再利用可能になった時点で待機リストから取り出して通知を行います。
Master が同時に受け付けることができるリクエスト数に、プログラム上の制限はありませんが、 以下のような要因によって最大数は異なります。
- メモリ容量
- Masterプロセスの
ulimit -n