複数の VM で集中化ロジックを実現しようとしています。たとえば、5 つの VM で 1 つのアプリケーションを実行しています。1 つのタスクを実行するのは 1 つの VM だけです。そのVMのホスト名をデータベースに書き込んでいますが、その名前をデータベースに更新するには、JavaクライアントAPIを使用してロックを実現する必要がありました。同時に2〜3台のVMが起動する可能性があるためです。それを達成する方法は?
更新: findandModify を使用できます。しかし、私のコードは次のようになります
{
if(collection.getCount({"taskName" :"Task1"}) == 0){
//insert record ------ **I can use findAndModify here**
}
}
ただし、2 つの VM が同時に起動すると、ドキュメントが利用できないため、両方とも if ブロック内に入ります。
findAndModify がアトミックであることは理解しています。したがって、1 つの VM が findAndModify コマンドを発行した後、ホスト名を持つ 1 つのレコードが作成されます。ただし、次の VM も同じ操作を実行し、そのホスト名でレコードを再度更新します。
私の質問が明確でない場合はお知らせください。