処理するジョブを格納するmysqlテーブルがあります。主に生データのテキストフィールドは処理するのにそれぞれ約1分かかります。メッセージキューの代わりにmysql行レベルの読み取りロック
私は2台のサーバーがそのテーブルからデータを取り出して削除しています。
私は現在amazon SQSを使用している2台のサーバ間のジョブ割り当てを管理します。私はSQSで処理が必要なすべての行IDSを保存し、ワーカー・サーバーは新しい行を処理するためにSQSをポーリングします。
システムは現在動作していますが、SQSは、私がやっていることを達成するために過度に感じる複雑さとコストの層を追加します。
私はSQSなしで同じことを実装しようとしていますが、ある行で作業しているワーカーがその行を選択できるように、行をロックする方法があるかどうか疑問に思っていました。またはそれを行うための良い方法がある場合。
行を追加する際の問題は、作業者が途中で失敗した場合、その行が処理された状態でテーブルにスタックされていることです...詳細については、「更新」を参照してください。それは行をロックし、どれくらいの期間、問題を解決するかもしれません – applechief
別の列を追加してください: 'locked_at DATETIME'そして、長い時間前にロックされた行のロックを解除するために定期的なcronジョブを実行してください。 –