跨进程(和机器)同步(信号量)

Vac*_*ano 2 .net c# wcf synchronization semaphore

背景:

我的 WCF 应用程序必须调用一个没有任何并发​​检查的服务。它是由第三方创建的服务,可能无法让他们添加并发检查。

我可以确保调用第三方服务的唯一方法是通过我的 WCF 应用程序。所以我正在考虑在我的代码中加入并发检查。

为此,我将使用唯一描述正在修改的数据的标识符。这个想法是,如果对服务的一次调用正在修改与标识符相关的数据,那么对该标识符的其他调用将需要等到它完成。

问题:

我的 WCF 服务是负载平衡的。我可以在不同的虚拟机上同时运行多达 16 个实例。

因此,大多数处理同步的 .NET 类都假定共享内存空间。

是否有标准的“最佳实践”类型的方法来为服务的负载平衡实例进行同步?

我曾考虑使用数据库表 (SQL Server) 来尝试管理它,但从架构的角度来看,将我的持久层用于此目的似乎是错误的。我希望有另一种解决方案。

概括:

如何跨机器进行同步(锁、互斥、信号量等)?(最好不使用数据库表来管理它。)

Sha*_*uti 6

使用分布式锁管理器根据您创建的标识符锁定资源修改。

您可以使用的一些 DLM 是: