我有一個具有4份多層應用架構:什麼是最輕的溶液到創建與狀態的多進程架構跨越所有進程共享
- 一種網絡服務器/客戶端層
- 中間數據層處理過程之間的相互作用
- 甲監控層
- 的實例的n個由客戶端層
客戶端/服務器層:
的客戶機/服務器層處理與另一臺計算機異步網絡通信使用自定義的第2層協議來實現。由於通信中內置了設計約束,它需要保持獨立,並能夠異步地輪詢/推送數據到數據層。
中間層:
中間層使用數據庫目前實現。一個表格包含所有可以被調用的標籤(大約120,000)。第二個表包含第一個表的中間緩存,其中只包含正在使用的值,這需要不斷更新並在請求新的項目集合時進行刷新。第三個表是發送收集更新的地方,只有在請求未決時才包含數據。
的監控層:
監視器層是一個多線程應用的單片。它根據連接的監視器數量生成n個客戶端實例。它管理所有客戶端實例之間的全局狀態,因爲它們中的一個或多個可能共享相似/相同的狀態。它創建所需值的唯一列表,在客戶端需要不同標籤集時管理髮送更新請求,並管理重複更新。
顯然,這並不理想。如果有一個實例出現故障,它可以將其餘部分放下。我想要做的是刪除中間層,將其替換爲監視器層,並將所有內容作爲監視器進程的子進程產生,以便在出現錯誤時可以隨時重新生成(例如,comms心跳停止,客戶端崩潰等)。
該數據庫看起來太重,並且不夠專門處理IPC(進程間通信)。該程序是在極端的時間限制下編寫的,因此利用數據庫是'簡單的解決方案',並期望它在未來會發生變化。我對Google Chrome's multi-process architecture的穩健性很感興趣,但我對他們如何將所有進程聯繫在一起(管道,tcp,?)知之甚少。
所以:
我能想到使用IPC在數據庫中的中間層顯著的性能提升?
什麼形式的IPC在Windows系統上理想?
是否有跨平臺(閱讀Linux)替代解決方案可用,如果開發被轉移到單聲道可以使用它的地方?
我在哪裏可以找到資源/示例來幫助開始?
注:據我瞭解,這個系統的架構顯得過於複雜,但它的存在作爲一個前端,一個更大的系統。此應用程序也是關鍵任務,因此穩定性勝過效率。
更新:
我忘了最初的問題就更不用說了。數據庫數據/索引在啓動時直接從ramdisk加載。數據庫本身已被編入索引以獲得最佳性能。需要頻繁寫入的表或值不會編入索引,但其餘數據是。
我正在尋找一種替代措施,因爲db的優化已經到了極限,我認爲還有很大的改進空間。
我會盡快上傳一些架構圖,只要我有一些時間來繪製它們。
如果你有一個圖表可能會有幫助嗎? – 2012-02-21 10:08:15
@MylesMcDonnell我會在繪製完成後立即添加一個。我在那個區域有點生鏽,所以可能需要一段時間。 – 2012-02-29 11:50:01