複数のサーバーの読み取りと書き込みでユーザークレジットを処理するための中央データベースがあります。アプリケーションはこれらのサーバーの上にあり、各リクエストに対して次のことを実行してユーザー リクエストを処理します。
1. データベースから読み取って、ユーザーがタスクに対して十分なクレジットを持っているかどうかを確認します。 2. 時間のかかるリクエストを実行する 3. ユーザー アカウントからクレジットを差し引き、新しいクレジット カウントを db に保存します。
アプリケーションはデータベースの楽観的ロックを使用します。したがって、次のことが起こる可能性があります
1. リクエスト a が入ってきて、ユーザー x に十分なクレジットがあることを確認し、 2. リクエスト b が届き、ユーザー x に十分なクレジットがあることを確認します。 3. 仕事をする 4. a は、新しいクレジット カウントを db に保存します。 5. b は仕事をする 6. b が新しいクレジット カウントを db に保存しようとすると、アプリケーションは例外を取得し、このクレジット控除の説明に失敗します。
悲観的ロックでは、アプリケーションはユーザー アカウントを明示的にロックして排他的アクセスを保証する必要がありますが、システムには多くの同時要求があるため、パフォーマンスが低下します。
では、この信用システムの優れた新しい設計は何でしょうか?