2009-03-04 41 views
2

注意:這不適用於單元測試或集成測試。這適用於應用程序運行時。在使用之前應該測試一個外部系統嗎?

我有連通到多個後端系統的系統,它可分爲三種類型

  • 關係數據庫
  • SOAP或WCF服務
  • 文件系統(網絡共享)
  • 上工作

由於環境會運行,所以不能保證在運行時可以使用這些環境中的任何一個。事實上,它們中的一些看起來非常脆弱,並且每天都會下降多次:(

思想是在實際代碼之前運行一小段測試代碼,如果出現問題,請繼續執行請求並輪詢直到目標系統可用爲止,可以在代碼中重新運行測試,以檢查它在邏輯點仍然可用。最終目標是建立一個非常穩定的系統,而不管系統的穩定性(或缺乏)它傳達

我解決此設計問題是:

  1. 與它有重大問題(小THI?像這樣的事實,它可能會在測試完成和代碼運行之間失敗)
  2. 是否有更好的方法來實現這種設計?
  3. 會使用傳統的異常處理和/或事務更好嗎?

更新

  • 系統需要交談的後端系統以協調的方式。
  • 該系統本質上是非常異步的,所以使用諸如排隊技術等很好。
  • 即使一個或多個後端系統關閉,系統也必須運行,因爲其他系統可能正在啓動並且可能會處理某些信息。
+0

我遇到這樣的「測試」這個術語是飛行前代碼。 – Morendil 2009-03-04 13:05:33

+0

@Morendil在飛行前代碼上找不到任何東西...但我喜歡這個詞; – 2009-03-05 06:32:01

回答

2

無論如何都需要傳統的異常處理,因爲正如您指出的那樣,在您最後一次檢查和實際請求之間,事情總會失敗。所以我真的認爲你找到的任何解決方案都應該嘗試與此平滑交流。

你不是在說明這些片狀資源是否需要以某種協調的方式進行交互,這可能表明你應該使用某種事務管理器來做到這一點。我不相信你想在大多數需求的應用程序代碼中進入事務管理的腳步。

有時我也看到有人使用AOP將重試邏輯封裝到失敗的後端系統(例如由於超時問題)。謹慎使用這可能是一個體面的解決方案。

在某些情況下,您還可以使用消息隊列技術來緩解不穩定的後端。例如,您可以將消息隊列作爲事務的一部分提交,並且只有在成功時從隊列中彈出。但是,這種設計通常只有在您能夠與異步進程共存時纔有可能。

和往常一樣,real穩定性只能通過攻擊問題的根本原因來實現。我有一個固定在大型機TCP/IP堆棧中的25年bug,因爲我們超過了它,所以它可能是

1

Microsoft Smartclient框架提供了一個ConnectionMonitor類。應該很容易使用或複製。

+0

這不完全是我們目前的想法,因爲我們想在x點做一個測試,而connectionmonitor看起來像就像它會告訴我們的(請糾正我 - 這是我第一次聽說它)。但是我喜歡它,並且正在考慮它可以在其他領域提供幫助的方式。 – 2009-03-05 06:54:06

+0

我看到有一個updatestatus方法,它看起來像它可以滿足我們的需求。這對於像數據庫這樣的不像網絡連接的東西適合多好?並進一步如果數據庫處於可用狀態(權限,表存在等...) – 2009-03-05 07:05:34

0

我們處理這類問題的方法是在啓動我們的主應用程序之前運行一個非常基本的「完整性測試器」。這是個胖客戶端,所以我們可以在每次應用程序啓動時運行測試。這種完整性測試會結束並檢查數據庫可用性和外部網絡(外部網)訪問等事情,並且它可能已擴展到做web服務。

如果發生故障,用戶被告知,並且關鍵的一封電子郵件也被髮送到support/dev團隊。這些電子郵件很快就變得沒有任何意義,因爲正在創建這麼多的電子郵件,但是我們設置了過濾器,所以我們知道什麼時候真的很糟糕。總的來說,這種方法運行得非常好,我們最大的收穫就是能夠告訴用戶在輸入數據之前系統已經關閉,並在漫長的過程中取得了一部分成果。他們絕對喜歡它。

在技術層面上,理智是用C#編寫的,它以傳統的方式使用異常處理來找出它正在尋找的問題。理智程序本身就變成了一個迷你應用程序,它從主應用程序中獨立出來。如果我再次這樣做,我會使用日誌框架來捕捉問題,這比我們的硬編碼方法更靈活。

相關問題