背景:
我的 WCF 应用程序必须调用一个没有任何并发检查的服务。它是由第三方创建的服务,让他们添加并发检查可能是不可能的。
我可以确保调用第三方服务的唯一方法是通过我的 WCF 应用程序。所以我正在考虑在我的代码中添加并发检查。
为此,我将使用唯一描述正在修改的数据的标识符。这个想法是,如果对服务的一次调用正在修改与标识符相关的数据,那么对该标识符的其他调用将需要等待它完成。
问题:
我的 WCF 服务是负载平衡的。我可以同时运行多达 16 个实例,所有实例都在不同的虚拟机上。
因此,大多数处理同步的 .NET 类都假定共享内存空间。
是否有标准的“最佳实践”类型的方法来对服务的负载平衡实例进行同步?
我曾考虑过使用数据库表(SQL Server)来尝试管理此问题,但从体系结构的角度来看,使用我的持久层来实现此目的似乎是错误的。我希望有另一种解决方案。
Summary:
如何跨机器进行同步(锁、互斥锁、信号量等)?(最好不使用数据库表来管理它。)
Use a 分布式锁管理器 https://en.wikipedia.org/wiki/Distributed_lock_manager根据您创建的标识符锁定资源修改。
您可以使用的一些 DLM 包括:
- 动物园管理员 http://zookeeper.apache.org/
- Redis https://redis.io/topics/distlock
- 分布式锁 https://github.com/madelson/DistributedLock
- 分布式锁 https://github.com/GibraltarSoftware/DistributedLocking
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)