主流互聯網產品中,不論是經典的計算廣告、搜索、推薦,還是垂直領域的路徑規劃、司機派單、物料智能設計,建立在人工智能技術之上的策略系統已經深入到了產品功能的方方面面。相應的,每一個策略系統都離不開大量的在線特征,來支撐模型算法或人工規則對請求的精準響應,因此特征系統成為了支持線上策略系統的重要支柱。美團點評技術博客之前推出了多篇關于特征系統的文章,如《機器學習中的數據清洗與特征處理綜述》側重于介紹特征生產過程中的離線數據清洗、挖掘方法,《業務賦能利器之外賣特征檔案》側重于用不同的存儲引擎解決不同的特征數據查詢需求。而《外賣排序系統特征生產框架》側重介紹了特征計算、數據同步和線上查詢的特征生產Pipeline。
本文以美團酒旅在線特征系統為原型,重點從線上數據存取角度介紹一些實踐中的通用技術點,以解決在線特征系統在高并發情形下面臨的問題。
在線特征系統就是通過系統上下文,獲得相關特征數據的在線服務。其功能可以是一個簡單的Key-Value(KV)型存儲,對線上提供特征查詢服務,也可以輻射到通用特征生產、統一特征調度、實時特征監控等全套特征服務體系。可以說,幾個人日就可以完成一個簡單能用的特征系統,但在復雜的業務場景中,把這件事做得更方便、快速和穩定,卻需要一個團隊長期的積累。
以上結構圖為一體化特征系統的概貌,自底向上為數據流動的方向,各部分的功能如下:
數據源:用于計算特征的原始數據。根據業務需求,數據來源可能是分布式文件系統(如Hive),關系型數據庫(如MySQL),消息隊列(如Kafka)等。
特征生產:該部分負責從各種數據源讀取數據,提供計算框架用于生產特征。生產框架需要根據數據源的類型、不同的計算需求綜合設計,九江服務器 東莞服務器,因此會有多套生產框架。
特征導入:該部分負責將計算好的特征寫入到線上存儲供特征服務讀取。該部分主要關注導入作業之間的依賴、并發寫入的速度與一致性等問題。
特征服務:該部分為整個特征系統的核心功能部分,提供在線特征的存取服務,直接服務于上層策略系統。
特征的生命周期按照上述過程,可以抽象為五個步驟:讀、算、寫、存、取。整個流程于特征系統框架內成為一個整體,作為特征工程的一體化解決方案。本文主要圍繞特征服務的核心功能“存”、“取”,介紹一些通用的實踐經驗。特征系統的延伸部分,如特征生產、系統框架等主題會在后續文章中做詳細介紹。
1.2 特征系統的核心——存與取
簡單來說,可以認為特征系統的核心功能是一個大號的HashMap,用于存儲和快速提取每次請求中相關維度的特征集合。然而實際情況并不像HashMap那樣簡單,以我們的通用在線特征系統(Datahub)的系統指標為例,它的核心功能主要需面對存儲與讀取方面的挑戰:
高并發:策略系統面向用戶端,服務端峰值QPS超過1萬,數據庫峰值QPS超過100萬(批量請求造成)。
高吞吐:每次請求可能包含上千維特征,網絡IO高。服務端網絡出口流量均值500Mbps,峰值為1.5Gbps。
大數據:雖然線上需要使用的特征數據不會像離線Hive庫那樣龐大,但數據條數也會超過10億,字節量會達到TB級。
低延遲:面對用戶的請求,為保持用戶體驗,接口的延遲要盡可能低,服務端TP99指標需要在10ms以下。
以上指標數字僅是以我們系統作為參考,實際各個部門、公司的特征系統規模可能差別很大,但無論一個特征系統的規模怎樣,其系統核心目標必定是考慮:高并發、高吞吐、大數據、低延遲,只不過各有不同的優先級罷了。當系統的優化方向是多目標時,我們不可能獨立的用任何一種方式,在有限資源的情況下做到面面俱到。留給我們的是業務最重要的需求特性,以及對應這些特性的解決方案。
本節介紹一些在線特征系統上常用的存取技術點,以豐富我們的武器庫。主要內容也并非詳細的系統設計,而是一些常見問題的通用技術解決方案。但如上節所說,如何根據策略需求,利用合適的技術,制定對應的方案,才是各位架構師的核心價值所在。
2.1 數據分層