展望未来,当一个Web农场将被创建以...Windows服务在Web场(如何防止并发冲突)
我们必须执行各种回地面任务的各种窗口服务应用程序:发送电子邮件,缩略图/处理文件等。
在服务器场环境中,我们可以理论上在每台计算机上安装并运行每项服务,但由于基于业务对象的“首写赢”或不合需要的重复任务例如:发送多次的相同电子邮件。
可以通过解决问题或跳过项目的代码或逻辑来克服“首写”方案。 (如果它的基本排队机制(查询列表和过程记录),它只会再次尝试)
对于任务重复,可以在事务中执行任务以防止其他进程获取相同的资源,但是我猜他们会等待,我们需要根据事情再次处理一些登录?情况会是这样吗?
为了防止重复的任务,我想建立一些机制,将一个“锁定标志”写入数据库,该数据库将由启动的第一个服务设置。该标志将会注明日期并引用该服务的实例。 “拥有”标志的服务将运行任务并定期更新此日期。在服务不拥有该标志的情况下,每个服务也会有超时/容限设置,它将检查容差并在需要时接管。
这听起来像一个合理的解决方案还是一个应该去一个更好的消息,在这个阶段(排队基础的解决方案还不能确定,将如何在农场工作environement
TECNOLOGIES:C#/ ASP.NET/SQL Server的
如果某个服务在锁定某些记录后出现故障并完成了任务,但在写入之前会发生什么? – 2009-09-14 09:48:45
这个想法是记录不会被锁定,它只是一个标志,表明哪个服务正在做这项工作。日期标记将向其他服务表明某些失败。在这种情况下,另一项服务将接管(类似于在同一台机器上重新启动一项服务)超时/容忍时间将需要超过任务(或多项任务)需要完成的预期时间长度。 – 2009-09-14 09:57:05