簡體   English   中英

實現只讀/只讀數據庫服務器體系結構

[英]Implement read only / write only database server architecture

我們有一個ASP.NET MVC3 Web應用程序,其中包括以下內容:

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

為了提高性能,建議我們對以下內容實施架構:

  • Web服務器群集(網站+數據訪問服務)
    • 它具有循環負載均衡
    • 該集群中的每個服務器都有一個Cache (只讀)數據庫
    • 我們有一組SP,可以將它們明確地分為兩類- 讀取SP寫入SP
    • 每個Read SP將連接到緩存DB ,每個Write SP將連接到Write DB
  • 具有復制/鏡像的數據庫服務器
    • 這是Write DB
    • 每當更改時,它會將所有更改傳播到所有緩存數據庫
    • 除此之外,它還實現了復制/鏡像,因此在發生故障時具有備份。

這是一個很粗糙的主意,我不確定它是否會提高我們的系統性能。

支持該參數的情況是80% ,這些操作是只讀的。 它們可以在高速緩存DB上創建 (由於將它們配置為只讀,因此它們速度更快)。 其他20%可以在Write DBs上進行

但是,我有以下問題:

  • 只讀配置 :我們可以實際將緩存數據庫配置為只讀嗎? 由於Write DB將需要在更改時將更改推送到它們。
  • 同步 :由於網絡上的所有這些復雜性,確保所有內容都同步是多么容易? 網絡等待時間 :如何使網絡開銷保持同步?
  • 復雜性和維護 :真的值得增加維護費用和增加系統復雜性嗎?

好的設計,類似於我曾經討論過的關於如何創建每個人都可以添加但無法更新或刪除的審計數據庫的討論。

如果狀態設置為只讀,則無法更改數據庫,因此您無法利用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 DB將允許所有用戶進行寫入(甚至可能不允許讀取?),而Cache DB僅允許用戶具有讀取特權,而特定的服務帳戶則具有write特權。

可以使用SQL Server集成服務(SSIS)在Write DB和Cache DB之間進行內容同步,並且我認為設計傳輸邏輯並不難。 將兩台服務器都放在同一建築物中,並且它們之間具有千兆位網絡,這意味着您的傳輸延遲會很短。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM