這是介紹Apache Pulsar關鍵特性系列文章的第二篇。Pulsar是由Yahoo開發并開源的下一代發布訂閱消息系統。在第一篇文章里,我們介紹了Pulsar對消息模型的靈活支持、多租戶、多地域復制和持久性。在這一篇文章里,我們將繼續介紹Pulsar的IO隔離機制、伸縮性、安全模型、多語言API和易操作性。
\\讀寫IO隔離
\\在大多數消息系統里,消費者的速度延遲會導致性能下降。同一個主題的消費者,如果其中一個出現速度延遲,就會影響到其他速度更快的消費者。這是因為慢消費者強制要求消息系統從存儲里獲取數據,導致IO出現抖動,降低吞吐量。那些需要將數據先加載到內存里的消費者就會受到影響。導致這一問題的原因主要是讀操作和寫操作共享同一個執行路徑。
\\Pulsar通過使用BookKeeper作為存儲系統解決了這一問題。有了BookKeeper,Pulsar就可以為讀操作和寫操作提供不同的執行路徑,實現IO隔離。常規的讀操作直接由Pulsar broker處理,寫操作使用BookKeeper的預寫式日志(WAL),Catch-up讀使用BookKeeper的后端存儲設備。
\\對于系統中消息的發布,在任何情況下都能提供可控的,可預計的延遲是十分重要的。有了IO隔離,即使在磁盤承受高負載的讀操作時,仍然能夠保證消息的發布延遲是很低的、可以預計的。
\\伸縮性
\\消息系統的可伸縮性也是很重要的。發布訂閱消息系統的伸縮性可以從以下幾個維度來衡量:
\\- 高吞吐量——Pulsar的高吞吐量,通過最大限度的使用磁盤帶寬(IOPS)來實現。吞吐量取決于消息的大小,例如,如果消息的大小為1KB,那么Pulsar可以達到每秒120MB的吞吐量。但如果消息很小,比如只有10個字節,那么吞吐量可能只有1.8M每秒。這兩種結果都是基于單個發布者向一個主題(topic)分區寫入消息而得出的,99%的寫入延遲都在5毫秒以內。\\t
- 主題數量——主題伸縮性是發布訂閱消息系統用以支持海量主題的一項能力。Pulsar可以支持從幾百到百萬級別的主題數量的擴展,同時還能一直保持良好的性能。主題的伸縮性取決于數據的組織和存儲方式。如果一個主題的數據被保存在單獨的文件或目錄里,就會影響伸縮性,因為磁盤的IO是分散的,這些文件會定期從頁面緩存沖刷到磁盤上。不過Pulsar的數據保存在bookie(BookKeeper服務器)上,不同主題的消息被聚合起來,經過排序,保存到大文件里,并進行索引。Pulsar也因此能夠支持大量的主題。\
安全
\\Pulsar支持可插拔的認證機制,可以通過配置使用多種認證實現。認證的目的是為了建立客戶端標識,并為客戶端分配一個角色令牌。這個令牌被用來判斷一個客戶端可以做哪些操作。Pulsar提供了兩個默認的認證實現:TLS客戶端認證和AthenZ(由Yahoo開發的一種基于角色的認證系統)。
\\多語言API
\\應用程序可以通過多種編程語言與Pulsar發生交互。Pulsar為三種主流語言提供了官方的客戶端:C++、Java和Python。用戶可以根據實際需要選擇一種客戶端。這些客戶端API非常直觀,而且在不同語言之間保持了一致性。另外,Pulsar的官方客戶端還為不同風格的應用程序提供了同步和異步兩種讀寫操作。同步和異步的語義是一樣的:要么阻塞方法等待操作完成,要么返回一個Future對象用于追蹤操作是否完成。
\\運維成熟度
\\Pulsar易于管理,你可以在系統運行的同時加入新的broker節點和存儲節點來擴展容量。如果一個存儲節點宕機,后臺進程會自動將宕機節點所包含的數據從其他節點上的可用副本中復制到可用的存儲節點上。Pulsar為集群管理提供了多種方式,可以使用命令行工具,也可以使用Java庫或REST API。后者提供了更大靈活性,你可以基于它們開發自己的管理工具或者與已有的工具結合在一起使用。
\\企業級
\\Yahoo設計Pulsar是為了解決現有開源消息系統存在的一些問題和場景。滿足了高吞吐量(處理數千億個消息)、強持久性保證和低延遲的需求。Pulsar已經在Yahoo運行了三年,支持著140萬個主題,99%延遲低于5毫秒,部署在10多個數據中心(啟用了全網格復制),已經處理了超過100萬億個消息。
\\總結
\\Pulsar是下一代發布訂閱消息系統,彌補了其他開源消息系統的不足。在這兩篇文章里,我們介紹了Pulsar的各種關鍵特性,并解釋了Pulsar如何通過使用broker和bookie來實現IO隔離,以及它如何支持企業級的特性,如持久性、多租戶、多地域復制、高吞吐量和主題伸縮。
\\查看英文原文:Why Apache Pulsar? Part 2
\\感謝杜小芳對本文的審校。