私たちのセットアップは、自動スケーリング機能を備えた AWS EC2 にデプロイされた Python Flask アプリケーションで構成されており、MySQL データベースを活用しています。
また、別の Linux システムでスケジュールされたジョブがあり、10 秒ごとにトリガーされ、 の API エンドポイントにアクセスしますhttps://api.example.com
。
アプリケーションは pm2 で実行されます。
最近、これらのスケジュールされたジョブから生じるデータ重複の問題が発生しました。cron ジョブは 10 秒ごとに実行するように正しく設定されていますが、同じジョブがわずかマイクロ秒の差で同時に実行されるインスタンスが観察されました。API ログを有効にすると、これらの発生が確認されました。
これらのジョブが 10 秒ごとに API URL にアクセスするようにスケジュールされているのに、どのようにして同時に実行されるのかは不可解です。この問題の診断に役立つ方法やツール、およびこのような同時ジョブ実行を防ぐ戦略についてアドバイスを求めています。
答え1
特に非常に短い間隔で、ジョブの単一のコピーを確認せずに繰り返しジョブを実行すると、直接的にトラブルが発生します。
できることは、API 呼び出しの実行時間を測定し、スケジュールを最大間隔に設定することです。そしてチェックを実装して、ジョブのコピーが 1 つだけ実行されるようにします。すでに実行されている場合はジョブをスキップするように設定し、アラームのようなものを送信して、スケジュールされた間隔を (再度) 再検討することができます。
もちろん、スキップされたジョブのキューのようなものを整理することはできますが、これはジョブの性質に大きく依存します。また、キューが常に増加するリスクがあります。