2013-02-22 16 views
1

背景:MVC應用程序有100 +交易/秒,需要詳細的實時報告。.net mvc分層應用程序與觀察者vs msmq vs web服務

問題:針對事務性數據庫的報告意味着複雜的報告邏輯+緩慢的報告加載時間。大報告會對交易流程產生負面影響。將數據定期提取到非歸一化立方體違反了實時報告約束條件

解決方案:狀態更改會同時存在於事務數據庫以及多維數據集中,因爲數據在多維數據集中持久存在時會取消規範化(1-2分鐘等待時間確定)

困境:每層,web,應用程序,事務數據庫和多維數據集都被水平縮放,並存在於不同地理位置的不同農場中。

可能的解決方法:
MSMQ與多播 - 應用服務器上的實體狀態改變發送消息,和事務db和立方體服務接收消息,並且持續存在。優點:成熟的解決方案,缺點:需要大量硬件和/或許可來確保高可用性 - 翻譯:昂貴。

觀察者模式 - 使用.net WCF(ugh ..)讓App服務器調用數據庫服務器訂閱(觀察)的更改事件。優點:沒有額外的硬件,缺點:WCF。

REST Web服務 - 使用.net webclient發佈到事務性數據庫和多維數據集,而不是發送消息或調用事件。優點:超級簡單實施,缺點:需要IIS安裝在數據庫端的某處,以便應用服務器發佈到。

問題1:我對可能的分辨率的假設是否正確?

回答

0

經過大量的研究,CQRS很適合作爲解決方案。 就所有移動部件之間的通信而言,我不得不在企業服務總線(ESB)http://en.wikipedia.org/wiki/Enterprise_service_bus上詳細閱讀。在.net世界中,nservicebus似乎很受歡迎,但不是免費的,公共交通是免費的,但我在建立和運行樣本時遇到了麻煩。 T.T

由大衆交通落後,他們的球員之一通訊網絡VS服務的一個很好的概述:http://blip.tv/ineta-live/event-driven-architecture-by-chris-patterson-north-dallas-net-ug-on-02-03-2010-3193457

的ESB使用MSMQ來實現觀察者模式。投入一點網絡服務,然後這意味着所有的分辨率基本上都被使用,但我會利用開源組件。