Apache Pulsar 之企業(yè)級(jí)特性-多租戶介紹

Apache Pulsar 最初誕生于雅虎,當(dāng)時(shí)就是為了解決雅虎內(nèi)部各個(gè)部門之間數(shù)據(jù)的協(xié)調(diào),所以多租戶特性顯得至關(guān)重用,Pulsar 從誕生之日起就考慮到多租戶這一特性,并在后續(xù)的實(shí)現(xiàn)過程中,將其不斷的完善。 多租戶這一特性,使得各個(gè)部門之間可以共享同一份數(shù)據(jù),不用單獨(dú)部署獨(dú)立的系統(tǒng)來操作數(shù)據(jù),很好的保證了各部門間數(shù)據(jù)一致性的問題,同時(shí)簡化維護(hù)成本。

在介紹 Pulsar 多租戶之前,先來看一下,正常一個(gè)系統(tǒng)要實(shí)現(xiàn)一個(gè)多租戶需要做哪些事情:

  • 嚴(yán)格的 SLAs 保證
  • 確保租戶之間的隔離性
  • 允許對(duì)租戶內(nèi)的資源進(jìn)行配額
  • 在租戶內(nèi)提供系統(tǒng)級(jí)別的安全性
  • 運(yùn)維成本低,易管理

Pulsar 的多租戶設(shè)計(jì)符合上述要求:

  • 使用身份驗(yàn)證、授權(quán)和 ACL(訪問控制列表)確保其安全性
  • 為每個(gè)租戶強(qiáng)制執(zhí)行存儲(chǔ)配額
  • 支持在運(yùn)行時(shí)更改隔離機(jī)制,從而實(shí)現(xiàn)操作成本低和管理簡單。

多租戶介紹

如下圖所示:在一個(gè) Pulsar 集群中,有三個(gè)概念:tenant(圖中的 property 是之前的一種叫法,現(xiàn)在更習(xí)慣將其稱為:tenant)、namespace、topic。這一點(diǎn)從 pulsar 中 topic 的命名組成也可以反應(yīng)出來,例如:persistent://tenant/namespace/topic,在 Pulsar 中,使用 tenantnamespace,topic-name 來唯一標(biāo)識(shí)一個(gè) topic。

tenant 代表的是租戶名,它是一個(gè)資源的隔離單位,一個(gè) tenant 下可以有多個(gè) namespace。namespace 用來管理其下面所屬的 topics,可以在 namespace 級(jí)別給 topic 設(shè)置相應(yīng)的策略,比如 retention,backlog,ratelimit。一個(gè) namespace 下又可以有多個(gè) topic,他們的權(quán)限大小也是由上到下。Pulsar 的多租戶通過 tenant、namespace、topic 形成多級(jí)管理系統(tǒng)。

tenant.png

安全性(認(rèn)證和授權(quán))

開篇中提到,一個(gè)多租戶系統(tǒng)需要在租戶內(nèi)提供系統(tǒng)級(jí)別的安全性,細(xì)分來講,主要可以歸類為一下兩點(diǎn):

  • 租戶只能訪問它有權(quán)限訪問的 topics
  • 不允許訪問它無法訪問的 topics

在 Pulsar 中,多租戶的安全性是通過身份驗(yàn)證和授權(quán)機(jī)制實(shí)現(xiàn)的。當(dāng) client 連接到 pulsar broker 時(shí),broker 會(huì)使用身份驗(yàn)證插件來驗(yàn)證此客戶端的身份,然后為其分配一個(gè) string 類型的 role token。role token 主要有如下作用:

  • 判斷 client 是否有對(duì) topics 進(jìn)行生產(chǎn)或消費(fèi)消息的權(quán)限
  • 管理租戶屬性的配置

Pulsar 目前支持兩種身份認(rèn)證:

  • TLS 客戶端身份認(rèn)證
  • 雅虎的身份認(rèn)證系統(tǒng):Athenz

當(dāng)然,用戶也可以使用自己實(shí)現(xiàn)的身份認(rèn)證程序。

當(dāng)身份認(rèn)證系統(tǒng)識(shí)別出客戶端的 role token 之后,Pulsar broker 會(huì)使用授權(quán)系統(tǒng)來告訴客戶端當(dāng)前你可以執(zhí)行哪些操作。授權(quán)操作是在 tenant 級(jí)別進(jìn)行配置的,這意味著在 Pulsar 集群中,允許用戶根據(jù)不同的角色設(shè)定多個(gè)授權(quán)方案。具體的權(quán)限操作是在 namespace 級(jí)別進(jìn)行設(shè)置和管理的,例如:針對(duì)某一個(gè) topic 是否具有 produce 或 consume 的權(quán)限歸屬于 namespace 這個(gè)級(jí)別來控制。換句話來說:在 tenant 級(jí)別 用戶可以配置,什么樣的 role 擁有對(duì)哪些 tenant 操作的權(quán)限,在 namespace 級(jí)別用戶可以配置,針對(duì)某一 topic 當(dāng)前role擁有什么樣的權(quán)限,又回到了開頭所介紹的,namespace 主要用來管理它所包含的 topics 的屬性。

通過認(rèn)證和授權(quán)系統(tǒng)巧妙的將租戶與 topics 之間的執(zhí)行權(quán)限等問題剝離開來,從而實(shí)現(xiàn)在租戶內(nèi)滿足系統(tǒng)級(jí)別安全性的目的。

隔離性

隔離性主要分為如下兩種:

  • 軟隔離:通過磁盤配額,流量控制和限制等手段
  • 硬隔離

軟隔離

在 Pulsar 中,為了保證良好的擴(kuò)展性,采用了存儲(chǔ)和計(jì)算分離的架構(gòu)設(shè)計(jì),而存儲(chǔ)(bookie)和計(jì)算 (broker)又是 produce 和 consume 所共享的資源,為了更好的實(shí)現(xiàn)隔離性,Pulsar 分別在存儲(chǔ)和計(jì)算層做了不同的處理。

存儲(chǔ)

在存儲(chǔ)方面,Apache Pulsar 使用了另外一個(gè) Apache 的頂級(jí)項(xiàng)目 Bookkeeper 來作為其存儲(chǔ)層。bookie 是 Bookkeeper 中的一個(gè)實(shí)例,一個(gè) bookie 擁有多個(gè) ledgers,每個(gè) ledger 對(duì)應(yīng) Pulsar 中的一個(gè) topic。Bookkeeper 本身的 I/O 分離 能夠很好的為此做支撐。在單個(gè) bookie 中,有一個(gè) journal 日志文件(一般有一塊專有的 journal 盤用于 journal 文件的寫入)(類似于 LSMTree 中的 WAL 文件)會(huì)以 append 的形式將所有的寫操作追加寫入其內(nèi)部。當(dāng)寫入完成之后,后臺(tái)會(huì)有一個(gè)單獨(dú)的線程來定期將 journal 文件的數(shù)據(jù) flush 到磁盤中。這種 I/O 架構(gòu)的設(shè)計(jì)實(shí)現(xiàn)了寫入和讀取操作之間的隔離,這樣租戶可以盡可能快的讀取數(shù)據(jù),同時(shí)寫的吞吐量和延遲不會(huì)受到讀取操作的影響。

除了 I/O 隔離外,不同的租戶可以為不同的 namespace 配置不同的存儲(chǔ)配額。如果租戶內(nèi)消息的大小達(dá)到了存儲(chǔ)配額的限制,Pulsar 會(huì)采取相應(yīng)的措施,例如:阻止消息生成,拋出異常或丟棄消息等。

broker

為了滿足 SLAs, Pulsar 在 Broker 層面也提供了多種機(jī)制。首先,在 Pulsar broker 中的一切操作都是異步進(jìn)行的。每個(gè) Broker 使用的內(nèi)存資源是有上限的,當(dāng) Broker 達(dá)到配置的 CPU 或內(nèi)存使用的閾值,Pulsar 會(huì)迅速的將流量轉(zhuǎn)移到負(fù)載較小的 Broker 上來處理。在 Pulsar 中,有一個(gè)組件 load manager component 專門用來處理這種情況,這受益于 Pulsar 優(yōu)秀的架構(gòu)設(shè)計(jì):計(jì)算與存儲(chǔ)分離。這使得 Broker 近乎是無狀態(tài)的,Broker 本身不存儲(chǔ)任何數(shù)據(jù),所以這種流量負(fù)載的轉(zhuǎn)移成本很小而且速度很快,所以在這里并不需要擔(dān)心流量負(fù)載時(shí)租戶的特性是否會(huì)打折扣。

其次,在消息的生產(chǎn)和消費(fèi)方面,Pulsar 都做了流量控制。在生產(chǎn)者方面 ,租戶可以配置當(dāng)前消息發(fā)送到 broker 和 bookies 的速度,避免當(dāng)前用戶發(fā)送消息的速度大于系統(tǒng)本身處理消息的能力。在消費(fèi)者方面,租戶可以配置當(dāng)前 broker 可以給 consumer 發(fā)送多少未完成的消息。除此之外,Pulsar 還可以限制 Broker 以指定的速率向消費(fèi)者投遞消息,避免消費(fèi)者的消費(fèi)能力大于當(dāng)前 Broker 的處理能力。

硬隔離

軟隔離中提到的機(jī)制可以確保 Pulsar 在共享 Broker 和 Bookies 資源時(shí)能很好的保證隔離性。但是,在某些情況下,應(yīng)用程序也需要物理資源隔離。Pulsar 允許將某些租戶或名稱空間與特定 Broker 進(jìn)行隔離。這可確保這些租戶或命名空間可以充分利用該特定 Broker 上的資源。

此選項(xiàng)還可用于測(cè)試不同的配置,調(diào)試并快速響應(yīng)生產(chǎn)中發(fā)生的任何意外情況。例如,當(dāng)前有一個(gè)用戶可能在 Broker 觸發(fā)可能影響其他租戶性能的不良行為。在這種情況下,可以將該特定租戶物理隔離出來,然后進(jìn)行確認(rèn)或者修復(fù)。

除了物理隔離 Broker 上的流量之外,你還可以隔離存儲(chǔ)相關(guān)的業(yè)務(wù)??梢栽?namespace 級(jí)別來配置相關(guān)的 placement policy 來達(dá)到目的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0 緣起Pulsar是一個(gè)支持多租戶的、高性能的消息中間件。2018年11月中旬開始初步在線上生產(chǎn)環(huán)境使用。pul...
    hellozepp閱讀 1,852評(píng)論 0 1
  • Apache Pulsar于2018年9月正式成為Apache頂級(jí)項(xiàng)目,ApachePulsar是一個(gè)企業(yè)級(jí)的發(fā)布...
    航通社閱讀 731評(píng)論 0 0
  • 作者 | 狂野 編輯 | Irene 導(dǎo)讀:本文介紹了 Pulsar 負(fù)載均衡相關(guān)的概念,以及 Pulsar 負(fù)載...
    StreamNative閱讀 1,391評(píng)論 0 0
  • (己亥日課011) 《一個(gè)小忙》-有點(diǎn)失望 來自《伴娘》、《女間諜》導(dǎo)演的新作,兩位女主都是顏值演技雙在線的戲精,...
    編號(hào)柒壹伍閱讀 180評(píng)論 0 0
  • 凌晨四點(diǎn)半被鬧鈴驚醒,再不敢貪戀溫暖的被窩,匆忙起床,院子里并不是黑漆漆的,有西斜的月光,抬頭看天,月亮躲在厚厚的...
    清香的泥土閱讀 440評(píng)論 0 2

友情鏈接更多精彩內(nèi)容