我有一个中央数据库,用于处理多个服务器读取和写入的用户信用。应用程序位于这些服务器之上,通过对每个请求执行以下操作来服务用户请求:
1.通过读取数据库来检查用户是否有足够的任务信用。 2.执行耗时请求 3.从用户帐户中扣除一个信用,将新的信用计数保存回db。
应用程序使用数据库的乐观锁定。所以可能会发生以下情况
1.请求a进来,看到用户x有足够的信用, 2.请求b进来,看到用户x有足够的信用, 3. a 执行工作 4. a 将新的信用计数保存回 db 5. b 执行工作 6. b 尝试将新的信用计数保存回 db,应用程序出现异常并且未能考虑此信用扣除。
使用悲观锁定,应用程序将需要显式地获取用户帐户的锁定以保证独占访问,但这会降低性能,因为系统有许多并发请求。
那么这个信用系统有什么好的新设计呢?