您好,登錄后才能下訂單哦!
本篇文章為大家展示了為什么要選擇Apache BookKeeper,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
我將會介紹 Apache BookKeeper 一系列具有競爭力的功能,主要包括 I/O 隔離、數(shù)據(jù)分布、可擴展性與可操作性。
I/O 隔離
可預測的低延遲對實時應用程序而言十分重要,特別是關鍵在線服務(例如:核心業(yè)務服務、數(shù)據(jù)庫等)。以消息系統(tǒng)為例,在大多數(shù)消息系統(tǒng)中,速度較慢的 consumer 可能會導致消息積壓,這有可能會進一步導致總體性能下降。
問題在于,較慢的 consumer 迫使存儲系統(tǒng)從持久存儲介質(zhì)中讀取數(shù)據(jù),這會導致 I/O 抖動及頁面緩存的換入換出。當存儲 I/O 組件共享用于寫入、追尾讀、追趕讀的單一路徑時,就會發(fā)生這種情況。
在 BookKeeper 中,bookie(單個 BookKeeper 存儲節(jié)點)旨在使用三條獨立的 I/O 路徑,分別用于寫入、追尾讀、追趕讀。分離這三個路徑很重要,因為寫入和追尾讀對可預測的低延遲有較高要求,而追趕讀則對吞吐量的要求比較高。在這些工作負載之間提供物理隔離意味著 BookKeeper 能夠充分利用以下幾點:
寫入時,網(wǎng)絡入口帶寬和順序寫入帶寬
讀取時,多個 ledger 磁盤上網(wǎng)絡出口帶寬和 IPOS(每秒輸入/輸出操作數(shù))
I/O 隔離意味著 BookKeeper 能夠在不妨礙其他優(yōu)勢的條件下,同時提供上述優(yōu)勢。
數(shù)據(jù)分布
建立在 BookKeeper 上的服務(比如:Apache Pulsar)將日志流作為分片 ledgers 存儲在 BookKeeper 上。這些分片(ledgers)會被復制到多個 bookie。這樣可以使數(shù)據(jù)存放有盡可能多的選擇,從而實現(xiàn)高可用、流量負載均衡、運維簡單等。我將從部署和運維的角度介紹一些優(yōu)勢。
首先,單個日志流的存儲容量永遠不會受到單個主機存儲容量的限制。只要整個集群有足夠的容量,就可以存儲數(shù)據(jù)。
其次,在擴展 BookKeeper 集群時,不涉及日志流再平衡。管理員可以通過增加新設備來擴展 BookKeeper 集群。集群可以發(fā)現(xiàn)新的 bookie,并向其寫入分片。BookKeeper 還提供了多種分布策略,包括機架感知、區(qū)域感知、基于重量的布局策略等,以實現(xiàn)盡可能多的布局方式。
再次,BookKeeper 能夠在發(fā)生機器故障時更快、更高效地進行副本修復。當一個分片由于機器故障丟失或由于磁盤故障損壞時,BookKeeper 可以確定哪些分片需要修復(重新復制 entry 以滿足副本要求),并從多個主機同時進行修復。
相比于 Apache Kafka 這樣以分區(qū)為中心的系統(tǒng),BookKeeper 可水平擴展的性能更具優(yōu)勢。在 Apache Kafka 中,日志流(又稱 Kafka 分區(qū))僅順序存儲在一部分機器上,并且擴展 Kafka 集群需要大量數(shù)據(jù)進行再平衡,而再平衡操作本身就很消耗資源、易出錯,且運維復雜。
另外,在以分區(qū)為中心的系統(tǒng)上,損壞的單個磁盤要求系統(tǒng)復制整個日志流到新磁盤,以滿足多副本要求。
所有的日志分片跨 N 個可能的 bookie 復制到可配置數(shù)量的 bookie 上(圖示中副本數(shù)為 3)。日志分片均勻分布,以在不重新平衡的條件下實現(xiàn)水平擴展。
可擴展
作為一個實時日志流存儲平臺,能夠隨著流量的增加或寫入系統(tǒng)的數(shù)據(jù)增多而進行擴展是十分重要的。Apache BookKeeper 基于以下幾點實現(xiàn)其可擴展性:
流可擴展性能夠支持大量日志流的存儲,在 ledger 或流的數(shù)量從數(shù)百增為數(shù)百萬時,其他性能不受影響。實現(xiàn)流可伸縮性的關鍵在于存儲格式。
如果 ledger 和流都存儲在專用文件中,流伸縮性的實現(xiàn)就會出現(xiàn)問題,因為當這些文件定期從頁面緩存刷新到磁盤時,I/O 會分散在磁盤上。
BookKeeper 以交錯存儲格式存儲 ledger 和流的數(shù)據(jù),整合來自不同 ledger 和流的 entry,并存儲在大文件中,然后進行索引。這既減少了文件數(shù)量,也減少了 I/O 爭用,允許 BookKeeper 為大量 ledger 和流進行擴展。
Bookie 可伸縮性,即日志流存儲通過添加 bookie(BookKeeper 中的存儲節(jié)點)來支持迅速增加的流量。在 BookKeeper 中,bookie 之間不直接交互。這使得 BookKeeper 只需添加新機器即可擴展集群。
同樣,由于 BookKeeper 在 bookie 上分發(fā)數(shù)據(jù)的方式,在擴展 BookKeeper 集群時,分區(qū)數(shù)據(jù)并不昂貴,也不會耗盡系統(tǒng)網(wǎng)絡和 I/O 帶寬。不管數(shù)據(jù)如何分配,這都可以增加集群的大小。
雅虎(Yahoo!)和推特(Twitter)都在使用 BookKeeper,在單個集群上有成百上千個 bookie。
客戶端可伸展性,即日志流存儲支持大量并發(fā)客戶端并支持大量扇出的能力。BookKeeper 可在多處實現(xiàn)此功能:
客戶端和服務器都完全使用 Netty 來實現(xiàn)異步網(wǎng)絡 I/O。所有網(wǎng)絡 I/O 使用單個 TCP 連接進行多路復用,并且都是異步的。以很少的資源消耗實現(xiàn)了非常高效的管道和極高的吞吐量。
復制數(shù)據(jù)到多個 bookie。在 bookie 副本間,數(shù)據(jù)是完全相同的。在 Apache Kafka 這樣的系統(tǒng)中,客戶端只能從 leader 節(jié)點讀取數(shù)據(jù)。而 BookKeeper 的客戶端可以從任一 bookie 副本中讀取數(shù)據(jù)(這種讀取可重復)。這不僅實現(xiàn)了較高的讀可用性,還能平均分配讀取流量。
由于客戶端能夠重復地從任一 bookie 副本讀取數(shù)據(jù),應用程序可以配置更多的副本來實現(xiàn)更高的讀取扇出。
應用程序可以通過使用更多的流或增加 bookie 來提高吞吐量。另外,BookKeeper 還可以通過增加 ensemble 大?。╡nsemble 是用于存儲給定 ledger 或流的 bookie 子集),并在 bookie 之間分段數(shù)據(jù)來調(diào)節(jié)單流吞吐量。
對于那些需要對單個流進行數(shù)據(jù)排序的有狀態(tài)應用程序而言,這是至關重要的。
運維簡單
Apache BookKeeper 旨在運維簡單。在系統(tǒng)運行時,可以通過添加 bookie 節(jié)點輕易擴展容量。如果一個 bookie 節(jié)點不再自動可用,此 bookie 中包含的所有 entry 將被標記為"已復制",BookKeeper 自動恢復守護進程自動將其他可用副本中的數(shù)據(jù)再復制到新的 bookie 節(jié)點。
在運行 bookie 節(jié)點時,BookKeeper 提供只讀模式。在某些情況下,例如:磁盤已滿、磁盤損壞,bookie 自動變?yōu)橹蛔x模式。只讀模式下,bookie 不允許寫入數(shù)據(jù),但仍可以讀取流量。這種自愈性減少了許多運維上的痛點問題。
另外,BookKeeper 提供了多種管理集群的方法,包括使用管理 CLI 工具、Java 管理庫、HTTP REST API 等。REST API 具有編寫外掛工具或在現(xiàn)有工具中使用某些操作的靈活性。
安全性
Apache BookKeeper 支持可插拔的身份驗證機制(http://bookkeeper.apache.org/docs/latest/security/overview/),應用程序可以使用該機制進行自身身份驗證。BookKeeper 也可以配置為支持多種身份驗證機制。身份驗證程序的目的在于建立客戶端的身份,并為客戶端分配一個標識符。
該標識符可用來確定客戶端被授權執(zhí)行的操作。默認情況下,BookKeeper 支持兩種身份驗證程序:TLS、SASL。
上述內(nèi)容就是為什么要選擇Apache BookKeeper,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。