需要協調的事情交給我
SQL Server 2005中增加了一個全新的組成——Service Broker,它主要提供了一個以異步方式操作與協調各方的平臺,其本身提供了擴展性、安全性、事務性的很多支持。以往為了完成類似的平臺支持,很多企業需要購買價格不菲的第三方中間件產品,Service Broker提供了跨越進程、應用、服務器甚至是網絡的分布式處理能力。通過Service Broker的異步處理能力可以減少交互過程的用戶等待時間,提高整體業務應用的吞吐率,盡管它的處理方式是異步,但是所有的操作是基于一個可信的消息通道完成的,對于每個功能單元內部的處理異常也有很多強力措施保證。
Service Broker的主要技術優勢如下:
(1)進一步增強SQL Server 2005集成應用的性能
(2)簡化SQL Server管理
(3)簡化協作性消息的處理
(4)提供更為松散的應用架構
(5)通過消息鎖機制保證多個應用實例可以處理同一隊列的消息
(6)自動的根據消息處理數量激活處理實例
Service Broker的技術架構
Service Broker由三類組件組成,如下說明。
會話組件(Conversation components):主要完成運行過程中的消息交換。
服務定義組件(Service definition objects):主要在設計態定義消息類型、會話交換流程和應用相關信息的數據庫存儲。
路由和安全控制類組件(Routing and security components):主要用來定義和支持消息交換的外部運行環境。
從外層看,筆者認為Service Broker是微軟花了大力氣在.Net和SQL Server平臺上開發的具有Message Queuing支持的COM+服務,他把很多以往通過“Request-Response”方式很難完成或者完成成本很高的處理承擔下來。
消息的交換
圖1:兩個Service間的會話過程
對于開發人員而言,整個會話過程可以視為在一個非??煽康南⑼ǖ纼冉粨Q消息,而這個可信通道的建立則是按照非常類似TCP協議的方式,其中也增加了一個Timer進行生命期的管理。商業應用中往往需要對發送的消息提供回執,因此日后讀者如果需要開發這種具有業務連貫性動作的應用,則可以完全依賴Service Broker內置建立的這種可信通道完成。出于效率、安全性等多方面考慮,Service在處理本地調用與跨Instance調用的時候,采用的是不同的方式:本地調用時,需求服務與響應服務共同使用同一個隊列,不同Instance時需求服務需要通過雙方各自的隊列與響應服務進行交互。
圖2:不同的Service Broker響應方式
“東西交給了我,您放心”
在SQL Server 2000中管理員已經能夠通過多種方式完成保證數據可用性:用復制來創建一個數據庫克隆、通過Archive Log重建數據庫、備份和恢復。
微軟在SQL Server 2005又引入了一個新的機制,它可以實現自動的錯誤恢復,同時允許將一個SQL Server中的數據庫內容鏡像到另一個SQL Server,同時它還提供了故障過程中通過鏡像快速進行錯誤恢復的支持。數據庫鏡像是將數據庫處理從一個SQL Server數據庫移動到不同SQL Server環境中的另一個SQL Server數據庫中。鏡像的拷貝是一個備用的拷貝,不能直接訪問,只用在SQL Server錯誤的情況用于恢復。
Mirroring工作機制
要進行數據庫鏡像所需的最小需求包括了兩個不同的SQL Server運行環境——Principal Server 和 Mirror Server。Principal數據庫就是實際使用的數據庫,Mirror數據庫是數據庫的備用拷貝。當事務寫入你的Principal服務器的時候,它們也同樣被傳送到并寫入Mirror數據庫中。
除了Principal Server和Mirror Server之外,還可以引入另一個可選的組件——Partners。Partners數據庫是第三個SQL Server 2005運行實例,它在判斷什么時候進行錯誤恢復,用于Principal Server和Mirror Server之間內部交流。有了Partners就可以實現的自動的錯誤處理。
Mirroring主要可以采用如下三種方式工作。
高可用:這個操作模式選項允許在兩臺服務器上同步事務寫入,并支持自動錯誤恢復。要使用這個選項,你必須還要使用一個Partners服務器。
高數據保護:這個選項可以在兩臺服務器上同步事務寫入,但是錯誤恢復是手工的。因為自動的錯誤恢復不是這個選項的一部分,所以也不會用到Partners服務器。
高性能:這個選項不關心兩臺服務器上的寫入是否是同步的,因此在性能上有所提高。當使用這個選項的時候,你只能假設鏡像服務器上的所有事情都是成功完成。這個選項只允許手工的錯誤恢復,因此不會用到Partners服務器。
但是,筆者一般建議對于企業的敏感數據可以考慮采用高數據保護方式,尤其是那些對于企業業務控制比較關鍵的參數數據,雖然修改頻率和數據量都不大,但是一旦丟失對業務的影響很大;對于生產OLTP業務數據還是考慮采用高可用的方式。當然具體如何使用最后還要基于業務代價計算后決定。
原文轉自:http://www.anti-gravitydesign.com