您如何为一系列相关但独立的网站构建可扩展的基础架构?

时间:2010-11-19 02:55:19

标签: scalability infrastructure

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

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

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

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

我想知道其他可能性是什么,以及具体的例子,如果他们在那里。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 每个客户端的单独数据库 - 更容易编码,差异。维持
  2. 一个数据库,不同架构
  3. 一个数据库,一个模式(每个表中包含clientid;除了元数据表) - 编码时间更长,更易于维护
  4. 每个都有自己的优点/缺点。请看微软关于多租户的这篇文章。 http://msdn.microsoft.com/en-us/library/aa479086.aspx

    从广义上讲,我会建议选项3,因为它提供真正的多租户。如果你有一些你希望变得非常大的表,你可以根据clientid对该表进行分区(例如:如果你想要10个分区,你可以根据clientid模式进行分区)