【问题标题】:SaaS: one web app to one database VS. many web apps to many databasesSaaS:一个 Web 应用到一个数据库 VS。许多网络应用程序到许多数据库
【发布时间】:2011-10-26 10:37:01
【问题描述】:

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

  1. 域将指向一个唯一的 Web 应用程序,这将改变 连接字符串到正确的客户端数据库,具体取决于 领域。 (也就是说,我只需要部署一个 Web 应用程序。)
  2. 域将指向它们自己的 Web 应用程序,这实际上是 为每个客户端复制相同的 Web 应用程序,但使用适当的 连接到客户端数据库的字符串。 (也就是说,我需要 部署许多网络应用。)

这适用于将在 IIS 7.0 上运行的 ASP.NET 4.0 MVC 3.0 Web 应用程序。它会相当小,但我确实需要可扩展。我应该选择 1 还是 2?

【问题讨论】:

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


    【解决方案1】:

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

    1. 分离的数据库。每个应用程序实例都有自己的数据库实例。更简单,但从数据库基础架构的角度来看可能难以管理。
    2. 分离架构。每个应用程序实例共享一个数据库,但通过模式进行分区。需要更多的编码工作,并缓解完全独立架构的一些挑战,但如果您需要单独的站点备份/恢复和类似的事情,仍然会遇到困难。
    3. 共享架构。您的应用负责根据应用实例对数据进行分区。这需要最多的工作,但在数据管理方面最为灵活。

    就您的应用如何处理它而言,数据库设计可能会决定这一点。我过去做过共享数据库和共享模式。在分离数据库方法中,我通常也会分离应用程序实例。在共享模式方法中,它是同一个应用程序,具有根据登录名和/或主机名修改可用数据的逻辑。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 嗨@DGDev - 非常感谢您的洞察力,由于提供的链接,我将接受以下答案。再次感谢。
      • 当然……我因为不记得那个链接而自责。大约一年前,我们公司有过这样的讨论,我偶然发现了那篇 MSDN 文章。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多