2011-06-02 48 views
0

當前環境 我們使用的是使用WCF回調的發佈者/訂閱者模型。我們在單個Web服務器上的IIS中託管了WCF服務。任何客戶端可以通過調用服務方法訂購/退訂,我們保存/分別與字典即客戶端ID刪除回調地址,帶負載平衡的WCF回叫地址字典

PrivateShared _currentSubscribers作爲新詞典(USHORT,ICallbackService)()

字典是靜態成員並在整個Web應用程序中使用(內存不持久)

新環境 我們正在將我們的網站轉移到新服務器上。我們將有兩臺託管該服務的服務器與負載均衡器之間。

現在我們需要弄清楚我們將如何維護可在兩臺服務器上使用的用戶列表。當然,在這種情況下我們不能在內存字典中使用相同的內容。 我們正在尋找可以在服務器之間共享詞典的任何方法。

我們已經嘗試在數據庫中保存,但不能在其他服務器上序列化或使用。

我們花了一些時間在搜索上,但沒有找到任何解決方案,我們可以在服務器之間共享回調地址。

有人可以指導我們如何實現這一目標嗎?或者我們可以使用的其他選項?

我會非常感謝你的幫助。等待你的迴應。

回答

1

您不能在服務器之間共享該回調字典。每個服務器都必須有自己的字典來維護自己的客戶端,因此您必須使用會話關聯(粘性會話)的負載平衡算法。該算法會將來自單個客戶端的所有請求轉發到同一臺服務器。

2

解決方案的關鍵可能在客戶端。

請看,無論如何,你的客戶應該知道你的連接可以在任何時候被切斷。因此,如果它處理了這個問題,並且可以自動從中恢復,那麼連接到N個服務器或1臺服務器的場就沒有問題,因爲它根本不知道區別。

因此,您不需要將客戶端連接到兩個(即「全部」)服務器,它只需要維護與其中一個服務器的連接。這當然意味着,由於人們使用負載平衡來平衡負載而不是簡單地提供冗餘,所以您運行一臺機器服務於多於一半活動連接的機會。

但是,您的客戶也不知道這一點。因此,如果沒有別的辦法,服務器可以每隔一段時間切斷一根電纜,以便使客戶端(可能)從一臺服務器跳到另一臺服務器,並不斷擴展負載。無論如何,你的客戶應該能夠靈活地斷開連接,而且它不會知道其中的差別。