螞蟻金服過去十五年,重塑支付改變生活,為全球超過十二億人提供服務,這些背後離不開技術的支撐。在 2019 杭州雲栖大會上,螞蟻金服将十五年來的技術沉澱,以及面向未來的金融技術創新和參會者分享。我們将其中的優秀演講整理成文并将陸續釋出在“螞蟻金服科技”公衆号上,本文為其中一篇。
今年 4 月,螞蟻金服董事長兼 CEO 井賢棟在參與第二屆一帶一路國際合作高峰論壇時表示,通過九年的實踐,螞蟻金服改善了中小企業的融資管道并形成了 310 模式,即 3 分鐘線上申請、1 秒鐘稽核放款、0 人工幹預。與此相對的是,僅僅在兩年前,有相關人士表示,他們出台的 310 模式卻是 3 周申請,1 月稽核,0 幾率獲貸。
那麼,螞蟻金服是如何通過不斷探索應用金融新技術,為中小企業提供融資便利,其中的 1 秒鐘稽核放款,又是如何做到的呢?在這裡,我們來談談其中非常關鍵的一項核心技術,線上圖計算技術。
線上圖計算就是将流式計算與圖計算結合起來,能做到進行實時的圖計算的技術。螞蟻金服在這個方向上經過多年研發,在關鍵技術上做出了突破性的建立,并形成了面向金融場景的解決方案。
螞蟻線上圖計算的應用場景
螞蟻研發線上圖計算技術,是因為金融場景需要這樣的技術來解決問題。
比如,在金融風控中的實時反套現場景。套現,指的是采用違法或者虛假的手段交換而擷取現金利益的行為,一般多用于信用卡和公積金等場景。

花呗是一個消費信貸類産品,使用者可以基于花呗的額度消費,并定期還款。花呗反套現是花呗整體風控中非常關鍵的一個環節,如何實時的、準确的識别套現行為則是花呗反套現的關鍵。
如圖所示,套現的買家通過花呗進行一筆交易的支付,并通過一系列複雜的資金流動,最終通過轉賬回款進行資金的套現。
通過資料模組化,将整體的資金流動抽象成資金關系網絡,基于資金關系網絡之上進行子圖的識别和分析,進而有效的識别套現行為。
通過實時反套現的例子,我們可以得到線上圖計算的三個基本需求:
首先,建構金融級的資金網絡。基于線上的使用者資金行為,實時建構高可靠的金融級資金網絡;
其次,基于實時子圖的分析決策。基于實時建構的高可靠的金融級資金網絡之上,可以基于子圖進行實時的分析和計算,并最終提供線上的決策;
最後,是動态的子圖網絡建構。在子圖的分析過程中,需要根據使用者的資金網絡行為,動态的進行子圖的建構和擴充。
再說說大家比較熟悉的螞蟻森林場景。
螞蟻森林中有多種形式的好友互動,如支付寶好友之間可以互相收取能量,以及好友、親人之間可以一起合種一棵樹。
在螞蟻森林中有人與人的關系,以及人與樹的關系等。它不僅需要支援實時的關系資料建構,還需要支援高性能低延遲的關系資料查詢和一緻性的關系資料修改等需求。
通過螞蟻森林的例子,我們也可以得到線上圖計算其他三個需求。
首先,需要支援百萬級的并發支援。螞蟻森林目前有5億+的使用者,需要支援百萬級的 QPS 的需求并且滿足毫秒級的響應支援;
其次,是萬億級關系資料存儲的需求。由于螞蟻森林的資料規模龐大,包括使用者關系、種樹關系、合種關系等,關系非常多和複雜,是以需要提供萬億級的圖存儲能力。
最後,是一緻性的需求。比如在好友之間進行綠色能力的偷取過程中,由于并發量非常大,需要保證明時更新過程中的強一緻性的需求。
通過前面實時反套現和螞蟻森林的例子,我們對金融級的線上圖計算的需求做一下簡單的總結。
我們将需求分成兩部分,第一部分是功能需求:
首先,需要提供海量的圖資料存儲的能力;
其次,在海量的圖資料存儲之上提供低延遲 I/O 通路能力;
最後,通過低延遲的 I/O 擷取子圖關系之後進行流計算和圖計算等多種模态的融合計算。
第二部分是穩定性需求,由于金融場景的特性,是以穩定性顯得尤為重要。這裡主要列舉兩點:
首先,需要支援金融級的容災和高可靠性,如三地五中心的故障恢複等。
其次,還需要支援低成本和彈性的擴縮容。
螞蟻線上圖計算整體架構
在介紹完螞蟻金服線上圖計算相關的場景和需求之後,我們來一起了解下螞蟻金服線上圖計算的核心關鍵技術及過程中的思考。
首先,我們來一起看下螞蟻線上圖計算的整體架構圖。
在最上層,螞蟻線上圖計算提供一套統一的圖開發平台。基于統一的圖開發平台,使用者可以基于關系中繼資料和統一的 DSL 進行作業的開發。目前統一的 DSL 主要通過 SQL 和 Gremlin 融合的方式進行程式設計開發。同時基于使用者的 DSL,會實時的建構分布式的 DAG 進行運作。
建構完成後,分布式的任務會實時的對線上的日志資料和事件資料進行實時的處理。這裡主要包含兩條鍊路,一條鍊路會基于實時處理完成的日志資料和事件行為會寫入到高性能的圖資料庫,并基于資料實時的建構高性能的圖緩存,提供快速高效的子圖抽取。
另外一條鍊路則會基于實時處理的資料,來動态的決策是否需要一個圖的 Traversal 和計算,并在計算的過程中,從高性能緩存快速的抽取子圖進行計算,最後将計算的結果輸出提供線上使用。
通過前面的架構圖,可以看到,螞蟻的金融級線上圖計算主要有三個技術方向:
首先,是流圖融合的計算能力。需要在一套系統中,支援融合的計算能力,能夠通過流計算和圖計算的融合來實作線上圖計算的全鍊路;
其次,是高壓縮比圖緩存。通過高壓縮來實作圖資料可以完整的存在在記憶體中,進而實作快速、高效的子圖抽取;
最後,是金融級的海量圖資料庫。通過金融級的海量圖資料庫來實作海量的關系資料存儲和金融場景下的高可靠。
下面,我們來分布分布介紹一下這三個方向的核心技術點。
線上圖計算之流圖融合計算
第一個關鍵技術是:流圖融合計算。
以花呗反套現的場景為例,并不是每一筆交易或回款行為都需要進行套現行為的識别,需要先進行一定的規則的處理。比如,基于實時的統計交易的筆數或者回款的金額,在滿足一定的條件後才開始進行子圖的疊代計算。最後,基于圖的疊代計算的結果,在進行資料鍊路的處理後再提供給線上使用。是以,一個場景在完整的計算鍊路中,需要流計算和圖計算兩種模态的融合計算。
在傳統的計算方式中,則會通過流計算和圖計算進行組合的方式來實作全鍊路,比如通過 Flink、GraphX、Neo4j 等多個系統進行串聯。 但是通過傳統的方案,使用者需要學習多套系統,并且需要維護多套系統進行銜接。而且由于多套系統銜接,是以會産生額外的資料存儲和延遲。是以,在螞蟻金服,我們打破計算模态的邊界,将流計算和圖計算進行融合,提供流圖融合的計算系統。使用者可以通過一套 API、一套計算系統來實作完成流圖融合的鍊路,由于是一套系統,同時能減少使用者的運維成本。
動态DAG
同樣以花呗反套現場景為例,在實作了流圖融合的計算能力之後,由于是否進行圖計算,以及采用什麼樣的圖計算算法都是由資料進行動态決策,無法預先設定。是以,傳統的靜态 DAG 無法滿足目前的需求,這裡,我們通過将資料流和控制流相結合,并提供動态 DAG 的能力,進而實作按需計算,彈性的擴縮容。
在提供了融合計算和動态計算的能力之後,如何讓使用者進行快速便捷的開發顯得尤為重要。
這裡我們通過 SQL Plus(Gremlin)的方式進行融合計算的開發,使用者可以通過 SQL 來建構整體的 Pipeline 的流程,同時,引入 GraphView 的概念,基于 SQL 可以離線和實時的建構 Graph View。基于 GraphView 之上,可以通過 SQL+Gremlin 實作基于資料驅動的線上圖計算能力。
同時,由于 SQL 大部分開發者都比較熟悉,可以減低使用者的學習、開發、調試的門檻,易學易用。目前螞蟻金服也在關注最新的圖查詢語言國際标準 GQL,未來也會融入于此。
基于以上三個特性,使用者可以快速的建構流圖的一體化作業。
接着,使用者在上線一個算法政策的同時,則需要對政策進行驗證,這裡使用者需要針對流式的資料進行有效的仿真,來判定目前的算法是否有效。
基于目前的線上圖計算架構,我們可以通過模型的有效抽象,将曆史的圖資料和請求進行有效的回放來實作仿真和線上的一體化架構能力。
與此同時,由于仿真的特性,會對曆史版本的資料快照進行通路,進而會引起圖資料存儲的加速膨脹。 由于這裡采用流式回放的方式進行仿真,我們可以通過基于驅動的資料 GC 政策,進而避免資料的過量膨脹。 同時,基于多級緩存的政策,進而實作提升圖仿真的吞吐能力。
以上就是融合計算方向的四個關鍵技術,通過以上的四個特性,使用者可以高效、友善的進行任務的建構和計算。
接下來,會讨論如何快速的進行子圖建構。
線上圖計算之高性能圖緩存
這裡重點介紹一下螞蟻的高性能圖緩存,基于完美 Hash 函數和專業的壓縮能力,将資料緩存在記憶體中進行線上服務,進而實作子圖場景下的低延遲和高吞吐。
針對高性能的圖緩存,記憶體的占用顯得尤為重要。這裡重點看下螞蟻圖緩存和業界系統的壓縮比對比圖。這裡采用的是基于 Twitter 的 User-Follow 的開放資料集。
可以看到,由于圖的關聯特性,是以業界開源的系統在原始圖的基礎上,都有一定程度的放大,而業界做得比較好的 TigerGraph 做到了相對于原始大小的 40% 左右的記憶體使用。而螞蟻的圖緩存可以實作 20% 的原始記憶體大小。比目前業界最佳,還要節省一半的記憶體使用。
通過高壓縮比,我們将圖資料完整的存放在記憶體中,下面我們可以對比一下子圖抽取的 RT 性能。
同樣是基于 Twitter 的 UserFollow 的資料,可以看到在 1 度、2 度、3 度的場景下,特别是 1 度的場景,整體的時間延遲僅是 Tiger Graph 的 20% 左右。
通過高性能圖緩存,針對子圖的高性能查詢,才能實作線上的實時鍊路計算。
線上圖計算之金融級圖資料庫GeaBase
下面我們來看下,如何實作金融場景下的高可靠和一緻性的能力需求,這裡重點介紹下螞蟻的金融級圖資料庫 GeaBase。
GeaBase 内部通過實作 Mirco Shards 的方式來實作資料分片。并基于 Mirco Shard 的資料分片實作 Cost-Base 的資料遷移和自動的負載均衡。同時,借助于螞蟻的基礎架構體系,實作了三地五中心的城市級容災政策。
通過對比,我們可以看到,在單機、單副本和機房級故障時,GeaBase 的災備能力均優于 HBase。與此同時,在城市級容災的場景下,GeaBase 可以實作資料的恢複和不丢失。
與此同時,GeaBase 還實作了一緻性的能力,來滿足金融場景的資料強一緻性的需求。GeaBase 通過實作 Raft 協定來實作資料的一緻性。并且可以讓業務根據自身業務需求自由選擇,是最終一緻性還是強一緻性。
螞蟻的線上圖計算目前廣泛應用于螞蟻的多條業務線,支援了風控、社交和營銷等 100 多個業務場景。目前在螞蟻内部有 2000 多台機器的叢集規模 7*24 小時運作。
與此同時,螞蟻逐漸把這些能力輸出給外部金融級客戶,如常熟農商銀行和泰隆銀行。比如在常熟農商銀行,螞蟻金服與行方聯合共研了蟻燕知識圖譜項目,基于螞蟻研發的線上圖計算技術,在大資料量環境下,通過海量關聯分析,提前進行擔保關系預判,實作擔保圈風險的秒級預判和風險提醒,有效管控風險的同時,切實提高了信貸審批效率。螞蟻金服不僅自己實作了 310,還通過合作輸出給客戶,為實作普惠金融而努力。
未來,螞蟻金服會繼續打磨線上圖計算的技術能力,并向更多的合作夥伴開放,一起将線上圖計算推廣到更多的場景中去。