c# - 跨进程(和机器)同步(信号量)
问题描述
背景:
我的 WCF 应用程序必须调用一个没有任何并发检查的服务。它是由第三方创建的服务,让他们添加并发检查可能是不可能的。
我可以确保调用第三方服务的唯一方法是通过我的 WCF 应用程序。所以我正在考虑在我的代码中进行并发检查。
为此,我将使用唯一描述正在修改的数据的标识符。这个想法是,如果对服务的一次调用正在修改与标识符相关的数据,那么对该标识符的其他调用将需要等到它完成。
问题:
我的 WCF 服务是负载平衡的。我可以同时运行多达 16 个实例,它们都在不同的虚拟机上。
因此,大多数处理同步的 .NET 类都假定共享内存空间。
是否有标准的“最佳实践”类型的方法来为服务的负载平衡实例进行同步?
我曾考虑使用数据库表(SQL Server)来尝试管理它,但从架构的角度来看,将我的持久层用于此目的似乎是错误的。我希望有另一种解决方案。
概括:
如何在机器之间进行同步(锁、互斥、信号量等)?(最好不使用数据库表来管理它。)
解决方案
Use a Distributed lock manager to lock resource modification based on the identifier you created.
Some of DLM's you can use are:
推荐阅读
- pandas - 您如何绘制最大的聚合 groupby 数据?
- python - 使用默认值填充数据框 Pandas
- django - 使用 Postman 的 Django API REST 错误:“详细信息”:“未提供身份验证凭据。”
- graph - hasNext 返回错误结果
- python - 无法从自己的模块导入
- mysql - 有没有办法在查询结果中获取记录的行号?
- javascript - 将数据发送到 Omron 控制器的最佳方式是什么?
- javascript - 如何为每个项目播放视频
- c# - 如何在 Xamarin Forms 项目中使用最新的 C# 版本
- html - 使用 pandoc 将带有 LaTeX 的 Markdown 文档转换为 HTML 并在 HTML 中将 LaTeX 转换为 SVG