2010-09-01 133 views
2

我們正在完成基於ASP.NET和WCF(適用於不同桌面客戶端)的基於Web的時間跟蹤軟件。我們的客戶可以註冊一個賬戶,並將無限數量的用戶添加到他們的賬戶中。定價與公司帳戶中活躍用戶的數量相關聯。擴展託管的ASP.NET應用程序

爲了使事情簡單易行,我們認爲如果我們將每個帳戶設計爲具有自己的應用程序池,SQL-Server數據庫和子域的單個IIS網站,那麼這將是一個很好的體系結構決策。

不幸的是我們很快遇到內存不足,由於單個工人進程將消耗至少150MB,這意味着,每審單賬戶需要約。 200MB以上內存...

除了這種架構的沉重成本(試行賬戶!),我們不知道它是不是縮放一個很好的決定,設計的建築。

  1. 您將如何設計這樣的 SAAS應用程序?
  2. 許多網站的單一應用程序池?
  3. 單一網站的許多帳戶共享數據庫?
  4. 垂直縮放(更多功率)水平縮放(更多服務器)?
  5. 任何有關此主題的好書籍或博客?

謝謝!

+0

查看http://www.codeproject.com/KB/aspnet/ProdArch.aspx。它涵蓋了處理SaaS正常運行時間的想法,幷包含一些通用的架構演講。 – Jemes 2010-09-01 01:17:07

+0

客戶與賬戶的比例是多少?我可能瞭解客戶分段,但這並不能消除您的問題。你是否考慮過每個生產客戶的「試用」池,也許是一個池? – 2010-09-01 13:48:55

+0

1帳戶 - 1個客戶 1個帳戶/客戶 - N個用戶 把所有的試用賬戶到一個應用程序池可能INFACT是相當大的解決方案,以保持內存消耗低。另一方面,它提高了整個系統的複雜性,還需要一個額外的工具,它會自動創建一個試用版激活的新應用程序池... – 2010-09-01 16:31:04

回答

1

爲每個帳戶創建新網站和應用程序池的原因是什麼?

具有共享數據庫(列表中的數字3)的單個站點是一個更容易擴展得更好的解決方案。然後,您可以在需要時擴大Web或數據庫服務器的數量。這種結構用於例如Sharepoint和大多數公共網站。

+0

我認爲爲每個帳戶設置一個單獨的網站將是唯一的方法像每個帳戶的獨立子域名(使用IIS主機頭),並且也將更容易擴展,因爲我可以將新客戶簡單地放在新的網絡服務器上,而我只需要更改其子域的DNS設置... 即使使用一個IIS網站和應用程序池,我可以做子域分離嗎? – 2010-09-01 16:36:26

+0

絕對如此。我開發了幾個不同的公共網站,根據主機名顯示不同的市場(國家和語言組合)。建立多語言umbraco網站時也很常見。正如我前面所說; Sharepoint(可以很好地縮放)也可以。 – 2010-09-01 16:49:04

+0

@dlang - 由租戶/客戶端水平分割的單個數據庫並非沒有問題。例如,版本控制是有問題的。您必須立即更新所有人。如果您擁有不想推出給所有人的新功能,或者只想更新少數客戶而不更新其他功能,您會做什麼。而且,擴展要困難得多。如果您想將某些客戶端移動到其他數據庫服務器,則必須手動分離其數據。最後,您必須格外小心,以確保租戶按表分段,否則您有可能向某人顯示錯誤的客戶數據。 – Thomas 2010-09-02 03:38:53