Apache Pulsar于2018年9月正式成為Apache頂級(jí)項(xiàng)目趁俊,ApachePulsar是一個(gè)企業(yè)級(jí)的發(fā)布訂閱(pub-sub)消息系統(tǒng)域仇,最初由Yahoo開發(fā),并于2016年底開源怔软。Pulsar在Yahoo的生產(chǎn)環(huán)境運(yùn)行了三年多垦细,助力Yahoo的主要應(yīng)用,如Yahoo Mail挡逼、Yahoo Finance括改、Yahoo Sports、Flickr挚瘟、Gemini廣告平臺(tái)和Yahoo分布式鍵值存儲(chǔ)系統(tǒng)Sherpa叹谁。自孵化之日起,其在開源社區(qū)就備受關(guān)注乘盖,社區(qū)的開發(fā)者一起合力往Pulsar里面貢獻(xiàn)了大量的企業(yè)級(jí)特性。這些貢獻(xiàn)將Pulsar從最初的一個(gè)消息系統(tǒng)演化成集消息憔涉、存儲(chǔ)和函數(shù)式輕量化計(jì)算的流數(shù)據(jù)平臺(tái)订框。 Apache Pulsar,相對(duì)其他傳統(tǒng)消息中間件系統(tǒng)兜叨,有著根本性的不同穿扳。這些不同可以囊括為以下幾點(diǎn):
在消息模型和 API 層面上,Pulsar 基于日志這個(gè)存儲(chǔ)抽象国旷,統(tǒng)一了消息隊(duì)列(Queue)和流處理(Streaming)這兩種經(jīng)典的消息中間件應(yīng)用場(chǎng)景矛物。用戶只需要使用一套系統(tǒng),通過不同的訂閱(Subscription)模式跪但,即可支持不同的應(yīng)用場(chǎng)景履羞,從根本上打通了應(yīng)用和服務(wù)之間的數(shù)據(jù)孤島,從而實(shí)現(xiàn)真正意義上的數(shù)據(jù)”中臺(tái)“。
圖1:Apache Pulsar對(duì)訂閱模式的抽象
在架構(gòu)層面上忆首,Pulsar 使用了最前沿的將計(jì)算和存儲(chǔ)相互分離的思路爱榔,將傳統(tǒng)的消息中繼(Broker)和消息存儲(chǔ)(Storage)分開,從而將原有的消息中繼(Broker)變成一層無(wú)狀態(tài)化的服務(wù)層糙及。將 Broker 變成無(wú)狀態(tài)化之后详幽,Broker 和存儲(chǔ)可以相互獨(dú)立擴(kuò)展,同時(shí) Broker 的失效恢復(fù)可以在極短的時(shí)間內(nèi)完成浸锨,從而大大提高了服務(wù)的可用性唇聘。而且這種分層架構(gòu)也讓 Pulsar 可以很容易部署在 Kubernetes 這樣的容器編排環(huán)境里面,最高效地使用云原生的基礎(chǔ)架構(gòu)柱搜。
圖2:Apache Pulsar分層架構(gòu)
在存儲(chǔ)層面上迟郎,Pulsar 使用 Apache Bookkeeper 作為其日志存儲(chǔ)系統(tǒng),將存儲(chǔ)粒度從傳統(tǒng)的分區(qū)粒度冯凹,拉低到了分片(Segment)粒度谎亩。一旦存儲(chǔ)粒度被細(xì)分之后,分區(qū)不再是物理綁定的了宇姚。分區(qū)更多的是邏輯層面上的概念匈庭,一個(gè)分區(qū)可以被切分成細(xì)粒度的分片,均勻打散到整個(gè)集群中浑劳;從而極大程度上最大化了數(shù)據(jù)放置的可能性阱持,也降低了進(jìn)行集群擴(kuò)容、故障恢復(fù)等操作帶來(lái)的復(fù)雜性魔熏。Tiered Storage特性可以將歷史數(shù)據(jù)存儲(chǔ)在更廉價(jià)的存儲(chǔ)設(shè)備上(阿里云OSS, AWS S3等)衷咽,保證了熱數(shù)據(jù)的性能的前提下大大降低了企業(yè)存儲(chǔ)歷史數(shù)據(jù)的成本。
圖3:Apache Pulsar 基于Segment的分片存儲(chǔ)
圖4:Apache Pulsar Tiered Storage的歷史數(shù)據(jù)搬遷
智聯(lián)招聘在2018年初就計(jì)劃打造自己的平臺(tái)級(jí)事件中心蒜绽,實(shí)現(xiàn)事件的統(tǒng)一管理及存儲(chǔ)镶骗。在這之前智聯(lián)招聘使用RabbitMQ + Kafka等產(chǎn)品來(lái)支撐智聯(lián)招聘消息系統(tǒng)以流式處理、批處理的支持躲雅,RabbitMQ主要支持在線業(yè)務(wù)的消息投遞鼎姊,Kafka主要應(yīng)用在流式處理、批處理相赁、日志處理等場(chǎng)景相寇。在應(yīng)用的過程中我們遇到了一些痛點(diǎn):
兩種產(chǎn)品帶來(lái)的高維護(hù)成本
兩套系統(tǒng)數(shù)據(jù)的一致性問題
數(shù)據(jù)存儲(chǔ)分散且透明度不足
打造平臺(tái)級(jí)的事件中心已經(jīng)迫在眉睫,在經(jīng)過大量的技術(shù)調(diào)研工作之后, Apache Pulsar的分層抽象钮科、存儲(chǔ)設(shè)計(jì)以及多租戶唤衫、多訂閱模式等特性吸引了我們。在經(jīng)過充分的學(xué)習(xí)以及和Apache Pulsar團(tuán)隊(duì)核心人員溝通之后绵脯,最終技術(shù)選型也很圓滿的告一段落佳励,Apache Pulsar成為了我們打造平臺(tái)級(jí)事件中心的首選休里。
多租戶的特性為平臺(tái)級(jí)事件中心提供了更好的事件管理方案,我們可以利用多租戶特性做用戶的資源隔離植兰、權(quán)限控制等份帐。可以通過維護(hù)一套平臺(tái)級(jí)的服務(wù)來(lái)為智聯(lián)招聘的全業(yè)務(wù)線服務(wù)楣导,這大大的降低了運(yùn)維的成本废境。接入方可以在事件平臺(tái)申請(qǐng)自己的命名空間,這些都是對(duì)用戶透明的筒繁,用戶不用在為維護(hù)工作擔(dān)憂噩凹。
圖5:Apache Pulsar 多租戶Topic 管理
Queue模式和Streaming模式的統(tǒng)一可以很好的支持在線業(yè)務(wù)工作隊(duì)列需求以及流式處理、批處理的需求毡咏,事件的發(fā)送方只需要生產(chǎn)一份數(shù)據(jù)就可以供多個(gè)業(yè)務(wù)方驮宴、多種工作方式使用,不用在為數(shù)據(jù)的一致性擔(dān)憂呕缭,顯著的降低了系統(tǒng)的開銷以及數(shù)據(jù)的核對(duì)工作堵泽。
圖6:Apache Pulsar Queue模式與Streaming模式的統(tǒng)一
Retention機(jī)制可以很好的匹配事件回溯的需求,我們可以根據(jù)不同事件的重要程度或者在時(shí)間上的價(jià)值來(lái)評(píng)估Retention的策略恢总,可以同時(shí)限制時(shí)間以及大小的策略在實(shí)際的應(yīng)用場(chǎng)景也是非常的方便迎罗。
圖7:Apache Pulsar 對(duì)消息保留以及消息過期的處理機(jī)制
Apache Pulsar自帶的企業(yè)級(jí)特性跨機(jī)房復(fù)制也是可以非常好的為事件中心提供數(shù)據(jù)容災(zāi)能力的保證,我們可以通過這個(gè)特性將重要的事件保存在多個(gè)機(jī)房來(lái)提供數(shù)據(jù)的容災(zāi)能力片仿。
TieredStorage特性為事件的冷數(shù)據(jù)存儲(chǔ)提供了很好的支持纹安,我們可以將那些需要長(zhǎng)期保存的數(shù)據(jù)Offload至二級(jí)存儲(chǔ),比如阿里云的OSS砂豌,AWS S3等產(chǎn)品上厢岂。這可以大大降低冷數(shù)據(jù)的存儲(chǔ)成本而不會(huì)影響熱數(shù)據(jù)的性能,熱數(shù)據(jù)我們都會(huì)使用雙SSD來(lái)做Bookkeeper的Journal和Leger的存儲(chǔ)阳距,更好的保證了事件的寫入和讀取性能塔粒。
在這些特性之上,智聯(lián)招聘通過對(duì)事件定義的嚴(yán)格控制以及配合Pulsar的Shema特性筐摘,可以做到在整個(gè)平臺(tái)級(jí)的事件中心事件對(duì)用戶透明性窗怒。用戶可以在事件中心上查找平臺(tái)上已經(jīng)有的事件以及事件是如何定義的,平臺(tái)也對(duì)事件的變更做出了明確的要求蓄拣。這對(duì)數(shù)據(jù)產(chǎn)品也是非常有意義的。
平臺(tái)級(jí)的事件中心可以為在線業(yè)務(wù)努隙、流式計(jì)算球恤、批處理甚至人工智能方向提供很好的基礎(chǔ)能力支持,也是智聯(lián)招聘2018年平臺(tái)級(jí)的重要項(xiàng)目之一荸镊。在2018年8月份項(xiàng)目已經(jīng)正式落地咽斧,逐步已經(jīng)有業(yè)務(wù)方開始接入堪置,截止目前事件中心每日提供5億次事件投遞服務(wù),預(yù)計(jì)11月低接入量提升至20億日均事件投遞量张惹。
智聯(lián)招聘也在持續(xù)的為Apache Pulsar貢獻(xiàn)新的特性比如Dead Letter Topic舀锨,Client Interceptors等很好的特性也會(huì)隨著2.2.0版本的發(fā)布來(lái)服務(wù)Pulsar的用戶。我們也在計(jì)劃貢獻(xiàn)Delay Messages等更多好的特性為社區(qū)服務(wù)宛逗,同時(shí)感謝streamlio在此過程中貢獻(xiàn)的支持坎匿。