2012-02-21 60 views
5

我有一個具有4份多層應用架構:什麼是最輕的溶液到創建與狀態的多進程架構跨越所有進程共享

  • 一種網絡服務器/客戶端層
  • 中間數據層處理過程之間的相互作用
  • 甲監控層
  • 的實例的n個由客戶端層

客戶端/服務器層:

的客戶機/服務器層處理與另一臺計算機異步網絡通信使用自定義的第2層協議來實現。由於通信中內置了設計約束,它需要保持獨立,並能夠異步地輪詢/推送數據到數據層。

中間層:

中間層使用數據庫目前實現。一個表格包含所有可以被調用的標籤(大約120,000)。第二個表包含第一個表的中間緩存,其中只包含正在使用的值,這需要不斷更新並在請求新的項目集合時進行刷新。第三個表是發送收集更新的地方,只有在請求未決時才包含數據。

的監控層:

監視器層是一個多線程應用的單片。它根據連接的監視器數量生成n個客戶端實例。它管理所有客戶端實例之間的全局狀態,因爲它們中的一個或多個可能共享相似/相同的狀態。它創建所需值的唯一列表,在客戶端需要不同標籤集時管理髮送更新請求,並管理重複更新。

顯然,這並不理想。如果有一個實例出現故障,它可以將其餘部分放下。我想要做的是刪除中間層,將其替換爲監視器層,並將所有內容作爲監視器進程的子進程產生,以便在出現錯誤時可以隨時重新生成(例如,comms心跳停止,客戶端崩潰等)。

該數據庫看起來太重,並且不夠專門處理IPC(進程間通信)。該程序是在極端的時間限制下編寫的,因此利用數據庫是'簡單的解決方案',並期望它在未來會發生變化。我對Google Chrome's multi-process architecture的穩健性很感興趣,但我對他們如何將所有進程聯繫在一起(管道,tcp,?)知之甚少。

所以:

  1. 我能想到使用IPC在數據庫中的中間層顯著的性能提升?

  2. 什麼形式的IPC在Windows系統上理想?

  3. 是否有跨平臺(閱讀Linux)替代解決方案可用,如果開發被轉移到單聲道可以使用它的地方?

  4. 我在哪裏可以找到資源/示例來幫助開始?

注:據我瞭解,這個系統的架構顯得過於複雜,但它的存在作爲一個前端,一個更大的系統。此應用程序也是關鍵任務,因此穩定性勝過效率。

更新:

我忘了最初的問題就更不用說了。數據庫數據/索引在啓動時直接從ramdisk加載。數據庫本身已被編入索引以獲得最佳性能。需要頻繁寫入的表或值不會編入索引,但其餘數據是。

我正在尋找一種替代措施,因爲db的優化已經到了極限,我認爲還有很大的改進空間。

我會盡快上傳一些架構圖,只要我有一些時間來繪製它們。

+0

如果你有一個圖表可能會有幫助嗎? – 2012-02-21 10:08:15

+0

@MylesMcDonnell我會在繪製完成後立即添加一個。我在那個區域有點生鏽,所以可能需要一段時間。 – 2012-02-29 11:50:01

回答

4
  1. 是的。數據庫很可能涉及硬盤驅動器,而硬盤驅動器是任何計算機中速度最慢的部分,因此切換使用硬盤驅動器可能會帶來性能上的好處。

  2. 我會去zeromq/zmq。它是一種支持多種通信模式的面向消息的框架。例如PUB/SUB或REQ/REP等。更多示例here

  3. zmq是跨平臺,它的速度驚人。

  4. Some C# examples on github

+0

我忘了提及,數據庫是從一個ramdisk運行的。 – 2012-02-21 20:59:09

+0

+1非常有趣。這是我第一次聽說過ZMQ。看起來很像套接字編程,但更簡單,更強大。我需要一些時間來閱讀更多內容,但它絕對看起來像一個可行的選擇。 – 2012-02-21 21:08:23

0

我會考慮尋找到一個基於角色模型的解決方案,如Akka.NET

相關問題