【问题标题】:How do you build a scalable infrastucture for a family of related but separate websites?您如何为一系列相关但独立的网站构建可扩展的基础架构?
【发布时间】:2011-05-12 10:11:54
【问题描述】:

所以,我的公司正在讨论建立一个服务于许多不同客户的电子商务平台。每个客户端都有不同的外观和感觉,有自己的一组用户,但支持代码(即:管理服务、身份验证服务器、结帐服务、可能的管理页面等)和一些用户是共享的,所以错误修复可以同时应用于所有网站,主管理员可以登录所有网站。

由于整个 StackExchange 网站集(具有相当高的流量)运行少量服务器(我相信两个),我想知道通过一个 web 应用程序提供许多不相关(但相似)的网站会涉及什么,甚至一个数据库。

为了拥有一个数据库,我想每个表都会有列标识实体属于哪个领域,并且每个 SQL 调用都会按该列进行过滤。这似乎将成为维护的噩梦,并且(对我来说不太重要)DBA 的地狱。

另一种选择,有一个 web 应用程序,但有多个数据库,我想这个领域可以绑定到一个特定的数据源,在那里可以指定所有非共享数据。然后,当发出任何请求时,可以加载适当的数据源,并且 webapp 将像只有单一源一样运行。这将具有易于水平扩展的额外好处,因为可以在必要时生成完全相同的 web 应用程序,但可以生成一组不同的领域和数据源。只需复制 web 应用程序并移动数据库,网站也可以轻松移动到新服务器。

我想知道还有哪些其他可能性,以及是否有具体示例。

注意:我不是在谈论 Twitter 规模的可扩展性,也不是在谈论硬件/语言/等,而是在谈论设计方法和模式。

【问题讨论】:

    标签: scalability infrastructure


    【解决方案1】:

    您所说的架构称为“多租户”架构。有差异。构建多租户应用程序的方法。从广义上讲,可以通过 3 种方式构建数据层:

    1. 为每个客户端单独的数据库 - 更容易编码,差异。维护
    2. 一个数据库,不同的架构
    3. 一个数据库,一个架构(每个表中都有 clientid;元数据表除外)- 编码时间更长,更易于维护

    每个都有自己的优点/缺点。请查看 Microsoft 关于多租户的这篇文章。 http://msdn.microsoft.com/en-us/library/aa479086.aspx

    一般来说,我建议使用选项 3,因为它提供了真正的多租户。如果您有一些您希望变得非常大的表,您可以根据 clientid 对该表进行分区(例如:如果您想要 10 个分区,您可以根据 clientid 的 mod 进行分区)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2021-05-31
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多