阿里媽媽Dolphin智能計算引擎基於Flink+Hologres實踐

語言: CN / TW / HK

作者:徐聞春(花名 陌奈) 阿里媽媽事業部技術專家


本文整理至Flink+Hologres實時數倉Workshop北京站,點擊查看視頻回放>>>

阿里媽媽數據引擎團隊負責廣告營銷計算引擎Dophin的開發,目前支撐百萬級廣告主的營銷產品,支持萬億級數據毫秒級交互式人羣圈選、洞察分析及百億級數據秒級廣告效果分析,同時支持OLAP、實時、離線及AI超融合計算能力,為商家端產品萬相台、直通車、超級推薦和達摩盤等營銷產品提供極速的數據探索能力。

阿里媽媽Dolphin智能計算引擎介紹

用户打開淘寶 App 時,後台會有兩種類型的請求,第一種類型是滿足用户訴求的自然推薦,第二種請求是滿足用户和商家綜合訴求的廣告推薦。例如打開淘寶看到某品牌,是因為該品牌使用阿里媽媽營銷產品圈選人羣進行廣告投放,被圈選的人會看到該廣告。

媽媽1.png

商家端營銷產品的主要目標是服務於廣告主,幫助廣告主進行人羣投放,從而提升經營效果。此類營銷產品覆蓋的場景非常廣泛,包括人羣圈選、洞察分析、Lookalike、人羣推薦等場景。這些場景會有OLAP分析、AI算法和實時特徵計算的基礎能力需求,基於這樣一個數據+算法綜合能力需求背景下,阿里媽媽自研了Dolphin計算引擎。

媽媽2.png

Dolphin引擎是一個分析AI一體化的超融合引擎,擁有 OLAP分析計算、 Streaming 流計算、 Batch 批量計算和AI 算法計算四個領域能力,這些能力基於SQL組件和Index Build 組件構建:

  • SQL 組件的主要能力是 SQL轉義、路由、負載均衡、聯邦查詢。
  • Index Build 組件主要負責智能索引、多級索引(Bitmap索引、時間序列索引等)、調度控制等。

媽媽3.png

Dophin引擎提供了自研索引、智能物化、智能索引選擇、異構數據源查詢和近似計算等幾個優勢功能。其中:

  • 智能物化:智能物化指能夠自動將SQL轉化為物化視圖,無需人工手動操作。使用深度模型對業務歷史查詢 SQL 進行時序分析,比如哪些廣告主在什麼時間週期的數據使用頻率更高,可以選擇將高頻的使用數據進行物化,以提高數據查詢效率。
  • 智能索引:大多數業界的做法是為查詢建立全索引,而智能索引要做的事情就是分析 SQL 查詢語句,判斷條件命中率,從而推薦不同的索引,推薦目標為讓索引對數據查詢的過濾量最大,同時避免建立無效索引佔用。
  • 近似計算:根據統計的結果用近似的算法來計算,主要針對大規模數據,計算其近似結果。

目前,Dolphin 引擎支撐的業務規模為 2w+core,每日請求量2億+,QPS為3000+,支撐百萬級廣告主、存儲了PB級數據,涵蓋阿里10+核心BU的核心場景如人羣圈選、洞察分析等場景,業務方可以通過Dolphin 引擎就能非常高效且低成本的進行數據探索。

Dolphin引擎主要解決兩個問題,一個是超大規模場景下使用通用計算方法存在的性能瓶頸問題;第二個就是降低業務方使用引擎成本,甚至做到對底層引擎無感知。很多通用引擎並不能直接解決業務的性能問題,因此需要對數據做索引以實現查詢優化。因此我們在已有的引擎基礎上建設了Dolphin引擎。那從Dolphin引擎架構圖我們也可以看到,引擎的底層計算存儲層主要由Flink+Hologres來實現,這就相當於,廣告主每一次在Dolphin引擎上的計算,最終都會被轉換成由Flink+Hologres來完成,那麼我們為什麼選擇Flink+Hologres這套架構呢?

為什麼選用Flink+Hologres?

選擇Flink+Hologres這套架構主要來源於對底層引擎的強需求:

1、高性能

廣告場景對延遲有着很敏感的要求,如果底層引擎的性能不足,即使上層應用再做優化,也會導致計算性能大打折扣,從而導致廣告投放等不精準。

2、可擴展

底層引擎需要足夠的可擴展,這樣上層應用才能更加靈活的去承接新的業務、新的場景,應對業務高低峯期等情況

而Flink 和 Hologres能夠滿足以上兩個業務需求:

  • 實時引擎Flink支持低延遲,支持自動調優,且技術穩定成熟。用户在 Dolphin Streaming平台上提交 SQL 時,SQL會被轉譯為Flink SQL,提交給Flink引擎,這裏會利用Flink autoscale自動配置調優功能來自動調整,降低可了用户對 Flink 的學習成本和調優維護成本。
  • Dolphin引擎與Hologres更有着更長的合作歷史:在2019 年Dolphin引擎與 Hologres共建了 Bitmap 計算能力,實現業界公開信息裏最大規模、最高性能、最低使用成本的圈人能力;2020 年共建了千萬級人羣中心,實現廣告人羣統一管理;2021 年,Dolphin引擎支撐了算法業務場景,使用 Hologres向量計算能力支撐算法業務,主要支撐推薦算法裏粗排召回計算環節;2022年,支持了算法實時特徵開發能力,這裏就運用到 Hologres實時寫入和點查能力,實現了更高效的實時開發。最終,我們將Hologres的所有能力整合在一起,形成了超融合一體化引擎能力。

媽媽4.png

引擎實現細節1:如何解決超大規模OLAP計算能力

挑戰:

Dolphin OLAP 計算的核心在於解決超大規模問題。阿里媽媽廣告場景上存放着大量的數據,為了讓廣告主有更好的用户體驗,需要支持更復雜的計算邏輯和更快的計算速度。其中典型的場景有單SQL幾十張表Join、單表最高萬億行規模、單表基數最高百萬級和萬級標籤日更新。

解決方案:

例如廣告場景上有很常見的數據表:用户基礎表(性別年齡)和用户店鋪表(用户、店鋪類型),當需要查詢 20、 30 歲且逛過某品牌的用户數量時,如果數據量很少,通用引擎可以很快得出結果;但如果SQL涉及Join的表有幾十張,而且還可能存在萬億級表,此類情況下通用計算引擎無法完成計算。因此,我們基於Hologres共建了一套 Bitmap 計算方案。

具體方案流程為:

  1. 方案查詢流程:用户輸入邏輯執行 SQL ,Dolphin引擎將用户邏輯執行 SQL 轉譯為物理執行 SQL ,然後傳遞給 Hologres執行。
  2. 方案索引構建流程:MaxCompute 將標籤數據進行預處理,然後將它構建為 Bitmap 索引,再寫入到 Hologres,即可實現的 Bitmap查詢。

媽媽5.png

通過這樣的Bitmap方案,能夠讓查詢擁有更好的性能和更低的存儲, 在超大規模OLAP計算場景中,支撐了200+QPS ,平均百毫秒查詢性能,以及萬億行數據秒級精確計算,高效支撐用户交互式分析低延遲的用户體驗。

引擎實現細節2:如何實現低成本的實時開發能力

廣告場景通常都是實時計算,這裏我們通過Flink來支持是非常方便的,而我們的面向的用户通常都是不同崗位,比如算法、運營等,假如全部都用Flink去開發任務,那麼對於上層應用的同學來説就會額外增加非常多的學習成本和壓力,比如既要學會Flink SQL,還要學會Hologres SQL,流程和操作都非常繁瑣。為了降低用户的學習成本,提升開發效率,Dolphin使用OpenAPI 做了豐富的實踐,開發了一套 Dolphin Streaming實時開發平台,通過Open API 直接以服務接口調用的形式調用 Flink 提交作業、暫停作業、管理作業等。

Dolphin Streaming將 Hologres和 Flink 做了封裝,對用户暴露更簡單的開發接口Dolphin SQL 。用户在阿里媽媽交互式研發平台上提交 Dolphin SQL,SQL變會自動通過 Dolphin  Streaming 進行處理,做 SQL 解析及轉譯,將 SQL 通過 OpenAPI 發送給 Flink,拉起作業做執行。執行完後,數據會實時寫入到 Hologres,然後通過Dolphin SQL將寫入 Hologres的特徵直接查詢出來,無需再考慮存儲、配置認證信息、token信息等,只需像使用數據庫一樣開發實時作業,整個流程非常順滑簡單,大大提高開發效率。

媽媽6.png

demo1:計算用户最近50條行為序列

用户最近 50 條行為序列是算法序列模型裏常用的特徵,一般需要開發行為序列特徵,如果用Dolphin Streaming 開發,只需簡單三步:

  1. 第一步,定義數據源表。Biztype可直接填寫為tt ,tt 是阿里的實時數據源。這裏如果要寫Flink SQL,則需要登入tt管理平台,查詢topic並訂閲subID。
  2. 第二步,定義輸出表。Biztype=feature 代表寫入到 Hologres,然後填好 PK 參數即可。
  3. 第三,定義計算邏輯。SQL 執行完之後,數據源源不斷地寫入,通過 select user_id, product_id from ** where user _id=**即可查詢用户特徵。

媽媽7.png

demo2 :實時 Debug 功能。

在實時開發時,經常需要查看上游數據源,以往的方式通常需要定義一個print輸出源,然後定義輸入源和執行邏輯,將數據寫到標準輸出,再通過查看日誌才能獲取到上游數據源。而我們實現了更簡單的方式。

通過 create table 形式註冊一張表以後,執行 select user_id from某表,結果即直接展示表的明細。

媽媽8.png

通過Dolphin Streaming,我們可以非常高效的將複雜計算邏輯進行自動封裝與轉換,用户無需自己寫SQL,也不需要去學習多種開發語言,就能非常高效的拿到想要的數據,大大降低了學習成本和使用門檻,同時也節省了開發效率。

業務場景實戰

場景1:實時營銷推薦

實時營銷推薦是廣告中最常見的場景,在該場景下,最大的痛點在於:廣告主在使用營銷平台時,常常面對如何推廣、通過何種渠道推廣等問題。

基於這樣的用户訴求,從算法角度為廣告主解決該問題:通過廣告主點擊某些信息、某些廣告點位時,判斷廣告主意向,結合意向和廣告主本身商家店鋪和商品信息,為其推薦能提升經營效果的商品以及效果更優的投放渠道,從而讓廣告主的投放體驗更好。

基於以上需求,我們開發了一套用於捕獲用户實時行為的作業:通過 Flink 計算商家實時行為日誌,存儲到Hologres,然後在線模型直接讀取特徵,通過實時特徵提升模型的推薦效果。

媽媽9.png

Dolphin Streaming方案主要使用了 Flink 實時計算、Hologres實時寫入以及行表的點查能力,使整體開發效率提升三倍以上,推薦效果更佳。

場景2:向量召回計算

在算法裏萬物皆可向量表示,尤其是在推薦算法和召回流程中,經常使用向量召回獲取 Top K 相似對象,在阿里媽媽向量召回的場景中,我們使用Hologres的向量召回能力,以Lookalike場景為例具體説明:

Lookalike是廣告產品的重要能力,核心是基於種子人羣特徵選擇相似人羣,常應用在拉新場景。以電商場景為例,其原理可以抽象理解為針對已經在店鋪有過行為的用户,分析其特徵,尋找與之特徵相似的用户,將寶貝推廣給此類用户,從而促進店鋪新用户增長。基於向量Lookalike算法實現過程如下:

  • 第一步,廣告主圈種子人羣。
  • 第二步,基於種子人羣計算中心向量,再通過中心向量從整體用户裏召回 Top K相似的用户。

媽媽10.png

傳統算法下,Dolphin會使用沒有向量召回能力的傳統數據庫,將數據導入到數據庫中。先由Dolphin查詢數據庫,計算種子人羣中心向量,然後通過Faiss將Top K 向量查出。傳統方案整體運維和管理成本較高,因此我們對其進行了升級,直接使用 Dolphin 調用 Hologres,因為Hologres能夠同時支持數據庫功能和Proxima向量功能,簡化了計算流程。

基於 Hologres的向量召回能力,我們開發了實時向量召回和批量向量召回能力,用户直接輸入 SQL 即可調用底層 Hologres,Dolphin封裝了容災和負載均衡等重要能力,簡單地填入參數即可完成批量向量召回的計算。其中

  • 實時向量召回:支撐1000+QPS,平均延遲50ms+,支撐了直通車、萬向台、達摩盤等多個商家段營銷業務場景
  • 批量向量召回:目前已對外產品化,提升開發效率3倍+,有效支撐達摩盤、直通車等多個算法業務

總結

基於 Flink+ Hologres 的強大能力,我們得以建設更貼近業務領域的超融合一體化Dolphin引擎,主要包括基於 Bitmap 的高性能 OLAP 計算、更簡單靈活的實時開發能力以及基於Hologres強大的 AI 向量召回能力。

未來,我們會在智能化、一體化方面繼續探索,不斷提升用户體驗。

瞭解Hologres:http://www.aliyun.com/product/bigdata/hologram