五億月活的 Pinterest 是如何優化數據分析系統的?
介紹
Pinterest 是一個圖片發現平臺,用戶可以在這里找到各種創意,比如食譜、家居和風格靈感等。平臺不僅為合作伙伴提供購物功能,還為廣告商提供了一個重要的廣告機會,擁有超過 5 億的月活躍用戶。廣告商可以直接在 Pinterest 上購買廣告,或者通過廣告代理機構合作購買廣告。由于 Pinterest 的用戶規模龐大,廣告商可以從分析數據中了解他們的 Pins 和與 Pinterest 用戶的互動情況,從而優化廣告效果。
在 Pinterest,實時洞察對于幫助廣告商和團隊成員做出數據驅動的決策至關重要。這些決策會影響廣告活動的表現、實驗結果以及政策制定(例如垃圾郵件檢測規則)。此前,他們一直依賴 Druid 來存儲和提供這些實時洞察,但隨著業務規模和需求不斷變化,Pinterest 開始評估不同的技術棧,并最終決定將這些數據遷移到 StarRocks。
在本文中, Pinterest 將詳細探討 Pinterest 在 StarRocks 上進行分析應用構建的經歷,以及為何 Pinterest 需要一個新的系統。
Pinterest 的需求
之前的系統在幾年前運行得很順利,并且能夠擴展到數百臺機器。但隨著時間的推移, Pinterest 的規模和需求不斷增加,因此 Pinterest 對企業分析端需求進行了梳理:
- 在規模不斷擴大的同時保持低成本,以確保為內部團隊提供高效的解決方案。
- 支持標準的 SQL 類型和模式,這是用戶最喜歡的接口。
- 支持連接、子查詢和物化視圖,為用戶提供更多選擇。
- 通過移除 MapReduce 作業等外部依賴簡化數據導入過程,使得入門和使用更加方便。
在評估了多個數據分析技術棧后, Pinterest 最終選擇了 StarRocks,因為它彌補了當前系統的許多不足。
StarRocks 是一個實時 OLAP 數據庫,能夠處理高并發的 OLAP 工作負載,非常適合面向客戶的分析。由于它兼容 MySQL, Pinterest 可以輕松地將 StarRocks 與現有工具集成。StarRocks 將數據存儲在本地磁盤上,還可以查詢 HDFS 或 S3 中的外部數據。它由兩個組件組成:前端和后端。前端將 SQL 編譯成執行計劃,后端執行這些計劃。
StarRocks 開源社區有數千名成員參與維護和開發,社區活躍且支持良好,這也確保產品持續迭代能力和穩定性。在 Pinterest 的測試中,StarRocks 相較于當前系統 Druid 及其他方案,在性能和成本上有明顯優勢。它能夠在大規模下即時執行快速的 JOIN 查詢,有效降低對復雜去規范化管道的需求。
場景遷移應用
Pinterest 決定將 Partner Insights 作為遷移到 StarRocks 的第一個應用場景。Partner Insights 是一個為廣告商提供實時洞察的工具,廣告商可以通過可定制的儀表板獲取這些洞察。
廣告商可以登錄 Partner Insights,并根據各種定制指標了解他們廣告的表現。這些洞察幫助營銷人員理解廣告策略的有效性,并做出快速、數據驅動的調整。廣告活動越有效,廣告商在 Pinterest 平臺上的投資回報率 (ROI) 就越高。
應用場景挑戰
提供 Partner Insights 面臨多方面的挑戰。一方面,Pinterest 服務于大量廣告商,每個廣告商都有其獨特的需求和指標。另一方面,這些指標不僅僅是單一維度的數據點,而是跨越多個維度,需要實時聚合。由于平臺的高度可定制性,廣告商可以從眾多指標中選擇,并根據具體目標定制儀表板。這種定制能力帶來了復雜性——每個儀表板可能包含多個需要實時聚合的指標,跨越各種維度。
Partner Insights 的靈活性既是優勢也是挑戰,這要求數據庫解決方案能夠處理大量復雜的多維查詢,同時保持速度和準確性。
架構與實施過程
圖 3 展示了使用 StarRocks 的 Partner Insights 內部架構。架構包括:
- 前端 (FE) 節點:StarRocks FE 節點負責元數據管理和查詢規劃。
- 后端 (BE) 節點:StarRocks BE 節點負責數據持久化、數據掃描及查詢執行。
- Archmage:一個 Pinterest 服務,旨在屏蔽用戶免受 StarRocks 集群的部署、版本升級和其他操作的復雜性,同時將 thrift 調用轉換為 StarRocks 的 SQL 調用。這個服務為不同的分析存儲系統提供統一的接口。
- 負載均衡器:通過輪詢方法將查詢分配給四個 StarRocks FE followers,而不是過載單個follower,以最大化并發性。
Pinterest 在 Archmage 中使用連接池來減少每個連接的成本,通過維護一個固定的連接池來最小化 JDBC 連接的設置時間,從而為每個用戶請求提供即時訪問連接的能力。這一優化為每個 JDBC 連接節省了平均 50 ms。目前,每個集群配置有 70 個后端引擎和 11 個前端引擎和觀察者,運行在 AWS R6id.8xlarge 實例上,每個實例配備 32 核心、256GB 內存和 1900 GB SSD 存儲。
結果與收益
遷移到 StarRocks 后, Pinterest 發現應用端分析體驗到了多項改進。遷移將 p90 延遲減少了 50%,只需要之前系統的 32% 的實例。這使得成本性能效率提高了 3 倍。數據導入過程也得到了簡化,實現了僅 10 秒的數據新鮮度。
此外, Pinterest 能夠消除數據導入過程中使用的 JSON 配置,因為 Pinterest 使用了 SQL 進行導入(在 StarRocks 中是可能的)。這簡化了客戶入門過程,節省了大量人工資源。
未來工作
目前,所有操作完全依賴于 StarRocks 的原始查詢性能,Pinterest 也正在探索而查詢緩存或物化視圖等功能,以進一步優化系統應對高并發工作負載