2012-08-30 37 views
1

我們有它由下面的ASP.NET MVC3 Web應用程序:實現只讀/只寫數據庫服務器架構

  • 網站(MVC3)
  • 數據訪問服務(WCF + EF)
  • 數據庫服務器(SQL Server 2008 R2中)

我們建議實施的架構下面的性能優勢:

  • Web服務器集羣(網站+數據訪問服務)
    • 循環負載均衡
    • 每個服務器在此集羣都有一個緩存(只讀)數據庫
    • 我們有一組SP我們可以清楚地分爲兩類 - 閱讀SP寫入SP
    • 每個讀取SP將連接到緩存DB每個寫SP將連接到寫DB
  • 數據庫服務器(S)與複製/鏡像
    • 這是寫DB
    • 每當它改變,它propogates 所有的變化所有緩存數據塊
    • 除此之外,它有複製/鏡像實現的,因此具有備份時,它的股價下跌。

這是非常粗略的想法,我不知道它會給我們的系統性能提升。

贊成它的論點是80%的時代,操作是隻讀的。他們可以在高速緩存DB(因爲配置爲只讀,它們更快)。其他20%可以在寫數據庫

不過,我有以下問題:

  • 只讀配置:我們能不能配置緩存的DB到只讀?由於寫DB將需要推動改變,只要它改變。
  • 同步:所有這些複雜的網絡,確保一切都是同步的是多麼容易? 網絡延遲:以及如何使網絡開銷保持同步?
  • 複雜性與維護:是否真的值得增加維護費用和增加系統的複雜性?

回答

0

不錯的設計,它與我曾經討論過的有關如何創建審計數據庫的討論類似,每個人都可以添加但不能更新或刪除。

如果狀態設置爲只讀狀態,則無法更改數據庫,因此無法利用SQL Server中的該功能。我認爲只讀數據庫的真正優勢在於,您可以在執行查詢時忽略鎖定,並且可以創建專用索引,並知道沒有任何更改。根據http://sqlblog.com/blogs/linchi_shea/archive/2007/10/01/performance-impact-setting-a-database-to-read-only.aspx(對於SQL 2005),將其設置爲只讀的增益並不那麼大。

如果您願意犧牲一定的一致性,您可以將查詢的隔離級別降低到讀提交,以便生成更少的鎖。

創建兩個數據庫的一個優點是它使您能夠跨不同數據庫服務器分離數據庫。這將使您能夠保證即使CacheDb服務器具有100%的CPU負載和網絡負載,Write操作也能成功。

我認爲寫入數據庫將允許所有用戶寫入(甚至可能禁止讀取?),而高速緩存數據庫只會授予用戶讀取權限,特定服務帳戶具有寫入權限。

寫數據庫和高速緩存數據庫之間的內容同步可以使用SQL Server集成服務(SSIS)來完成,我認爲設計傳輸邏輯並不那麼困難。如果兩臺服務器位於同一棟建築物中,並且它們之間有千兆網絡,則意味着您在傳輸中的延遲時間會很短。