展望未来,何时创建网络农场......
我们有各种 Windows 服务应用程序执行各种后台任务:发送电子邮件、缩略图/处理文件等。
在服务器场环境中,理论上我们可以在每台机器上安装和运行每个服务,但是由于基于业务对象的“先写双赢”或不希望的任务重复,例如:发送相同的电子邮件,可能会出现冲突。次。
可以通过解决问题或跳过项目的代码或逻辑来克服“先写获胜”的情况。(如果它是一个基本的排队机制(查询列表和进程记录),它将再次尝试)
对于任务的重复,可以在事务中执行任务以防止其他进程抢占相同的资源,但是我猜他们只会等待,我们需要根据再次发生的事情来处理一些登录?会是这样吗?
为了防止重复任务,我正在考虑建立一些机制,将“锁定标志”写入数据库,该标志将由启动的第一个服务设置。此标志将注明日期并引用服务实例。“拥有”标志的服务将运行任务并定期更新此日期。在服务不拥有标志的情况下,每个服务也会有一个超时/容差设置,它会检查容差并在需要时接管。
这听起来像是一个合理的解决方案,还是应该在那个阶段采用更好的基于消息队列的解决方案(也不确定这在农场环境中如何工作?
技术:C# / ASP.NET / SQL Server