簡介
本系列文章的上一篇對複製是什麼做了一個概述。本篇文章根據發行伺服器,散發者和訂閱伺服器的組織方式和複製類型來講述常用複製的幾種模式。
模式的選擇
選擇複製的模式取決於多個方面。首先需要考慮具體的業務需求,在此之後還需要考慮硬體和網路的限制。對於業務需求來說考慮的角度可以分為兩個部分:自治和延時。自治是指”資料不被影響的程度”,比如說一個業務情境:公司的總部在北京,發行伺服器和散發者全在總部,各個地區的分部有訂閱伺服器,使用快照式複寫來接收發送訂閱總部每個月一次的公司員工通訊錄。在這個業務情境中,訂閱伺服器僅僅是接收發行伺服器發布的通訊錄資訊,對於這些資訊的修改是不會回傳給總部伺服器的,這個業務情境的自治程度就是非常低的。而對於延時來說,就是”在發行伺服器上的資料修改應用到訂閱伺服器上的時間”,比如還是上面那個例子,每次訂閱伺服器的訂閱周期是一個月,在此期間總部的通訊錄可能經過了多次修改,但一個月以後才會同步到訂閱伺服器,那麼這種情境的延時是非常高的。
其次就是硬體和網路的限制,比如將發行伺服器和散發者設定在一台伺服器上,在現有的情況下CPU是否能夠承受這些負擔?或是使用快照式複寫,發行伺服器和訂閱伺服器之間的網路寬頻是否能夠承受在一定發布周期內的資料量傳輸?
在簡單瞭解了模式選擇的標準後,下面我們來看常用的幾種複製模式。
以發行伺服器為中心的複製模式
這種模式多個訂閱伺服器以一個發行伺服器為中心進行訂閱,1所示。
圖1.多個訂閱伺服器以發行伺服器為中心的模式
這種模式也是複製模式中最簡單的模式,這種模式可以使用快照發布和事務發布。不難看出,這種情景的自治性是比較低的,因此這種模式適用於以下幾種業務情境。
- 訂閱伺服器用於報表產生.
- 發行伺服器用來發布類似前文所說的員工通訊錄,產品資料等主(Master)資訊
- 使用事務發布,使得訂閱伺服器承擔部分負載
- 在發行伺服器Down了以後,作為緊急待命伺服器
當然,這種模式的缺陷也是顯而易見的。
- 首先是發行伺服器和散發者在同一台伺服器上對CPU和記憶體的消耗伺服器硬體是否能夠承受是一個問題
- 在OLTP環境中如果每天要修改的資料量過大,比如超過10%,那麼需要傳送到的訂閱伺服器的資料量過大也是不得不考慮的一個問題
以發行伺服器和散發者為中心的複製模式
這種模式其實和上一種模式區別不大,只是分離了發行伺服器和散發者,2所示。
圖2.以發行伺服器和散發者為中心的複製模式
這種模式是將分發任務對CPU,記憶體和網路帶來的負載轉移到另一台散發者了。從而減輕發行伺服器的壓力和支援更多的訂閱伺服器。此外,我們知道一個散發者支援多個發行伺服器的,因此也可以多個發行伺服器使用一個散發者。
這種模式還有一個好處是可以將散發者放到DMZ地區和訂閱伺服器串連以避免發行伺服器直接暴漏在外網。
當然了,這種模式最重要的一點是發行伺服器和散發者一定要有可靠的網路連接,這種模式和圖1提到的第一種模式適用的業務情境基本一致。
發布-訂閱的複製模式
這種模式使得發行伺服器也是訂閱伺服器,3所示。
圖3.發布-訂閱複製模式
這種模式適用於伺服器A和伺服器B的網路非常昂貴但伺服器B和各個訂閱伺服器的網路成本很低的情況。比如,公司的總部在北京,伺服器A在北京,伺服器B是上海分公司的,各個訂閱伺服器通過區域網路和伺服器B進行串連。在這個例子中,伺服器A和伺服器B通過VPN進行串連,這個費用是相當昂貴的,而伺服器B和各個訂閱伺服器通過區域網路串連的成本可以忽略。
以訂閱伺服器為中心的複製模式
這種模式以訂閱伺服器為中心,4所示。
圖4.以訂閱伺服器為中心複製模式
這種模式適用的情境比如:各個地區將各自的業務資料匯總到總部這種類型的業務情境。
多個發行伺服器和多個訂閱伺服器的複製模式
這種模式適用於資料對等的環境,一個簡化的版本5所示。
圖5.多個發行伺服器和多個訂閱伺服器
這種模式非常適合業務資料對等的環境,比如說這類業務情境,一個銷售公司在同一個城市有3個分店,這三個分店之間是對等的,它們之間通過複製來同步庫存。使得每個店都可以瞭解其它分店的庫存情況。這類業務情境適合使用多個發行伺服器和多個訂閱伺服器的複製模式。
具有可更新訂閱的事務發布模式
這種模式非常類似圖1中所說的模式,但這種模式允許訂閱伺服器更新資料。6所示。
圖6.具有可更新訂閱事務的發布模式
在這種模式下,比如訂閱伺服器B更新了資料,這個資料會傳送回傳布伺服器,如果發行伺服器接收了這個資料,那麼這個資料會同時同步到其它訂閱伺服器。
合并發布模式
合并發布模式適用於所有伺服器共用一部分資料的情境,7所示。
圖7.合并發布模式
這種模式下,每個伺服器並不是互相訂閱,而是互相共用。這種模式同樣適用於圖5所述的業務模式。
總結
本文講述了複製的幾種模式以及它們的所適用的一些情境,很多更複雜的複製模式大多都是對以上幾種模式的組合或者拓展。理解上述簡單的複製模式是理解複雜複製模式的基礎。