0
我们有从SqlServer的表中读取“工作”然后写结果反馈给其他表的工作进程。一台或多台机器运行一个或多个工作进程。 一个单一的SqlSever数据库(有时是集群的)是我们世界的中心,所以很可能是解决方案应该存在的地方。
我们需要一个系统,如果工作进程或正在运行的机器发生故障,系统将会分离。 (由于工作进程以其他任何方式失败,因此不能与数据库交谈是一件坏事。)
如果需要,工作进程可以在处理作业时保持连接和事务对SQL Server处于打开状态。
选项我想出了。
使用数据库锁:
- 开始在工作进程事务和锁定的行(或应用程序锁)
- 我们知道工作进程是OK,只要该行仍处于锁定状态
- 如果工作进程因任何原因而中止,SQL Server将中止事务并删除锁。
使用一个看门狗定时器:
- 对每个工作进程中的一排桌子
- 工作进程更新该行经常
- 如果在“最后一次OK”栏列长时间未更新,工作进程已死。
- 使用SqlServer UST时间,以避免每台机器的时间不同。
有没有其他的选择我没有想过?
您看到上述选项有什么问题?
如果你关心我们的工作进程都写在.NET和Windows服务器上运行。我们不需要能够将解决方案移植到不同的数据库供应商;我们只需要支持Sql Server 2005和2008
我们这样做,就像一个魅力。你认为事先使用服务器时间的亲,我们了解到,只有在冬季转换后;) – Andomar 2010-11-02 14:55:49
@Andomar,你有问题的客户改变SqlServer的时间? – 2010-11-02 15:01:20
Kerberos要求活动目录域中的所有计算机具有UTC的相同想法。只要你在SQL中使用'getutcdate()',我不会指望任何问题。 – Andomar 2010-11-02 15:07:32