雅虎日本是一家雅虎和軟銀合資的日本互聯網公司,是日本最受歡迎的門戶網站之一,雅虎日本的互聯網服務在日本市場占主導地位,
下圖從三個維度顯示了雅虎日本的經營規模,第一個是服務數量,雅虎日本提供上百種互聯網服務;第二個是服務器數量,雅虎日本使用超過 150,000 臺服務器(大多為裸機服務器)全天候支持這上百種互聯網服務的正常運作;第三個是每月總頁面瀏覽量,2017 年的資料顯示,雅虎日本每月瀏覽量超過 700 億,由此可見,雅虎日本的服務規模之大, 
挑戰
運營規模巨大對雅虎日本來說是個挑戰,高性能和可擴展的服務才能滿足海量用戶的需求,同時還需要提供多租戶支持來滿足運營眾多服務的需求,有時需要處理敏感訊息或關鍵任務,因此持久性也很重要,此外,雅虎擁有眾多的資料中心,對跨地域復制有強烈的需求,在諸多方面,我們面臨著巨大挑戰,希望找到一個穩定且可擴展的訊息平臺,能滿足上述需求并大規模地運行服務,同時能確保資料的完整性,
為什么選擇 Apache Pulsar
為了解決這些挑戰,我們開始調研各種訊息平臺,
Apache Pulsar vs Apache Kafka
首先,我們比較了 Apache Pulsar 和 Apache Kafka,這兩個業界不同的訊息系統,結果如下,
這兩個系統最主要的不同在于資料分布,在資料負載均衡方面,Pulsar 比 Kafka 處理得更勝一籌,以下圖為例,圖中有 1 個磁區,3 個存盤節點,每個磁區資料存盤兩個副本,Kafka 中,磁區中的所有資料都保存在 leader broker(Broker 2)中,然后復制到另一個 follower broker(Broker 1)中,Broker 3 既不是 leader 也不是 follower,因此沒有任何資料,在 Kafka 中,由于一個磁區中的所有資料都由一個 broker 保存,因此磁區的容量受 broker 的容量限制,一旦要擴展磁區,就需要重新分布資料;否則就會出現負載不均衡的情況,而 Pulsar 中,磁區中的資料被劃分為粒度更細的單元,稱為分片(segment),它們均勻地分布和保存在 bookies 中,磁區容量不受單個 bookie 節點容量的限制,擴展磁區時不需要重新分布資料,因此,Pulsar 比 Kafka 更靈活,更容易擴展,
另一個區別是跨地域復制,Kafka 使用 MirrorMaker 來處理跨地域復制,但需要使用額外的機器來運行和管理 MirrorMaker,而 Pulsar 內置了跨地域復制功能,不需要額外部署跨地域復制組件,

OpenMessaging Benchmark
使用 OpenMessaging Benchmark 可以很容易比較不同訊息處理系統,據報道,Apache Pulsar 處理吞吐量和延遲的性能更好,圖中藍線代表 Pulsar,紅線代表 Kafka,左圖顯示吞吐量,上方線條說明吞吐量更高,右圖顯示延遲,下方線條說明延遲更低,
雅虎日本如何用Pulsar構建日均千億的訊息平臺?
為什么 Apache Pulsar 最適合
這些對比說明 Apache Pulsar 比 Apache Kafka 更好,所以我們決定進一步研究 Apache Pulsar,并總結了 Pulsar 更適合我們的原因,
高性能
即使主題數量巨大,還要保證資料的可靠性,Apache Pulsar 也能實作高吞吐和低延遲,例如,Oath Inc. 每天要處理 230 萬個 topic,1000 億條訊息,在這個巨大的體量下,要確保訊息不能丟失且必須按順序處理,Apache Pulsar 不僅能滿足這些需求,還實作了 1,000,000 吞吐量(msg / s)和 5 ms 的延遲,
易擴展
Apache Pulsar 擴展性很好,要實作擴容,只需添加服務器即可,Pulsar 的服務層和存盤層是分開的,可以根據資料路徑靈活地添加 broker 或 bookie,如果需要提升服務容量,添加 broker 即可,如果需要擴大存盤容量,添加 bookie 即可,
多租戶
多租戶是指多種服務共用一個 Pulsar 系統,每個服務和應用程式作為 “租戶” 使用 Pulsar,因此,不同的服務無需單獨維護各自訊息系統,Apache Pulsar 有不同的認證和授權機制,可保護訊息不被攔截,可以配置認證和授權機制,并共享到命名空間或主題,從而保護訊息,因此,可以在一個 Pulsar 系統上運行多種服務,有效降低維護和勞動力成本,
跨地域復制
雅虎日本在多個資料中心運行很多服務,Pulsar 提供內置的跨地域復制功能,在資料中心之間復制訊息,可以有效處理災備,恢復資料,提高服務質量,更重要的是,跨地域復制是 Pulsar 的內置功能,方便啟用和使用,
Pulsar Functions
Pulsar Functions 是輕量級計算框架(如 AWS lambda 或 Google Cloud Functions),不需要外部系統(如 Apache Heron,Apache Storm,Apache Spark 或其他類似系統),只需構造邏輯并部署至 Pulsar 集群,Pulsar Functions 支持 Java、Python 和 Go 語言,
Pulsar on Kubernetes
Kubernetes 有眾多用戶,雅虎日本也是其中之一,在 Kubernetes 集群上部署 P??ulsar 很容易,下圖展示了 Pulsar 在 Kubernetes 引擎上的使用狀態,

經過詳細調研,我們發現 Apache Pulsar 不僅比 Apache Kafka 的性能更好,還能夠滿足我們企業運行的所有需求,在 Kubernetes 上容易部署,所以我們最終決定采用 Apache Pulsar 作為內部訊息平臺,
Apache Pulsar 在雅虎日本的應用
雅虎日本在生產環境中使用 Pulsar 已經好幾年了,我來分享下 Apache Pulsar 在雅虎日本的應用場景,
下圖是雅虎日本的系統構架,我們有兩個資料中心:一個在東部,一個在西部,每個資料中心都有 broker、bookie、ZooKeeper 和 WebSocket 代理服務器,我們使用 Prometheus 收集指標,并通過 Grafana 將其可視化,

Prometheus 可以用來監控 topic、生產者和消費者的數量,如下圖所示,

自助服務工具
在雅虎日本,我們開發了一套工具,用來創建和管理租戶、命名空間和主題,用戶可以在 UI 界面自己創建租戶和命名空間,并配置設定,目前,這個 UI 僅在雅虎日本內部使用,所以是日語的,沒有開源,使用這個 UI,可以創建租戶和命名空間,并查看 topic 的統計資訊,如吞吐量、平均訊息規模等,

案例 1: 內容更新通知
我們把 Apache Pulsar 作為通知服務系統使用,各種內容檔案(例如天氣,地圖或新聞資料)從合作伙伴公司推送到雅虎日本,服務需要了解這些更新的內容,所以服務把檔案當作 topic,內容更新時會向 topic 發送通知,服務一旦收到通知,就會從檔案服務器獲取更新的內容檔案,

案例 2: 郵件服務中的作業佇列
我們使用 Apache Pulsar 構建異步作業佇列,郵件索引作業繁重,所以異步執行,首先,Mail BE 服務器中的生產者在 Pulsar 中注冊 job,消費者按照自己的節奏從 Pulsar 獲取 job,如果索引失敗,生產者會重新注冊,

案例 3: 日志管道
我們使用 Apache Pulsar 收集日志,雅虎日本幾乎所有的服務和應用程式都運行 PaaS 平臺(如 Heron)或 CaaS 平臺(如 Kubernetes),我們想從中收集日志,首先,日志發布到 Pulsar 后會分成 topic,根據使用 Pulsar Functions 的最終目的地和服務,日志最侄訓發送到其他資料庫或平臺,例如 HBase、Prometheus 和 Twilio,下圖是雅虎日本的日志收集架構,

結論
Apache Pulsar 是一個快速、持久、可擴展的 pub-sub 訊息系統,配備很多有用的內置功能,如跨地域復制、多租戶、Pulsar Functions 等,
多年來,雅虎日本使用 Apache Pulsar,關注 Pulsar 社區的新聞,更新和活動,在應用場景中使用 Pulsar 新功能,Pulsar 的穩定性一直很好,
Pulsar 社區雖然年輕,但發展迅猛,在不同的應用場景下不斷有新的案例落地,我們會持續關注并和 Apache Pulsar 社區深入合作,進一步完善、優化 Pulsar 的特性和功能,
相關資訊
以下是 Apache Pulsar 的相關資訊:
Apache Pulsar: https://pulsar.apache.org/
聯系: https://apache-pulsar.slack.com/ [email protected] [email protected]
在線視頻: https://www.oreilly.com/library/view/oscon-2018-/9781492026075/video321374.html
演示文稿: https://conferences.oreilly.com/oscon/oscon-or-2018/public/schedule/detail/69704
關于作者
Nozomi Kurihara, 雅虎日本訊息平臺團隊經理、Apache Pulsar 專案 committer,負責創建基于 Apache Pulsar pub-sub 為中心的訊息處理平臺,該平臺能夠處理海量服務和應用程式流量,
- 作者 | Nozomi Kurihara
- 審校 | Jennifer + Sijie + Irene
- 編輯 | Irene
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/44402.html
標籤:大數據
