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