【问题标题】:Scaling an hosted ASP.NET application缩放托管的 ASP.NET 应用程序
【发布时间】:2011-04-06 13:47:49
【问题描述】:

我们目前正在完成一个基于 ASP.NET 和 WCF 的基于 Web 的时间跟踪软件(适用于不同的桌面客户端)。我们的客户可以注册一个帐户并将无限数量的用户添加到他们的帐户中。定价与公司帐户中的活跃用户数量相关。

为了使事情保持简单和易于扩展,我们认为如果我们将每个帐户设计为作为具有自己的应用程序池、SQL-Server 数据库和子域的单个 IIS 网站运行,这将是一个很好的架构决策。

不幸的是,我们很快就遇到了内存短缺,因为单个工作进程将消耗至少 150mb,这意味着对于每个单个试用帐户,我们需要大约 150mb 内存。 200mb 以上的内存...

除了这种架构的高昂成本(试用帐户!)之外,我们不确定以这种方式设计架构是否是一个好的扩展决定。

  1. 你会如何设计这样的 SAAS 应用程序?
  2. 多个网站的单一应用程序池?
  3. 多个帐户共享数据库的单一网站?
  4. 垂直扩展(更多功能)优于水平扩展(更多服务器)?
  5. 有没有关于这个主题的好书或博客?

谢谢!

【问题讨论】:

  • 查看codeproject.com/KB/aspnet/ProdArch.aspx。它涵盖了处理 SaaS 正常运行时间的想法,并包含一些通用架构讨论。
  • 客户与账户的比例是多少?我可能理解按客户细分,但这并不能消除您的问题。您是否考虑过只为每个生产客户提供一个“试用”池?
  • 1 个帐户 - 1 个客户 1 个帐户/客户 - N 个用户 将所有试用帐户放入一个应用程序池中实际上可能是保持低内存消耗的重要解决方案。另一方面,它提高了整个系统的复杂性,并且还需要一个额外的工具,它会在试用激活时自动创建一个新的应用程序池......

标签: asp.net iis scalability scaling


【解决方案1】:

为每个帐户创建新站点和应用程序池的原因是什么?

具有共享数据库的单个站点(列表中的第 3 位)是一种更简单的解决方案,可以更好地扩展。然后,您可以在需要时扩大 Web 或数据库服务器的数量。这种架构用于例如Sharepoint 和大多数公共网站。

【讨论】:

  • 我认为为每个帐户拥有一个单独的网站将是为每个帐户(使用 IIS-host-headers)执行单独的子域之类的唯一方法,并且还可以更轻松地扩展,因为我可以添加新的客户只需在新的网络服务器上,而我只需要更改其子域的 DNS 设置...即使使用一个 IIS 网站和应用程序池,我也可以进行子域分离吗?
  • 绝对。我开发了几个不同的公共网站,我们根据主机名显示不同的市场(国家和语言组合)。在构建多语言 umbraco 网站时也很常见。正如我之前所说; Sharepoint(可以很好地扩展)也可以做到这一点。
  • @dlang - 由租户/客户端水平分割的单个数据库并非没有问题。例如,版本控制是有问题的。您必须一次更新所有人。如果您有不想向所有人推出的新功能,或者您只想更新少数客户而不是其他客户,您会怎么做。此外,向外扩展要困难得多。如果要将某些客户端移动到不同的数据库服务器,则必须手动划分它们的数据。最后,您必须格外小心,以确保每个表都按租户分段,否则您可能会向某人显示错误的客户数据。
  • 非常感谢您的发言!我将研究 Umbracos 实现如何使单个网站能够根据主机名处理不同的内容,还将尝试找到一种解决方案,如何在仅使用一个 IIS 网站的情况下保持数据库分离......
  • @Thomas - 只要我们谈论的是单个 Web 应用程序,我就看不到共享数据库的问题。更新数据库时,通常也会更新应用程序。但我同意您确保不会在客户之间“泄露”信息,这发生在瑞典的一家在线 ERP 公司以及媒体的巨大恶意。
猜你喜欢
  • 2011-05-31
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多