SaaS:一个Web应用程序到一个数据库VS.许多数据库的许多Web应用程序

时间:2011-08-13 14:55:39

标签: asp.net asp.net-mvc-3 saas

我计划开发一个相当小的SaaS服务。每个业务客户端都有一个关联的数据库(客户端数据库中的模式相同,数据不同)。此外,他们将有一个指向Web应用程序的唯一域,在这里我看到这两个选项:

  1. 域名将指向一个独特的网络应用程序,它将改变 连接字符串到适当的客户端数据库取决于 域。 (也就是说,我只需要部署一个Web应用程序。)
  2. 域名将指向他们自己的网络应用程序,这真的是 为每个客户复制相同的Web应用程序,但使用正确的 连接字符串到客户端的数据库。 (也就是说,我需要 部署许多网络应用程序。)
  3. 这适用于将在IIS 7.0上运行的ASP.NET 4.0 MVC 3.0 Web应用程序。它会相当小,但我确实要求可扩展。我应该选择1还是2?

2 个答案:

答案 0 :(得分:2)

This MSDN article是一个很好的资源,详细介绍了三种模式的优点:

  1. 分隔数据库。每个应用实例都有自己的数据库实例。从数据库基础架构的角度来看,更容易管理,但很难管理。
  2. 分离的架构。每个应用程序实例共享一个数据库,但是通过模式进行分区。需要更多的编码工作,并减轻完全独立架构的一些挑战,但如果您需要单独的站点备份/恢复等等,仍然会遇到困难。
  3. 共享架构。您的应用负责根据应用实例对数据进行分区。这需要最多的工作,但在数据管理方面最灵活。
  4. 就您的应用处理方式而言,数据库设计可能会确定这一点。我过去做过共享数据库和共享模式。在分离的DB方法中,我通常也会分离应用程序实例。在共享模式方法中,它是具有逻辑的相同应用程序,用于根据登录名和/或主机名修改可用的数据。

答案 1 :(得分:1)

我不确定这是你正在寻找的答案,但还有第三种选择:

使用多租户数据库设计。一个支持所有客户端的数据库。您的表将包含复合主键。

在您需要时扩展。如果您的服务很小,除了有保证的数据安全性之外,我不会看到任何多个数据库的好处 - 这意味着,您只会为正确的客户端带回查询结果。如果您计划使用云服务托管,则运行多个数据库的成本会高得多。

如果SalesForce可以使用多租户设计托管他们的SaaS,我至少会认为这是小型服务的可行选择。