溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

發(fā)布時(shí)間:2021-12-21 17:42:11 來源:億速云 閱讀:214 作者:柒染 欄目:云計(jì)算

本篇文章為大家展示了跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

導(dǎo)語:下面介紹了如何使用 Pulsar 作為 MQ 部件進(jìn)行應(yīng)用的,希望幫助大家對(duì)于 Pulsar 作為消息中間件的應(yīng)用類型有了更深刻的了解。

01    

騰訊計(jì)費(fèi)介紹

平臺(tái)承載了公司每天數(shù)億收入大盤,為 180+ 個(gè)國家(地區(qū))、萬級(jí)業(yè)務(wù)代碼、100W+ 結(jié)算商戶提供服務(wù),托管賬戶總量 300 多億,是一個(gè)全方位、一站式計(jì)費(fèi)平臺(tái)。

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

作為一個(gè)千億級(jí)在線支付平臺(tái),騰訊計(jì)費(fèi)(米大師)需要在以下方面進(jìn)行重點(diǎn)優(yōu)化和升級(jí)。

1. 數(shù)據(jù)一致性

計(jì)費(fèi)場景要求不能丟掉任何數(shù)據(jù),這是最基本的訴求。畢竟屬于金融資產(chǎn)類,雖然有的是虛擬賬戶,但還是用真金白銀進(jìn)行交易的。通過提取 SQL 來保證數(shù)據(jù)層面高可靠性、高一致性。

2. 流暢性、可用性

平臺(tái)的操作流程跟一些電商平臺(tái)的支付流程有些相似,即加入購物車、下單、發(fā)貨。不同的是,大多數(shù)電商平臺(tái)需要用戶自己手動(dòng)參與這些流程,而騰訊計(jì)費(fèi)則是用戶在后臺(tái)點(diǎn)擊便可自動(dòng)完成。

尤其是對(duì)于一些免付費(fèi)的項(xiàng)目,對(duì)整體可用性會(huì)有更高的要求。需具備容災(zāi)能力,在異常情況下能夠自動(dòng)修復(fù)。

3. 性能層面

在邏輯層面,因?yàn)檎麄€(gè)系統(tǒng)覆蓋 300 多個(gè)不同的業(yè)務(wù)產(chǎn)品,在面臨海量增長的數(shù)據(jù)時(shí),對(duì)性能的穩(wěn)定性就有著極高的需求。

對(duì)于騰訊業(yè)務(wù)的量級(jí)情況,在容災(zāi)的效果期望上至少是城市級(jí)別的。在騰訊內(nèi)部有上萬個(gè)業(yè)務(wù),這些業(yè)務(wù)部署在各地,計(jì)費(fèi)平臺(tái)的服務(wù)基本是部署在深圳和上海兩個(gè)地方。在這里就需要提供「異地多活」的服務(wù)。

當(dāng)然在多數(shù)情況下,我們會(huì)保持在同城部署服務(wù)。在進(jìn)行業(yè)務(wù)請(qǐng)求時(shí),選擇就近的網(wǎng)關(guān),可以減少不必要的情況。當(dāng)然異地情況下,也要保證快速切換的狀態(tài)。

02    

計(jì)費(fèi)場景下的跨城挑戰(zhàn)

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

在容災(zāi)層面,按照地域可以分為「同城多活」和「異地多活」。在邏輯層面,兩種狀態(tài)下都比較容易操作,比較困難地是在數(shù)據(jù)層面。

同城多活狀態(tài)下,在數(shù)據(jù)層會(huì)有多個(gè)副本構(gòu)成,采用跨機(jī)房或 IDC 部署。如果出現(xiàn)問題,可以立即切換到其他機(jī)房/IDC 進(jìn)行部署,達(dá)到無損切換。雖然這種方式操作比較簡單,但是它避免不了跨城市之間、一些極端情況的出現(xiàn)。

異地多活情況下,在部署方面就需要跨城多地進(jìn)行。當(dāng)一個(gè)城市的服務(wù)器宕機(jī)時(shí),另一個(gè)城市可以繼續(xù)支撐產(chǎn)品,來減少損失。

但是想要做到完全無損是非常困難的,除非是每一步操作后都同步到異地并操作成功,才能保證任何時(shí)刻數(shù)據(jù)都是一致的。但是這樣性能方面,效率就大大下降了。

在整體性的表現(xiàn)上,異地多活更適用于騰訊計(jì)費(fèi)的產(chǎn)品模式。

>> 異地單活與異地多活

在之前,騰訊計(jì)費(fèi)采用的是異地單活的模式。當(dāng)時(shí)的業(yè)務(wù)沒有現(xiàn)在這么多元復(fù)雜,大部分請(qǐng)求都在主城市/主數(shù)據(jù)庫完成。對(duì)于數(shù)據(jù)庫的讀取,可以根據(jù)不同產(chǎn)品的不同需求,在主城或備城讀取。

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

這種架構(gòu)的好處是,數(shù)據(jù)是強(qiáng)一致性的,不會(huì)出錯(cuò),因?yàn)樗械臄?shù)據(jù)都是集成在同一地方去寫入。缺點(diǎn)就是一旦出現(xiàn)城市級(jí)網(wǎng)絡(luò)災(zāi)難,就沒有設(shè)備進(jìn)行寫入操作。

隨著騰訊業(yè)務(wù)的擴(kuò)展和豐富,異地多活成為必然的選擇,用來提供高質(zhì)量、高穩(wěn)定的服務(wù)。這就涉及到兩個(gè)數(shù)據(jù)中心的同步問題。

目前業(yè)界主流的是 CDC 異步模式,可以通過消息隊(duì)列來應(yīng)用到消息層面。不僅可以利用 MQ 的海量堆積能力來存放操作流水,還可以利用多消費(fèi)處理能力來支撐數(shù)據(jù)復(fù)制的效率。

對(duì)于 MQ 的部署,同樣也可以采用同城或者跨城的部署。

同城:在 DB 中心單獨(dú)部署一個(gè) MQ 集群。生產(chǎn)時(shí),在同城的 MQ 進(jìn)行,消費(fèi)時(shí),則交叉地進(jìn)行數(shù)據(jù)讀取。這樣做的好處是生產(chǎn)效率高,缺點(diǎn)是消費(fèi)時(shí)需要進(jìn)行跨省訪問,本身不具備「跨省」的能力。

跨城:MQ 采用同城部署,具備跨省能力,能夠進(jìn)一步減少數(shù)據(jù)丟失。缺點(diǎn)是生產(chǎn)配置時(shí),需要進(jìn)行跨城市的數(shù)據(jù)調(diào)用,以及消費(fèi)副本需要綁定在多地。

日常使用中多采用第二種方式,因?yàn)樾枰M可能減少數(shù)據(jù)丟失的風(fēng)險(xiǎn)。

所以騰訊計(jì)費(fèi)系統(tǒng)對(duì)分布式消息隊(duì)列的要求如下:

  • 一致性要求:計(jì)費(fèi)場景要求數(shù)據(jù)一條不能丟,這是最基本的訴求。

  • 高可用要求:需具備容災(zāi)能力,在異常情況下能夠自動(dòng)修復(fù)。

  • 海量存儲(chǔ)需求:在移動(dòng)互聯(lián)網(wǎng)時(shí)代,產(chǎn)生大量的交易數(shù)據(jù),需要具備海量堆積能力。

  • 快速響應(yīng)要求:在億級(jí)支付場景下,要求 MQ 能提供平滑的響應(yīng)時(shí)間,盡可能控制在 10ms 內(nèi)。

03    

Pulsar 跨城能力 

所以在調(diào)研和嘗試后,選擇了 Pulsar 作為騰訊計(jì)費(fèi)平臺(tái)的消息隊(duì)列選擇。
相比業(yè)界使用比較多的 Kafka 而言,它的主要場景是大數(shù)據(jù)日志處理,較少用于金融場景。RocketMQ 對(duì) Topic 運(yùn)營不太友好,特別是不支持按 Topic 刪除失效消息,以及不具備宕機(jī) Failover 能力。

而 Pulsar 具有原生的高一致性,基于 BookKeeper 提供高可用存儲(chǔ)服務(wù),采用了存儲(chǔ)和服務(wù)分離架構(gòu)方便擴(kuò)容,同時(shí)還支持多種消費(fèi)模式和多域部署模式。

在消息復(fù)制層面,Pulsar 提供了兩種復(fù)制方式。一種是跨地域異步復(fù)制,免去了需要額外部署異步復(fù)制的操作。非常適用于騰訊內(nèi)部的一些數(shù)據(jù)統(tǒng)計(jì)場景,尤其是那種跨省甚至跨國場景下的業(yè)務(wù)。

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar  跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

第二種是同步復(fù)制,本身就是跨城市級(jí)別的業(yè)務(wù),副本存儲(chǔ)在多地。Pulsar 的讀寫架構(gòu)模式,我們在之前的   TGIP-CN 系列  中也跟大家講解了許多,大家可以點(diǎn)擊文章開頭部分的「專輯」去查看哦。

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

更多關(guān)于 Pulsar 高效數(shù)據(jù)復(fù)制模式的講解,可以查看視頻回放的   25:00-34:20   時(shí)間段。

04    

騰訊計(jì)費(fèi)在跨城上的優(yōu)化

     

在跨城生產(chǎn)消費(fèi)時(shí),會(huì)存在一個(gè)問題。消費(fèi)是不是一定要去主城拉取消息,因?yàn)樯线吿岬搅艘粋€(gè) topic 控制權(quán)只歸屬在一個(gè) broker 上。

其實(shí)對(duì)于歸屬 broker 的說法只是在「寫」層面,對(duì)于讀取層面則可以采用其他 broker 進(jìn)行操作。為了避免上萬個(gè)消費(fèi)者訂閱同一個(gè) topic,我們可以按照「就近原則」去部署一個(gè)只讀 broker。

跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar

只讀 broker 對(duì)于騰訊計(jì)費(fèi)這種大流水量的平臺(tái)是非常有幫助的。在部署上,跨城之間的存儲(chǔ)是公用的。由 BookKeeper 提供了一些 ledger 層面的存儲(chǔ)對(duì)象,可以創(chuàng)造只讀類的數(shù)據(jù)。

這里就涉及到兩個(gè)問題:

1. 如何知道要讀取哪些數(shù)據(jù)?  

因?yàn)橹蛔x broker 和 broker 是采用隔離部署的,需要去把 topic 元數(shù)據(jù)從寫入的 broker 上同步過來,這樣就知道 topic 對(duì)應(yīng)的 ledger 集合有哪些,就可以分辨數(shù)據(jù)讀取了。

2. 如何讀取最近的數(shù)據(jù)?

Topic 是由一組有序的 ledger 流組成的,每組只有一個(gè) ledger 是處于 open 狀態(tài),其余均為關(guān)閉狀態(tài)并無法進(jìn)行改變。

如果只讀 broker 在讀取關(guān)閉狀態(tài)的 ledger,可以輕松進(jìn)行。如果讀取 open 狀態(tài)的 ledger,需要通過 LastConfirm id 來確認(rèn)是否有新的消息。

消息正確讀取后,就需要解決消費(fèi)者偏移量同步的問題。如果不考慮消息刪除的問題,則可以不用設(shè)置。

因?yàn)樵?Pulsar 系統(tǒng)內(nèi),消息消費(fèi)完后默認(rèn)是會(huì)被刪除的,同時(shí)沒有消費(fèi)者的也會(huì)被刪除。這樣生產(chǎn)集群只負(fù)責(zé)生產(chǎn),沒有消費(fèi)。

這樣在切分 ledger 時(shí),可能會(huì)把之前未消費(fèi)的 ledger 刪除。這樣只需要把只讀的消費(fèi)者偏移量同步到要寫的 broker 上。這就是一個(gè)完整的只讀 broker 設(shè)計(jì)思路。

上述內(nèi)容就是跨城實(shí)踐中,騰訊如何應(yīng)用 Apache Pulsar,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI