私の問題の説明は次のとおりです。
- ロード バランサーの背後に、nodejs (express.js) で記述された x 個の Web ワーカーがあります。これらのワーカーはデータを mongodb (mongoose.js) に書き込みます。
- ハンドラーのミドルウェア チェーンのある時点で、次のロジックを実行するようにエンドポイント y をセットアップしました。要求しているユーザーがデータベースに存在する場合は、それをフェッチし、いくつかのフィールドを更新してから保存します。存在しない場合は、mongo に挿入します。
ノート!ドメイン固有のロジック、つまり. ユーザーがすでに存在する場合は特定の値で更新し、そうでない場合は別の値で挿入します。
- 問題は、多くの場合、同じユーザー (データベースにまだ存在していないユーザー) からの 2 つのリクエストが 2 つの異なるワーカーにヒットすることです。ユーザー処理ミドルウェアが起動すると、両方のワーカーがユーザーが存在しないと判断し、ユーザーを挿入してから更新しようとします。当然、これはエラーを引き起こします。検証エラー: ユーザー検証などごとに一意の電子メールを設定しました。
どうすればこれを防ぐことができますか?