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