我有一個完全用C#編寫的高性能系統(當然,我認爲,但還沒有100%),我認爲在設計時我犯了一些大的架構錯誤。原因是它不容易擴展。性能和可伸縮性的體系結構問題
雖然它目前工作得很好,但我想確保它可以水平擴展以增加預計在幾個月後可能發生的數量。
該系統有大量的數據併發連接進入系統,最終在處理後進入數據庫。我們目前每分鐘獲得約300條記錄/連接。
系統是這樣構建的。
- 整個系統託管在一個雙贏2003服務器8 GB RAM/4在亞馬遜vCPU的紅外 ,其獲取數據,並把成MSMQ
- 處理器,用於數據和插入到
- C#套接字服務器sql server 2008數據庫表。即使在清除定期數據之後,其中一張主表也有大約3 GB的數據。這具有正確的索引,而且即使是遠程位置,當前的報告也足夠快。然後
- 該處理的數據發佈到MQ,然後將其用於將產生一定的警示規則處理
- 還有一些其他的相關方案除了上述
現在主要擔心的是有關的可擴展性(3)中的處理器以及Sql server 2008的可伸縮性。隨着併發連接的大小隨着sql server數據的增加而增加,這會使我的生活更加艱難。
我想出了2種選擇。考慮到目前的系統完全建立在微軟技術基礎之上,其中之一是後端處理器的主要替代品。
對於所有選項,對於主要的最大表格,使用postgresql/pgpool III負載平衡(流複製)解決方案進行存儲。其他表&架構仍將保留在SQL 2008.這給我一個成本效益的數據庫存儲解決方案。
選項1: - 與JBOSS & HornetQ的 替換MSMQ - 將所述數據處理器在步驟3到一個容器管理在JBOSS EJB容器,這將給我用於負載平衡和集羣選項「消息驅動豆」。
- 此選項將需要我我的解決方案的重要組成部分遷移到Unix/Linux操作系統(正在考慮的Fedora)
選項2: - 和ActiveMQ的隊列替換MSMQ(羣集和負載平衡) - 編寫一個Java應用程序將處理隊列消息並照顧數據庫持久性。
該選項將允許我通過activemq集羣實例和java應用程序的新實例來增加Linux服務器的數量。
方案3: - 和ActiveMQ的隊列(羣集和負載平衡)更換MSMQ - 只使用當前數據處理器(有一些小的變化將數據推到PostgreSQL) 此選項將迫使我仍然與Windows
請注意,該系統是一個實時系統。如果系統具有99%的故障證明就足夠了。這不是一個交易系統,所以我可以負擔少量的數據丟失。
不知道我是否已經清楚地解釋了我想要的內容。但我歡迎任何問題,因爲他們肯定會幫助我更好地解釋它。
請提供寶貴的建議,爲長期解決方案做出正確的選擇。我實際上反對選項3,但不想再次將其排除在列表之外。
MUTHU
新增澄清:
道歉沒有說清楚。 1.問題實際上是關於體系結構的可伸縮性。特別是橫向可伸縮性。 2.目前的平均負荷約爲每分鐘300次,這可能不會在一分鐘內完全分散。 3.在接下來的8-12個月內,負載可能會擴大到10倍。
問題是,我們在一個月內銷售了大約50臺設備,現在銷售團隊過快增長。我相信這可能會很快加倍。
Sql服務器有大約8 GB的數據,我們限制每個設備的存儲量,這有助於減小尺寸。目前最大的表格被劃分爲每200個設備1個分區,並且查詢是合理的。但是我可以看到Sql方面的瓶頸和可擴展性。
因此,即使將Sql服務器放在另一臺服務器上,也會限制我在sql server上可以同時執行的更新數量。我看不到具有Sql服務器負載平衡的水平可伸縮性選項(儘管它支持具有羣集的高可用性選項)。我在理解負載均衡中的MS Sql嗎?
「現在主要擔心的是步驟(3)中處理器的可伸縮性以及Sql server 2008的可伸縮性。」 - 3GB的數據不多。毫無疑問,SQL Server 2008的擴展性比我們可以編寫的任何東西都要好! – 2011-01-09 06:45:12