阿里媽媽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:https://www.aliyun.com/product/bigdata/hologram