發(fā)布-訂閱的復制模式
這種模式使得發(fā)布服務(wù)器也是訂閱服務(wù)器,如圖3所示。

圖3.發(fā)布-訂閱復制模式
這種模式適用于服務(wù)器A和服務(wù)器B的網(wǎng)絡(luò)非常昂貴但服務(wù)器B和各個訂閱服務(wù)器的網(wǎng)絡(luò)成本很低的情況。比如,公司的總部在北京,服務(wù)器A在北京,服務(wù)器B是上海分公司的,各個訂閱服務(wù)器通過局域網(wǎng)和服務(wù)器B進行連接。在這個例子中,服務(wù)器A和服務(wù)器B通過VPN進行連接,這個費用是相當昂貴的,而服務(wù)器B和各個訂閱服務(wù)器通過局域網(wǎng)連接的成本可以忽略。
以訂閱服務(wù)器為中心的復制模式
這種模式以訂閱服務(wù)器為中心,如圖4所示。

圖4.以訂閱服務(wù)器為中心復制模式
這種模式適用的場景比如:各個區(qū)域?qū)⒏髯缘臉I(yè)務(wù)數(shù)據(jù)匯總到總部這種類型的業(yè)務(wù)場景。
多個發(fā)布服務(wù)器和多個訂閱服務(wù)器的復制模式
這種模式適用于數(shù)據(jù)對等的環(huán)境,一個簡化的版本如圖5所示。

圖5.多個發(fā)布服務(wù)器和多個訂閱服務(wù)器 簡介
本篇文章根據(jù)發(fā)布服務(wù)器,分發(fā)服務(wù)器和訂閱服務(wù)器的組織方式和復制類型來講述常用復制的幾種模式。
模式的選擇
選擇復制的模式取決于多個方面。首先需要考慮具體的業(yè)務(wù)需求,在此之后還需要考慮硬件和網(wǎng)絡(luò)的限制。對于業(yè)務(wù)需求來說考慮的角度可以分為兩個部分:自治和延時。自治是指”數(shù)據(jù)不被影響的程度”,比如說一個業(yè)務(wù)場景:公司的總部在北京,發(fā)布服務(wù)器和分發(fā)服務(wù)器全在總部,各個地區(qū)的分部有訂閱服務(wù)器,使用快照復制來接收推送訂閱總部每個月一次的公司員工通訊錄。在這個業(yè)務(wù)場景中,訂閱服務(wù)器僅僅是接收發(fā)布服務(wù)器發(fā)布的通訊錄信息,對于這些信息的修改是不會回傳給總部服務(wù)器的,這個業(yè)務(wù)場景的自治程度就是非常低的。而對于延時來說,就是”在發(fā)布服務(wù)器上的數(shù)據(jù)修改應(yīng)用到訂閱服務(wù)器上的時間”,比如還是上面那個例子,每次訂閱服務(wù)器的訂閱周期是一個月,在此期間總部的通訊錄可能經(jīng)過了多次修改,但一個月以后才會同步到訂閱服務(wù)器,那么這種場景的延時是非常高的。
其次就是硬件和網(wǎng)絡(luò)的限制,比如將發(fā)布服務(wù)器和分發(fā)服務(wù)器設(shè)置在一臺服務(wù)器上,在現(xiàn)有的情況下CPU是否能夠承受這些負擔?或是使用快照復制,發(fā)布服務(wù)器和訂閱服務(wù)器之間的網(wǎng)絡(luò)寬帶是否能夠承受在一定發(fā)布周期內(nèi)的數(shù)據(jù)量傳輸?
在簡單了解了模式選擇的標準后,下面我們來看常用的幾種復制模式。
以發(fā)布服務(wù)器為中心的復制模式
這種模式多個訂閱服務(wù)器以一個發(fā)布服務(wù)器為中心進行訂閱,如圖1所示。

圖1.多個訂閱服務(wù)器以發(fā)布服務(wù)器為中心的模式
這種模式也是復制模式中最簡單的模式,這種模式可以使用快照發(fā)布和事務(wù)發(fā)布。不難看出,這種情景的自治性是比較低的,因此這種模式適用于以下幾種業(yè)務(wù)場景。
● 訂閱服務(wù)器用于報表生成.
● 發(fā)布服務(wù)器用來發(fā)布類似前文所說的員工通訊錄,產(chǎn)品資料等主(Master)信息
● 使用事務(wù)發(fā)布,使得訂閱服務(wù)器承擔部分負載
● 在發(fā)布服務(wù)器Down了以后,作為緊急備用服務(wù)器
當然,這種模式的缺陷也是顯而易見的。
● 首先是發(fā)布服務(wù)器和分發(fā)服務(wù)器在同一臺服務(wù)器上對CPU和內(nèi)存的消耗服務(wù)器硬件是否能夠承受是一個問題
● 在OLTP環(huán)境中如果每天要修改的數(shù)據(jù)量過大,比如超過10%,那么需要傳送到的訂閱服務(wù)器的數(shù)據(jù)量過大也是不得不考慮的一個問題
以發(fā)布服務(wù)器和分發(fā)服務(wù)器為中心的復制模式
這種模式其實和上一種模式區(qū)別不大,只是分離了發(fā)布服務(wù)器和分發(fā)服務(wù)器,如圖2所示。

圖2.以發(fā)布服務(wù)器和分發(fā)服務(wù)器為中心的復制模式
這種模式是將分發(fā)任務(wù)對CPU,內(nèi)存和網(wǎng)絡(luò)帶來的負載轉(zhuǎn)移到另一臺分發(fā)服務(wù)器了。從而減輕發(fā)布服務(wù)器的壓力和支持更多的訂閱服務(wù)器。此外,我們知道一個分發(fā)服務(wù)器支持多個發(fā)布服務(wù)器的,因此也可以多個發(fā)布服務(wù)器使用一個分發(fā)服務(wù)器。
這種模式還有一個好處是可以將分發(fā)服務(wù)器放到DMZ區(qū)域和訂閱服務(wù)器連接以避免發(fā)布服務(wù)器直接暴漏在外網(wǎng)。
當然了,這種模式最重要的一點是發(fā)布服務(wù)器和分發(fā)服務(wù)器一定要有可靠的網(wǎng)絡(luò)連接,這種模式和圖1提到的第一種模式適用的業(yè)務(wù)場景基本一致。
這種模式非常適合業(yè)務(wù)數(shù)據(jù)對等的環(huán)境,比如說這類業(yè)務(wù)場景,一個銷售公司在同一個城市有3個分店,這三個分店之間是對等的,它們之間通過復制來同步庫存。使得每個店都可以了解其它分店的庫存情況。這類業(yè)務(wù)場景適合使用多個發(fā)布服務(wù)器和多個訂閱服務(wù)器的復制模式。
具有可更新訂閱的事務(wù)發(fā)布模式
這種模式非常類似圖1中所說的模式,但這種模式允許訂閱服務(wù)器更新數(shù)據(jù)。如圖6所示。

圖6.具有可更新訂閱事務(wù)的發(fā)布模式
在這種模式下,比如訂閱服務(wù)器B更新了數(shù)據(jù),這個數(shù)據(jù)會傳送回發(fā)布服務(wù)器,如果發(fā)布服務(wù)器接收了這個數(shù)據(jù),那么這個數(shù)據(jù)會同時同步到其它訂閱服務(wù)器。
合并發(fā)布模式
合并發(fā)布模式適用于所有服務(wù)器共享一部分數(shù)據(jù)的場景,如圖7所示。

圖7.合并發(fā)布模式
這種模式下,每個服務(wù)器并不是互相訂閱,而是互相共享。這種模式同樣適用于圖5所述的業(yè)務(wù)模式。
總結(jié)
本文講述了復制的幾種模式以及它們的所適用的一些場景,很多更復雜的復制模式大多都是對以上幾種模式的組合或者拓展。理解上述簡單的復制模式是理解復雜復制模式的基礎(chǔ)。