Kar*_*sar 5 c# asp.net locking distributed-computing distributed-system
我想知道是否有任何方法可以使用分布式服务器(如 MySQL Cluster)对部署在多台服务器上的 asp.net Web 应用程序执行“锁定”。
例如,以更新帐户余额的经典示例为例。不应有两个请求同时更新相同的帐户余额。例如:
会员 1 账户余额为 100。
因此请求 A 将余额从 100 更新为 200 并保存。
请求 B 将余额更新为 150,并保存。
这些都完全同时发生,因此丢失了信息,因为最终结果应该是 250。
一个锁定如何才能使请求 B 必须等到请求 A 完成,直到它取回余额。如果它是单个进程,这可以通过应用程序范围的锁来实现。但是,由于有多个独立的进程,这对服务器 1 不起作用,它没有被锁定,服务器 2 也没有
任何想法或最佳实践如何做到这一点?
这就是交易的目的。
将需要原子性的操作包装在 a 中TransactionScope以将它们注册到显式事务中。
这并不能完全解决陈旧数据的问题,因为一旦事务完成,如果其他并发用户正在使用旧值进行更新,您仍然会遇到问题。
解决方案是使用表上的一个字段,只要行发生更改,该字段就会更改 - 在 SQL Server 2008 中,这就是rowversion类型。
仅当未更改时才更新该行rowversion- 如果已更改,则通知用户并返回当前值而不进行更新。
| 归档时间: |
|
| 查看次数: |
1988 次 |
| 最近记录: |