MySQLクラスターのような分散サーバーを使用して、複数のサーバーに展開されているasp.netWebアプリケーションで「ロック」を実行できる方法があるかどうかを知りたいです。
たとえば、アカウントの残高を更新する典型的な例を考えてみましょう。2つのリクエストで同じアカウント残高を同時に更新することはできません。例えば:
メンバー1の口座残高は100です。
- リクエストAはサーバー1にアクセスして、メンバー1の残高に100を追加します
- リクエストBはサーバー2にアクセスして、メンバー1の残高に50を追加します
したがって、リクエストAは残高を100から200に更新し、保存します。
リクエストBは残高を150に更新し、保存します。
これらはすべてまったく同時に発生するため、最終結果は250になるはずなので、情報が失われます。
リクエストBが残高を取得するまでリクエストAが終了するまで待機する必要があるように、どのようにロックできますか。単一のプロセスの場合、これはアプリケーション全体のロックによって実装できます。ただし、複数の独立したプロセスがあるため、これはサーバー1の場合は機能せず、ロックされておらず、サーバー2も機能しません。
これをどのように行うことができるかについてのアイデアやベストプラクティスはありますか?