ユーザーが定義した時間に条件付きでユーザーのメールボックスにメッセージを挿入するために IMAP を使用する Web アプリがあります。
これらの「ジョブ」のそれぞれは、ジョブを実行する必要があるときのタイムスタンプ (数か月先の可能性があります) とともに MySQL DB に保存されます。ユーザーはいつでもジョブをキャンセルできます。
問題は、IMAP 接続を確立するプロセスが遅いことです。メッセージを挿入する前に、受信トレイ (または同様のもの) に誰かからの返信があるかどうかを条件付きで確認する必要があり、各ジョブにかなりの処理オーバーヘッドが追加されます。
現在、1 分ごとに cron スクリプトを実行するシステムがあり、次の X 分で配信する必要があるすべてのジョブを DB から取得します。次に、それらを Z ジョブのバッチに分割し、バッチごとに非同期 POST 要求を実行して、それらの Z ジョブのすべてのデータを同じサーバーに返します (「偽の」マルチスレッドを実現するため)。次にサーバーは、HTTP 経由で入ってくる Z ジョブの各バッチを処理します。
pnctl_fork のようなものではなく、マルチスレッドに非同期 HTTP POST を使用する理由は、他のサーバーを追加して、代わりにそれらにデータを POST させ、現在のサーバーではなくジョブを実行させることができるようにするためです。
だから私の質問は - これを行うためのより良い方法はありますか?
beanstalkdのようなワーク キューが利用できることはありがたいのですが、特定の時間にジョブを実行しなければならないモデルに適合しますか?
また、とにかく DB にジョブを保持する必要があるため (ジョブを管理するための UI をユーザーに提供する必要があるため)、そこにワーク キューを追加すると、実際にはオーバーヘッドが削減されるのではなく、オーバーヘッドが増加しますか?
私たちが必要とするものを達成するためのより良い方法があると確信しています - どんな提案も大歓迎です!
これらすべてに PHP を使用しているため、PHP ベース/互換性のあるソリューションが本当に求めているものです。