2010-11-19 25 views
2

因此,我的公司正在讨论构建一个电子商务平台,该平台将服务于许多不同的客户。每个客户端都会有不同的外观和感觉,以及它自己的一组用户,但是支持代码(即:管理服务,认证服务器,结帐服务,可能管理页面等)以及一些用户将被共享,所以错误修复可以同时应用于所有网站,主管理员可以登录到所有网站。由于整个StackExchange网站集合(流量相当高)运行少量服务器(我相信两个),我想知道它将涉及通过一个webapp为多个不相关(但相似)的网站提供服务,或者甚至一个数据库。如何为一个相关但独立的网站系列构建可扩展的基础架构?

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

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

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

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

回答

0

您正在讨论的架构被称为“多租户”架构。有差异。构建多租户应用程序的方法。一般来说,数据层可以通过3种方式构建:

  1. 为每个客户端分隔数据库 - 更容易编码,比较。保持
  2. 一个数据库中,不同的模式
  3. 一个数据库,一个模式(每个表的clientid;除了元数据表) - 在编码更多的时间,更易于维护

各有其自己的优点/缺点。看看微软关于多租户的这篇文章。 http://msdn.microsoft.com/en-us/library/aa479086.aspx

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