2010-11-02 161 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(),我不會指望任何問題。