天天看點

圖資料庫 Nebula Graph 在 Boss 直聘的應用

圖資料庫 Nebula Graph 在 Boss 直聘的應用
本文首發于 Nebula Graph 官方部落格: https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/

摘要:在本文中,BOSS 直聘大資料開發工程師主要分享一些他們内部的技術名額和選型,以及很多小夥伴感興趣的 Dgraph 對比使用經驗。

業務背景

在 Boss 直聘的安全風控技術中,需要用到大規模圖存儲和挖掘計算,之前主要基于自建的高可用

Neo4j

叢集來保障相關應用,而在實時行為分析方面,需要一個支援日增 10 億關系的圖資料庫,Neo4j 無法滿足應用需求。

針對這個場景,前期我們主要使用

Dgraph

,踩過很多坑并和 Dgraph 團隊連線會議,在使用 Dgraph 半年後最終還是選擇了更貼合我們需求的

Nebula Graph

。具體的對比

Benchmark

已經有很多團隊在論壇分享了,這裡就不再贅述,主要分享一些技術名額和選型,以及很多小夥伴感興趣的 Dgraph 對比使用經驗。

技術名額

硬體

配置如下:

  • 處理器:Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz 80(cores)
  • 記憶體:DDR4,128G
  • 存儲:1.8T SSD
  • 網絡:萬兆

Nebula Graph 部署 5 個節點,按官方建議 3 個 metad / 5 個 graphd / 5 個 storaged

軟體

  • Nebula Graph 版本: V1.1.0
  • 作業系統:CentOS Linux release 7.3.1611 (Core)

配置

主要調整的配置和 storage 相關
# 按照文檔建議,配置記憶體的 3 分之 1
--rocksdb_block_cache=40960

# 參數配置減小記憶體使用
--enable_partitioned_index_filter=true
--max_edge_returned_per_vertex=100000           

名額

目前安全行為圖儲存 3 個月行為,近 500 億邊,10 分鐘聚合寫入一次,日均寫入點 3,000 萬,日均寫入邊 5.5 億,插入延時 <=20 ms。

圖資料庫 Nebula Graph 在 Boss 直聘的應用
圖資料庫 Nebula Graph 在 Boss 直聘的應用
圖資料庫 Nebula Graph 在 Boss 直聘的應用

讀延時 <= 100 ms,業務側接口讀延時 <= 200 ms,部分超大請求 < 1 s

圖資料庫 Nebula Graph 在 Boss 直聘的應用
圖資料庫 Nebula Graph 在 Boss 直聘的應用

目前磁盤空間占用 600G * 5 左右

圖資料庫 Nebula Graph 在 Boss 直聘的應用

CPU 耗用 500% 左右,記憶體使用穩定在 60 G 左右

圖資料庫 Nebula Graph 在 Boss 直聘的應用

Dgraph 使用對比

目前來說原生分布式圖資料庫國内選型主要比對 Dgraph和 Nebula Graph,前者我們使用半年,整體使用對比如下,這些都是我們踩過坑的地方。

圖資料庫 Nebula Graph 在 Boss 直聘的應用

就我們使用經驗,Dgraph 設計理念很好,但是目前還不太滿足我們業務需求,GraphQL 的原生支援還是有很大吸引力,但是存儲結構決定容易 OOM(邊存儲也分組的話會優化很多,官方之前計劃優化);另外,采用自己編寫的 badger 和 ristretto,目前最大的問題是從官方釋放的使用案例來看,未經大規模資料場景驗證,在我們實際使用中,大資料量和高 QPS 寫入場景下容易出現崩潰和 OOM,且如果采用 SSD 存儲海量資料,Dgraph 的磁盤放大和記憶體占用也需要優化。

如果沒有高 QPS 寫入,目前 Dgraph 還是值得一試,對于很多快速原型的場景,作為 GraphQL 原生圖資料庫使其非常适合做基于圖的資料中台,這是目前的一個大趨勢,它也上線了自己的雲服務,業内标杆 TigerGraph 也在做相關探索,另外事務的完善支援也是它的優勢,這塊暫時用不到,是以沒做相關評測。實測 Dgraph 線上寫入并發不高或隻是離線導入資料使用的情況下還是很穩定的,如果想借助它的高可用和事務功能,可以嘗試下。

對比來說,Nebula Graph 很優秀,特别是工程化方面,展現在很多細節,可以看出開發團隊在實際使用和實作上做較了較好的平衡:

  • 1.支援手動控制資料平衡時機,自動固然很好,但是容易導緻很多問題
  • 2.控制記憶體占用(enable_partitioned_index_filter 優化和設定單次最大傳回邊數目),都放在記憶體固然快,但有時候也需要考慮資料量和性能的平衡
  • 3.多圖實體隔離,多張圖實在太有必要
  • 4.nGQL 最大程度接近最常用 MySQL 語句,2 期相容 Cypher 更加完美;對比 GraphQL 固然香,但寫起複雜圖查詢真的讓人想爆炸,可能還是更加适合做資料中台查詢語言
  • 5.和圖計算架構的結合,最近釋放的 Spark GraphX 結合算法非常有用,原先我們的圖計算都是基于 GraphX 從 Neo4j 抽取後離線計算團夥,後續打算嘗試 Nebula Graph 抽取

這裡主要從實際經驗對比分享,二者都在持續優化,都在快速疊代,建議使用前多看看最新版本 release說明。

建議

目前 Nebula Graph 做得很優秀,結合我們現在的需求也提一點點建議:

  • 1.更多離線算法,包括:現有的圖神經網絡這塊的支援,圖線上查詢多用在分析,真正線上應用目前很多還是圖計算離線算完後入庫供查詢
  • 2.Plato 架構的合并支援,Spark GraphX 相對計算效率還是低一些,如果能整合騰訊的 Plato 架構更好
  • 3.借鑒 TigerGraph 和 Dgraph,支援固化 nGQL 查詢語句直接生成服務 REST 端點,HTTP 傳入參數即可查詢,這樣可快速生成資料查詢接口,不用背景再單獨連接配接資料庫寫 SQL 提供資料服務

目前 Boss 直聘将 Nebula Graph 圖資料庫應用在安全業務,相關應用已經線上穩定運作大半年,本文分享了一點經驗,抛磚引玉,期望更多技術夥伴來挖掘Nebula這座寶庫。

Dgraph 遇到的一些問題,供有需要小夥伴參考

參考文章

本文系 Boss直聘·安全技術中心 文洲 撰寫

推薦閱讀

繼續閱讀