本篇文章為大家展示了Apache Pulsar 三大跨地域復(fù)制的解決方案是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
目前創(chuàng)新互聯(lián)建站已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計、巨鹿網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
需求意義
在 Geo-Replication 的設(shè)計支撐下,其一,我們可以比較容易的將服務(wù)分散到多個機(jī)房;其二,可以應(yīng)對機(jī)房級別的故障,即在一個機(jī)房不可用的情況下,服務(wù)可以轉(zhuǎn)接到其它的機(jī)房來繼續(xù)對外提供服務(wù)。
摘要
Apache Pulsar 內(nèi)置了多集群跨地域復(fù)制的功能,GEO-Repliaaction 是指把分散在不同物理地域的集群通過一定的配置方式讓其能在集群之間進(jìn)行數(shù)據(jù)的相互復(fù)制。
根據(jù)消息是否為異步讀寫的維度,跨地域復(fù)制可以分為如下兩種方案:
異步模式:如果對數(shù)據(jù)的容災(zāi)級別不是那么高,可以采用異步跨城部署模式,例如有兩個獨(dú)立的數(shù)據(jù)中心上海和多倫多,寫入上海的消息會異步再寫一份到多倫多,優(yōu)點不影響主流程性能,不足多一份存儲開銷。
下面我們討論的是異步模式下,pulsar 的跨地域復(fù)制方案。
Pulsar 目前支持以下三種異步跨地域復(fù)制的方案:
從是否具有 configurationStoreServers (global zookeeper)的角度可以分為以下兩種異步跨地域復(fù)制方案:
2. 沒有 configurationStoreServers
Failover 模式
在整個跨地域復(fù)制中的一個核心理念在于,各個集群之間的數(shù)據(jù)是否能夠互通,它們之間的交互主要依靠如下配置信息:
在初始化 pulsar cluster 時,用戶可以指定上述對應(yīng)的信息,示例如下:
bin/pulsar initialize-cluster-metadata \ --cluster pulsar-cluster-1 \ --zookeeper zk1.us-west.example.com:2181 \ --configuration-store zk1.us-west.example.com:2181 \ --web-service-url http://pulsar.us-west.example.com:8080 \ --web-service-url-tls https://pulsar.us-west.example.com:8443 \ --broker-service-url pulsar://pulsar.us-west.example.com:6650 \ --broker-service-url-tls pulsar+ssl://pulsar.us-west.example.com:6651
Full-mesh(全連通)
Full-mesh 的形式允許數(shù)據(jù)在多個集群中共享,如下圖:
概念解析
namespace:當(dāng)前創(chuàng)建的 namespace 允許在哪幾個集群之間進(jìn)行數(shù)據(jù)的復(fù)制 (–clusters)
原理
對于多個集群之間的數(shù)據(jù)復(fù)制,我們均可以簡化到兩個集群之間的數(shù)據(jù)復(fù)制,基于這個理念,Geo-Replication 的原理如下圖所示:
當(dāng)前擁有兩個集群,分別部署在北京和上海,當(dāng)用戶在北京的集群中使用 producer 發(fā)送數(shù)據(jù)時,首先會發(fā)送到北京機(jī)房的本地集群中(topic1)與此同時會去創(chuàng)建一個 replication cursor,用于專門復(fù)制數(shù)據(jù)的一個游標(biāo),通過這個 cursor 信息,你可以判斷當(dāng)前數(shù)據(jù)究竟復(fù)制到哪一個階段。同時會去創(chuàng)建 replication producer,它會把數(shù)據(jù)從北京機(jī)房的 topic1 中讀取數(shù)據(jù),然后將數(shù)據(jù)寫到上海機(jī)房的 topic1 中,上海機(jī)房的 broker 收到 producer 的請求之后,會寫到本地相同的 topic 中來(topic1)。此時如果上海機(jī)房的用戶開啟 consumer 去消費(fèi)數(shù)據(jù)的話,會接收到由北京機(jī)房 producer 生產(chǎn)的數(shù)據(jù)信息。反之亦然。
在這里需要說明如下問題:
復(fù)制的延遲取決于兩個機(jī)房之間網(wǎng)絡(luò)的時延,如果時延比較大,需要考慮兩個機(jī)房之間的網(wǎng)絡(luò)情況。
一旦配置了 global zookeeper 之后,數(shù)據(jù)之間的復(fù)制都是雙向復(fù)制的,所有 global zookeeper 下面掛載的集群之間的數(shù)據(jù)都是互通的。
單向復(fù)制
上面我們提到,在配置了 global zookeeper 的情況下,是沒有辦法做數(shù)據(jù)的單向復(fù)制的,但是很多場景下,我們并不需要所有的集群之間的數(shù)據(jù)都是全連通的,這種場景下,我們就可以考慮使用單向復(fù)制的功能,需要強(qiáng)調(diào)的是,單向復(fù)制并不需要用戶單獨(dú)配置或指定 configurationStoreServers,配置時只需要將 configurationStoreServers 的值配置為本地集群的 zookeeper 地址(zookeeperServers)即可。
那么在不配置 global zookeeper 的情況下,如何去做跨集群復(fù)制的場景呢?
在上面我們提到,global zookeeper 的作用主要是用來存儲多個集群的地址信息以及相應(yīng)的 namespace 信息,并沒有額外的元數(shù)據(jù)信息。所以在單向復(fù)制的場景下,你需要告訴其它機(jī)房的集群,你需要讀到不同集群之間的 namespace 信息。
Failover 模式
Failover 模式是單向復(fù)制的特例。
Failover 模式下,遠(yuǎn)端機(jī)房的集群只是用來做數(shù)據(jù)的備份,并不會有 producer 和 consumer 的存在,只有當(dāng)當(dāng)前處于 active 的集群宕機(jī)之后,才會把對應(yīng)的 producer 和 consumer 切換到對應(yīng)的 standby 集群中來繼續(xù)消費(fèi)。因為有 replication sub 的存在,所以會一同將訂閱的狀態(tài)也復(fù)制到備份機(jī)房。
目前 pulsar Geo-Replication
存在的問題
當(dāng)使用 cursor snapshot 后,會產(chǎn)生一些緩存,影響到后續(xù)涉及 backlog 的計算結(jié)果。
上述內(nèi)容就是Apache Pulsar 三大跨地域復(fù)制的解決方案是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。