導讀:在傳統訊息系統中,存在一些問題。一方面,訊息的儲存和服務一般是緊耦合的,節點的擴容和運維不便,特別是在需要多備份來保證高可用性的場景。另一方面,訊息的消費樣式被固定,在企業內部需要維護多套系統來保證不同的訊息消費場景。另外訊息系統中,多租戶,多機房互備等企業級的特性和功能也不太豐富。
Apache Pulsar採用了分層的架構,解決了儲存計算的耦合,同時提供了很好的擴充套件性和可維護性。Pulsar也透過訂閱層的抽象,提供了統一的訊息消費模型。特別是在Pulsar的設計之初,就註重對多租戶,多機房互備等方面的需求,提供了眾多完備的企業級的特性。
Apache Pulsar從2015年初在Yahoo全球近十個機房內部大規模部署,穩定服務了Yahoo內部郵箱,金融,Flickr,廣告,NoSQL等眾多的應用場景,一共建立了80多個租戶,230多萬個topic。 智聯招聘在18年用Pulsar替換了線上原有的RabbitMQ,作為內部的訊息匯流排,服務內部的20多個應用,每天會產生6億多條訊息和3TB的資料。在減輕硬體,運維和部署成本的同時,為系統提供了更好的服務質量和擴充套件性。
Apache Pulsar,是一個使用Apache Bookkeeper提供持久化的pub/sub訊息平臺,它可以提供如下特性:
- 跨地域複製
- 多租戶
- 零資料丟失
- 零Rebalancing時間
- 統一的佇列和流模型
- 高可擴充套件性
- 高吞吐量
- Pulsar Proxy
- 函式
Apache Pulsar的檔案對這些特性都有詳細解釋,有興趣可以去看官方檔案。
架構
Pulsar使用分層結構,將儲存機制與broker隔離開來。此體系結構為Pulsar提供以下好處:
- 獨立擴充套件broker
- 獨立擴充套件儲存(Bookies)
- 更容易容器化Zookeeper, Broker and Bookies
- ZooKeeper提供叢集的配置和狀態儲存
亮點如下:
- 負載均衡器:Pulsar內建負載均衡器,可在內部將負載分配給所有broker
- 服務發現:Pulsar具有內建的服務發現功能,可以識別在何處以及如何連線到broker。
- 全域性複製器:可以在為同一個名稱空間配置的N個borker之間複製資料。
- 全域性ZK: 全域性ZK用於實現跨地域複製
跨地域複製
跨地域複製是Pulsar提供的解決方案。全域性叢集可以在名稱空間級別進行配置,以便在任意數量的叢集(n-wayMesh解決方案)中進行複製。從下麵的示例中,資料中心C沒有消費者,但資料中心A或B中仍會根據訂閱模型消費訊息。
多租戶
多租戶特性透過對資料儲存的隔離,幫助為企業建立Pulsar叢集。這一內建功能將大大降低組織的基礎設施建設和運營成本。
零Rebalancing時間
Pulsar的分層架構和代理的無狀態性質有助於實現零Rebalancing時間。如果一個新的broker被新增到叢集中,它將立即可用;無需在叢集中rebalancing資料。
從Bookies的角度來看:當一個新的Bookie新增到叢集中時,由於其底層的分散式日誌架構(讀/寫隔離),該節點立刻可以寫入資料。基於段複製配置的資料rebalance在後臺進行,不會對叢集產生任何影響。
統一的佇列和流模型
Pulsar使用同一個模型支援流和佇列語意。這個特性可以透過訂閱模型實現。消費者使用訂閱模型中的任何一個訂閱主題:
- Exclusive – 支援流語意
- Failover – 支援流語意
- Shared – 支援佇列語意
函式
函式是能夠在Pulsar內部或外部存在的本地監聽器。從用途本身來看,函式可用於基於內容的路由,這將幫助企業應用程式路由預期的訊息。
Proxy
當broker部署在雲或Kubernetes中時,需要使用proxy將broker暴露於外部世界。Proxy本身可以提供身份驗證和授權。Proxy內建將授權令牌傳遞給broker以進行名稱空間許可權驗證的功能。
結論
Apache Pulsar使用基於分層體系結構的pub/sub模型,它具有跨地域複製、多租戶、零Rebalancing時間等功能。
原文地址:https://medium.com/@pckeyan/apache-pulsar-gentle-introduction-465ca6da0e18
朋友會在“發現-看一看”看到你“在看”的內容