轉自:http://www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=476
在一些大型的網站或者應用中,單台的SQL Server 服務器可能難以支撐非常大的訪問壓力。很多人在這時候,第一個想到的就是一個解決性能問題的利器——負載均衡。遺憾的是,SQL Server 的所有版本,包括2012年3月發布的SQL Server 2012,也未提供該功能。
擴展單台SQL Server 服務器,解決性能瓶頸,有兩種方法:
一、分布式數據庫。擴展和分布數據庫到多台服務器,由多台服務器分布存儲不同的數據,通過將數據和訪問壓力分布到多台服務器來解決性能瓶頸。以一個大型電子商務網站數據庫為例,可以按照業務模塊或功能模塊,將數據分布到多台服務器存儲。這種方法對程序改造難度較大,設計起來較為復雜,本文不作介紹。
二、讀寫分離。讀寫分離是中型規模應用的數據庫系統常見設計方案,通過將數據從主服務器同步到其他SQL Server 服務器,提供非實時的查詢功能,擴展性能並提高並發性。
數據庫的讀寫分離的好處如下:
1.通過將“讀”操作和“寫”操作分離到不同的數據庫服務器上,降低對主服務器的CPU、內存、存儲、網絡資源的爭用;
2.主服務器的增刪改進行時,不影響查詢服務器的查詢,降低阻塞的發生,提高了並發性;
3.在應用程序提交了報表請求、不合理的查詢請求時,不會導致長時間的鎖表;
4.建立容災副本甚至實現異地容災,在發生災難時,可以減少數據的損失;
絕大部分的企業內部應用,可能不需要上圖那么龐大的架構,一台主數據庫服務器和一台查詢服務器通常能滿足讀寫分離的要求。而且應用程序調整起來非常方便:
1.在應用程序的配置文件中設置兩個數據庫連接字符串,一個指向主服務器,一個指向查詢服務器;
2.增刪改或者實時性查詢使用指向主服務器的連接字符串;
3.允許非實時的查詢及報表請求使用指向查詢服務器的連接字符串。
那么主數據庫服務器的數據如何同步到查詢服務器上?同步的間隔又是怎樣的?主服務器發生故障的時候,查詢服務器能否接管用戶的請求呢?有什么技術要求呢?
SQL Server 提供了三種技術,可以用於讀寫分離的實現:日志傳送、事務復制和SQL 2012 中新增的功能Always On 技術。這三種技術的比較如下:
SQL Server 日志傳送示意圖
SQL Server 復制示意圖
SQL Server Always On 示意圖