本文首發於 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/git
摘要:在本文中,BOSS 直聘大數據開發工程師主要分享一些他們內部的技術指標和選型,以及不少小夥伴感興趣的 Dgraph 對比使用經驗。github
在 Boss 直聘的安全風控技術中,須要用到大規模圖存儲和挖掘計算,以前主要基於自建的高可用 Neo4j 集羣來保障相關應用,而在實時行爲分析方面,須要一個支持日增 10 億關係的圖數據庫,Neo4j 沒法知足應用需求。web
針對這個場景,前期咱們主要使用 Dgraph,踩過不少坑並和 Dgraph 團隊連線會議,在使用 Dgraph 半年後最終仍是選擇了更貼合咱們需求的 Nebula Graph。具體的對比 Benchmark 已經有不少團隊在論壇分享了,這裏就再也不贅述,主要分享一些技術指標和選型,以及不少小夥伴感興趣的 Dgraph 對比使用經驗。算法
配置以下:數據庫
Nebula Graph 部署 5 個節點,按官方建議 3 個 metad / 5 個 graphd / 5 個 storaged安全
主要調整的配置和 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。網絡
讀延時 <= 100 ms,業務側接口讀延時 <= 200 ms,部分超大請求 < 1 s併發
當前磁盤空間佔用 600G * 5 左右框架
CPU 耗用 500% 左右,內存使用穩定在 60 G 左右分佈式
目前來講原生分佈式圖數據庫國內選型主要比對 Dgraph和 Nebula Graph,前者咱們使用半年,總體使用對好比下,這些都是咱們踩過坑的地方。
就咱們使用經驗,Dgraph 設計理念很好,可是目前還不太知足咱們業務需求,GraphQL 的原生支持仍是有很大吸引力,可是存儲結構決定容易 OOM(邊存儲也分組的話會優化不少,官方以前計劃優化);另外,採用本身編寫的 badger 和 ristretto,目前最大的問題是從官方釋放的使用案例來看,未經大規模數據場景驗證,在咱們實際使用中,大數據量和高 QPS 寫入場景下容易出現崩潰和 OOM,且若是採用 SSD 存儲海量數據,Dgraph 的磁盤放大和內存佔用也須要優化。
若是沒有高 QPS 寫入,目前 Dgraph 仍是值得一試,對於不少快速原型的場景,做爲 GraphQL 原生圖數據庫使其很是適合作基於圖的數據中臺,這是目前的一個大趨勢,它也上線了本身的雲服務,業內標杆 TigerGraph 也在作相關探索,另外事務的完善支持也是它的優點,這塊暫時用不到,因此沒作相關評測。實測 Dgraph 在線寫入併發不高或只是離線導入數據使用的狀況下仍是很穩定的,若是想借助它的高可用和事務功能,能夠嘗試下。
對比來講,Nebula Graph 很優秀,特別是工程化方面,體如今不少細節,能夠看出開發團隊在實際使用和實現上作較了較好的平衡:
這裏主要從實際經驗對比分享,兩者都在持續優化,都在快速迭代,建議使用前多看看最新版本 release說明。
當前 Nebula Graph 作得很優秀,結合咱們如今的需求也提一點點建議:
目前 Boss 直聘將 Nebula Graph 圖數據庫應用在安全業務,相關應用已經線上穩定運行大半年,本文分享了一點經驗,拋磚引玉,指望更多技術夥伴來挖掘Nebula這座寶庫。
Dgraph 遇到的一些問題,供有須要小夥伴參考
本文系 Boss直聘·安全技術中心 文洲 撰寫