2010-09-01 112 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