2010-01-12 107 views
4

我們當前的工作項目是一個新的MVC網站,它將使用WCF服務,主要通過Web服務訪問第三方帳單系統以及用於用戶個性化的小型SQL數據庫。 WCF服務使用nHibernate作爲SQL數據庫。網絡農場中的nHibernate策略

我們希望實施某種網絡服務器場以實現負載平衡以及故障轉移和維護。如果有多個WCF服務在運行,我正試圖決定處理nHibernate緩存和數據庫併發的最佳方式。

有些場景我一直在想......

1)多IIS服務器,一個服務器WCF。通過這種設置,WCF服務器將成爲單點故障,但nHibernate緩存或數據庫併發將不存在問題。

2)多個IIS服務器,每個服務器都有自己的WCF服務。這消除了單點故障,但是現在,一臺機器上的nHibernate不會知道另一臺機器所做的數據庫更改。

對於數字2的一些解決方案是使用IStatelessSession,所以我們沒有做任何緩存,nHibernate總是直接從數據庫中獲取。這可能是最可行的,因爲我們的個性化數據庫中只有很少的對象。我也在考慮一個二級緩存,比如memcached或者Velocity,但是對於這個系統來說這可能是過度的。

我在這裏看看有沒有人有過這樣的體系結構的經驗,並得到一些解決方案的想法。謝謝!

+0

「但我用nHibernate實現了一個二級查詢緩存,並且它工作得很好。」我可以問哪個二級緩存實施你去了,爲什麼? – 2010-03-20 19:55:07

+0

Memcahced http://memcached.org/ – 2010-03-22 13:53:48

回答

2

我錯過了這裏的東西,我沒有看到與網絡服務器上的nhibernate問題。 應用程序緩存不會成爲問題,因爲每個nhibernate盒都會保留它自己的緩存,該緩存將從數據存儲區填充。看看創建一個可以監視的表格,以便進行緩存刷新。我們曾經使用.net 2.0中的CacheDependency類來完成此操作,該類將檢測對列的更改,然後從緩存中刪除相關項目。所以如果用戶插入新產品,則緩存將被丟棄,下一次獲取產品的調用將再次加載緩存。這是舊的,但檢查:概念的http://msdn.microsoft.com/en-us/magazine/cc163955.aspx#S2。歡呼聲

+1

您的回答促使我在nHibernate中進行一級和二級查詢緩存,多個WCF服務的測試,在詳細控制檯模式下運行SQL Profiler和memcached,進行更多的研發工作。這有助於我更好地理解nHibernate在緩存中的作用,以及我的WCF代碼中的會話管理缺陷。 – 2010-02-19 15:27:12

2

我會建議不要緩存,直到不做緩存成爲一個問題。您的數據庫將自行緩存,以避免您重複搜索相同的數據,因此唯一需要擔心的是數據通過線路傳輸。根據你的描述來判斷,你不會在那裏遇到問題。如果你進入了一個階段,使用分佈式緩存 - 允許你的服務器單獨緩存會導致刷新時彈出數據問題。

+1

這絕對是一個好點。由於我們處理的數據量很小,緩存可能不是必需的,但我使用nHibernate實現了二級查詢緩存,並且它工作得很好。 – 2010-02-19 15:28:42