2010-11-19 24 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進行分區)