2010-11-02 163 views
0

背景如何判断客户端进程是否死亡?

我们有从SqlServer的表中读取“工作”然后写结果反馈给其他表的工作进程。一台或多台机器运行一个或多个工作进程。 一个单一的SqlSever数据库(有时是集群的)是我们世界的中心,所以很可能是解决方案应该存在的地方。

我们需要一个系统,如果工作进程或正在运行的机器发生故障,系统将会分离。 (由于工作进程以其他任何方式失败,因此不能与数据库交谈是一件坏事。)

如果需要,工作进程可以在处理作业时保持连接和事务对SQL Server处于打开状态。

选项我想出了。

使用数据库锁:

  • 开始在工作进程事务和锁定的行(或应用程序锁)
  • 我们知道工作进程是OK,只要该行仍处于锁定状态
  • 如果工作进程因任何原因而中止,SQL Server将中止事务并删除锁。

使用一个看门狗定时器:

  • 对每个工作进程中的一排桌子
  • 工作进程更新该行经常
  • 如果在“最后一次OK”栏列长时间未更新,工作进程已死。
  • 使用SqlServer UST时间,以避免每台机器的时间不同。

有没有其他的选择我没有想过?

您看到上述选项有什么问题?


如果你关心我们的工作进程都写在.NET和Windows服务器上运行。我们不需要能够将解决方案移植到不同的数据库供应商;我们只需要支持Sql Server 2005和2008

+0

我们这样做,就像一个魅力。你认为事先使用服务器时间的亲,我们了解到,只有在冬季转换后;) – Andomar 2010-11-02 14:55:49

+0

@Andomar,你有问题的客户改变SqlServer的时间? – 2010-11-02 15:01:20

+0

Kerberos要求活动目录域中的所有计算机具有UTC的相同想法。只要你在SQL中使用'getutcdate()',我不会指望任何问题。 – Andomar 2010-11-02 15:07:32

回答

0

我们这样做,就像一个魅力。我们知道,只有在冬季转换之后,才会知道您需要使用服务器时间的亲;)

Kerberos要求活动目录域中的所有计算机具有UTC的相同想法。只要你在SQL中使用getutcdate(),我不会指望任何问题。

相关问题