伊對資深架構師 王成光
本次主題的内容主要分三點介紹,第一是伊對的簡介,第二是推薦平台的架構簡介,第三是PAI在推薦平台的應用。
伊對的簡介
伊對是北京米連科技有限公司旗下的品牌。公司成立于2015年,是國家高新技術企業,也是北京中關村的高新技術企業。2019年公司營收近10億元人民币,2020年6月獲得小米、人民網旗下基金等多家機構的近1億美元的融資。伊對主要專注于移動端的線上交友和相親,将視訊、直播和線上紅娘創造性地融入該領域,開辟了視訊戀愛社群的獨立賽道,為單身人群提供了全新的社交體驗。截止2020年8月,伊對注冊的使用者超過4000萬,活躍紅娘4萬多人,每月撮合線上相親活動約1000萬場。“找對象,上伊對”,我們竭力為使用者提供一個更陽光積極、真實的戀愛社群,我們希望每一個使用者都能遇到心動的他/她。
平台的架構簡介

主要從三個部分介紹。第一,彈性擴充的服務架構,保證服務的高可用。第二,資料計算存儲架構提供底層資料挖掘支援。第三,算法模型的架構,保證推薦的效果。
首先來看彈性擴充服務的架構,整體架構基于服務網關+自研彈性擴充服務架構的結合,上遊業務端通過服務網關分發服務給各個業務端的微服務,而微服務的實作是依賴于我們自研的彈性服務架構。
自研彈性服務架構主要涉及到4個特點。
第一是支援主流的開發語言,像Java、GO、Python等。
第二,為了支援服務的彈性擴充,我們借助了容器,像ZooKeeper和Etcd這兩個都是可選的。
第三是相容目前主流的服務架構,像RPC架構裡面谷歌的GRPC,Facebook的Thrift,以及類似于spring boot的Restful Web Service。
第四是支援容器化部署,像Docker和K8S。這是我們的資源的彈性服務架構,也是目前線上使用最多的架構。
資料計算存儲架構,是我們業務中使用最多的計算架構,其中包含三個部分:
第一,是離線計算,離線計算主要借助 Hadoop、Spark 以及阿裡雲的 DataWorks 中的 MaxCompute。
第二,實時計算主要借助 Flink 和 Spark Streaming,前期還有 Storm 和 JStorm,隻是相比較而言,現在 Flink 和 Spark Streaming 用的居多。
第三,為了滿足一些線上輕量級的業務快速的應用落地,我們也使用自研的輕量級的流批合一的計算架構—— Ldrtc,主要借助 Spark Streaming 的 Mini-Batch 和 Storm 流式拓撲任務的設計思想實作,最小資源化地線上上雲資源上使用。
資料計算的存儲架構,對推薦服務而言,底層的資料存儲是我們的核心所在,資料主要從以下6個方面介紹:
一,業務中繼資料的資料庫存儲主要借助MySQL和TiDB。
二,使用者的行為及使用者畫像部分主要借助MongoDB的存儲。
三,滿足業務需要的業務資料、報表資料,主要存在 Hive、Impala、Presto、HBase 和 Clickhouse 等資料庫,之是以列出來這麼多資料庫,是因為每個資料都有它自身的一個特性來滿足不同的業務需要。
四,對于社交産品而言,其社交關系、社交網絡存儲我們選擇圖資料庫,先後主要使用Neo4J、ArangoDB、Dgraph這些圖資料庫,前期也做了一些資料的更新和變更,目前選擇使用的是業務支援更成熟的Neo4J。
五,面向線上的查詢服務資料庫主要借助Redis和Elastic。
六,除上述這些開源的資料庫的元件,為了滿足自己的業務需要,還有自研對象資料庫。
自研的對象資料庫,它主要支援聚合大value複雜資料。之是以叫對象資料庫?這個對象并不是指我們傳統的文本、圖像或視訊等對象,它是指我們在日常軟體開發時所用面向對象的類執行個體,是一個比較複雜的業務資料對象。整個對象就是一個Java或C++裡面的Object類執行個體,裡面有很多屬性、方法等。大Value資料的存儲是相對于MongoDB這樣單條資料不能超過16M的存儲,因為一些實際業務的限制,我們自研了對象資料庫。
它主要有6個特點。
第一,基于Java語言開發,支援橫向的彈性擴充,而Java也是目前使用最廣的服務端語言。
第二,資料的另一特點是資料索引分離。資料的存儲和索引部分是分開存放的。索引你可以選擇使用Redis或MongoDB,而底層的存儲,我們借助RocksDB的位元組流來滿足業務資料非固定大小的彈性擴充。
第三部分是高效的讀寫,是指對外提供批量查詢和添加修改一體化的批量資料異步更新接口,對外隻提供基礎的添加接口,内部依靠異步更新任務來将最新的資料和已有的資料融合,不需要用上遊業務端關心如何更新。
第四個特點就是相對于MongoDB單條資料不超過16M,在一些比較複雜的業務場景下使用往往受限,這也是我們自研對象資料庫的一個原因。
第五,高效存儲,主要是指在資料存儲前,把這個比較複雜的對象序列化。序列化主要基于Hadoop底層的标準序列化架構Avro。其存儲和MongoDB相比較,同等資料規模,自研對象DB存儲比在MongoDB裡面存儲能節省1/3的空間。
第六,高效通訊,是指底層傳輸依賴于高效率的RPC通訊,像Avro、Thrift。
上述是我們自研對象DB的6個核心點,也是滿足我們業務需要而獨立研發的一個行業技術創新點。
推薦平台裡面的算法模型架構,算法模型主要涉及到6個部分:
第一是基于使用者自身資料的相似,主要基于使用者自身的基本屬性,從Elastic索引庫裡面找相關的資訊查詢,多元度比對。
第二是基于使用者行為的推薦——關聯規則和CF協同過濾。
第三是圖像識别的分類,基于TensorFlow,用于使用者的顔值高中低分類,以及使用者釋出的動态圖文内容分類,動态圖文有風景、美食和人物分類等。圖像識别分類也是我們很重要的一個子產品。
第四部分是社交關系,它是我們做社交産品的一個很重要的基礎,主要基于圖資料庫做服務召回,模型中有單雙向比對以及N度人脈,這裡N一般不超過3。
第五部分是使用者畫像的建構,社交存在着物以類聚人以群分的特性,是以對我們的使用者群體也做了聚類,建構了一個個的使用者群體标簽。
最後一個就是特征工程訓練,使用目前主流的Xgbt和深度學習的架構DeepFM等。戀愛公式:“戀愛轉化率 * 機會 = 結果”,這是我們CEO任總給的一個結論,意思是要想獲得心儀的對象,機會成本的付出是必要的,而且需要遊客在不斷的探索中尋找真愛。而我們推薦的目的就是要幫使用者更加便捷的尋找到真愛。
PAI在推薦業務的經驗,PAI是阿裡雲比較成熟的機器學習架構平台,它能夠覆寫推薦的整個鍊條——從前端使用者行為的埋點收集、行為日志到加工、資料分析以及使用者畫像的建構,包括線上的學習以及推薦服務、召回、過濾及綜合排序,最終推薦給使用者。可以說PAI這一套整體的運用大大友善了,初創公司以及對推薦業務不太成熟的企業迅速落地,大大提高了整體效率,這是PAI自身的優勢。
PAI在推薦場景的算法服務,可以說業内主流的這些推薦算法,像協同過濾、ALS的矩陣分解、LR邏輯回歸、FM、 LDA這些自然語言文本處理分類算法以及涉及到人工的營運政策都考慮得非常充分。它裡面還涉及到多路召回,将各種獨立召回算法模型結果,使用像LR、GBDT、FM等綜合排序最終融合在一起。是以說PAI是非常成熟的一個機器學習平台,也能大大加快推薦業務使用效率。
相親推薦是PAI在我們實際業務中的一個具體應用場景。相親是我們伊對APP裡面最核心的一個使用者場景,使用者相親交友時,視訊直播間的推薦是非常關鍵的一環。從PAI在整個相親推薦的應用上看,主要分為4個次元。從推薦次元上看,有直播間的紅娘推薦和嘉賓的比對以及視訊品質的評分等。其次是線上訓練,像多路召回、排序及政策等,它都是基于PAI現有的機器學習算法模型來使用。再其次就是底層的資料加工和使用者特征工程的建立,以及底層資料的周期性的更新,有天級别、小時級别和分鐘級别的這些更新。整體的基礎資料準備好了,接下來就是更好的是利用PAI的成熟的服務平台,建構我們的相親推薦服務。
整體的相親推薦流程就如上述架構圖描述的。首先從使用者曝光請求發起,擷取使用者的基本資訊,再從阿裡雲的Hologres裡擷取已有的特征模型,再基于線上的特征學習訓練,把這些特征工程結合底層的離線和線上的學習計算綜合排序,最終産生的結果反回給使用者。
我們的訓練的所有資料都是來源于飛天大資料平台的處理,除了推薦平台,還有一些基礎業務報表的使用。其優勢,主要是MaxCompute計算性能比Hive和Impala都有了大幅度的提高,其成本方面也降低了50%。其次就是Streamsql也簡化了Flink的開發。Hologres本身相當于是Hbase+Druid,但更加友善使用,業務功能上類似于Redis,但是比Redis更加廉價,更加友善運用。這些都是它的一些實際應用的優點所在。
展望PAI在我們伊對未來的工作,後續我們會應用到更多的推薦業務場景,驗證其效果,其次是嘗試風控反作弊等在PAI的使用,後期我們會投入更多的人力研究使用PAI,逐漸替換内部一些自建的大資料平台。
謝謝大家!
更多大資料客戶實戰案例:
https://developer.aliyun.com/article/772449