雅虎日本如何用 Pulsar 構建日均千億的消息平臺

来源:https://www.cnblogs.com/w397090770/archive/2019/11/17/11877730.html
-Advertisement-
Play Games

雅虎日本是一家雅虎和軟銀合資的日本互聯網公司,是日本最受歡迎的門戶網站之一。雅虎日本的互聯網服務在日本市場占主導地位。 下圖從三個維度顯示了雅虎日本的經營規模。第一個是服務數量,雅虎日本提供上百種互聯網服務;第二個是伺服器數量,雅虎日本使用超過 150,000 台伺服器(大多為裸機伺服器)全天候支持 ...


雅虎日本是一家雅虎和軟銀合資的日本互聯網公司,是日本最受歡迎的門戶網站之一。雅虎日本的互聯網服務在日本市場占主導地位。

下圖從三個維度顯示了雅虎日本的經營規模。第一個是服務數量,雅虎日本提供上百種互聯網服務;第二個是伺服器數量,雅虎日本使用超過 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 內置了跨地域複製功能,不需要額外部署跨地域複製組件。

雅虎日本如何用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 引擎上的使用狀態。

雅虎日本如何用Pulsar構建日均千億的消息平臺?

經過詳細調研,我們發現 Apache Pulsar 不僅比 Apache Kafka 的性能更好,還能夠滿足我們企業運行的所有需求,在 Kubernetes 上容易部署,所以我們最終決定採用 Apache Pulsar 作為內部消息平臺。

Apache Pulsar 在雅虎日本的應用

雅虎日本在生產環境中使用 Pulsar 已經好幾年了。我來分享下 Apache Pulsar 在雅虎日本的應用場景。

下圖是雅虎日本的系統構架。我們有兩個數據中心:一個在東部,一個在西部。每個數據中心都有 broker、bookie、ZooKeeper 和 WebSocket 代理伺服器。我們使用 Prometheus 收集指標,並通過 Grafana 將其可視化。

雅虎日本如何用Pulsar構建日均千億的消息平臺?

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

雅虎日本如何用Pulsar構建日均千億的消息平臺?

自助服務工具

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

雅虎日本如何用Pulsar構建日均千億的消息平臺?

案例 1: 內容更新通知

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

雅虎日本如何用Pulsar構建日均千億的消息平臺?

案例 2: 郵件服務中的工作隊列

我們使用 Apache Pulsar 構建非同步工作隊列。郵件索引工作繁重,所以非同步執行。首先,Mail BE 伺服器中的生產者在 Pulsar 中註冊 job,消費者按照自己的節奏從 Pulsar 獲取 job。如果索引失敗,生產者會重新註冊。

雅虎日本如何用Pulsar構建日均千億的消息平臺?

案例 3: 日誌管道

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

雅虎日本如何用Pulsar構建日均千億的消息平臺?

結論

Apache Pulsar 是一個快速、持久、可擴展的 pub-sub 消息系統,配備很多有用的內置功能,如跨地域複製、多租戶、Pulsar Functions 等。

多年來,雅虎日本使用 Apache Pulsar,關註 Pulsar 社區的新聞,更新和活動,在應用場景中使用 Pulsar 新功能,Pulsar 的穩定性一直很好。

Pulsar 社區雖然年輕,但發展迅猛,在不同的應用場景下不斷有新的案例落地。我們會持續關註並和 Apache Pulsar 社區深入合作,進一步完善、優化 Pulsar 的特性和功能。

相關信息

以下是 Apache Pulsar 的相關信息:

關於作者

Nozomi Kurihara, 雅虎日本消息平臺團隊經理、Apache Pulsar 項目 committer。負責創建基於 Apache Pulsar pub-sub 為中心的消息處理平臺,該平臺能夠處理海量服務和應用程式流量。

  • 作者 | Nozomi Kurihara
  • 審校 | Jennifer + Sijie + Irene
  • 編輯 | Irene
 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統信息相關命令¶ 本節內容主要是為了方便通過遠程終端維護伺服器時,查看伺服器上當前系統日期和時間/磁碟空間占用情況/程式執行情況 本節學習的終端命令基本是查詢命令,通過這些命令對系統資源的使用情況有個瞭解 目標¶ 時間和日期 date cal 磁碟和目錄空間 df du 進程信息 ps top k ...
  • 一 部署高可用kube-controller-manager 1.1 高可用kube-controller-manager介紹 本實驗部署一個三實例 kube-controller-manager 的集群,啟動後將通過競爭選舉機制產生一個 leader 節點,其它節點為阻塞狀態。當 leader 節 ...
  • 添加uwagi配置文件 在你項目的根目錄中創建mysite.xml(名字無所謂),或者創建mysite.ini,輸入以下內容: <uwsgi> <socket>127.0.0.1:8000</socket> <!-- 內部埠,自定義 --> <chdir>/data/project1</chdir ...
  • "點我查看秘籍連載" I/O操作和DMA、RDMA 用戶進程想要執行IO操作時(例如想要讀磁碟數據、向磁碟寫數據、讀鍵盤的輸入等等),由於用戶進程工作在用戶模式下,它沒有執行這些操作的許可權,只能通過發起對應的系統調用請求操作系統幫忙完成這些操作。這裡因為系統調用產生中斷將陷入到內核,進行一次上下文切 ...
  • 1.作用 useradd或adduser命令用來建立用戶帳號和創建用戶的起始目錄,使用許可權是超級用戶。 2.格式 useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p p ...
  • Spark運行模式有Local,STANDALONE,YARN,MESOS,KUBERNETES這5種,其中最為常見的是YARN運行模式,它又可分為Client模式和Cluster模式。這裡以Spark自帶的SparkPi來說明這些運行模式。 本文作為第一篇,先結合SparkPi程式來說明Yarn ...
  • 原文地址 https://sspai.com/post/35225 讓我們從實際需求出發,看看問題出在哪裡,併在此基礎上認識和學習使用 Hazel。 電腦隨著使用時間的增長,其中的文件也在瘋狂的增長,時間長了也就會出現各種混亂:大量文件堆放在一起,舊文件很少清理,分不清哪些文件還有用,找不到需要的文 ...
  • 表結構修改(alter) 查看表的結構:desc 表名; 修改表名:alter table 表名 rename to 新表名; 修改欄位名:alter table 表名 change 舊欄位名 新欄位名 數據類型; 修改欄位類型:alter table 表名 modify 欄位名 數據類型; 添加字 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...