揭祕可視化圖探索工具 NebulaGraph Explore 是如何實現圖計算的

語言: CN / TW / HK

前言

在可視化圖探索工具 NebulaGraph Explorer 3.1.0 版本中加入了圖計算工作流功能,針對 NebulaGraph 提供了圖計算的能力,同時可以利用工作流的 nGQL 運行能力支持簡單的數據讀取,過濾及寫入等數據處理功能。

本文將簡單分享下 NebulaGraph Explorer 中集成圖計算的基本實現原理。

整體架構

上圖 1 描述了 NebulaGraph Explorer Workflow 所涉及的相關係統及調用過程。

其中:

  • Explorer:主要負責產出工作流的配置,提供操作工作流的 HTTP API 服務,可視化展示及讀取圖計算工作流運行結果的能力。
  • Dag-Ctrl:主要提供獨立解析工作流,下發任務的能力,提供相應的 Job(單次運行的 workflow)和 Task (Job 中的具體任務節點)日誌及啟停能力,具有獨立 web 服務。
  • Analytics:提供運行具體任務節點的能力(運行算法,查詢,寫入等)
  • Datasources:目前 Explorer 支持的各類數據源。

前端交互界面

我們在 NebulaGraph Explorer 界面上利用高定製、輕量級的開源自研流程圖庫 NebulaGraph-VEditor 開發。通過拖拉拽的交互方式,生成 DAG(有向無環圖),並生成對應的 Workflow Code(流程描述代碼),其中的各種算法節點通過 JSON 配置對應到 DAG-Ctrl 和 Analytics 的算法配置,可以靈活添加新任務節點。其配置結構大致如下:

analytics_sssp:{
      name: 'SSSP',//算法名稱
      input: ['src', 'dst', 'weight'],// 輸入字段和列
      output: ['vid', 'count'],// 輸出字段和列
      form: {// 表單配置
        root: {
          component: 'input',
          isParam: true,
          label: 'RootId',
        },
      },
      algorithm: ""// Web圖算法函數
}

其中,通過設計兩種錨點(參數錨點,數據錨點)來進行 Task 節點間的數據交互,中間數據格式統一抽象為 M*N 的 csv 格式

  • 對於數據錨點,可以通過連線,將上游節點的輸出錨點匹配到下游節點的輸入錨點上,因此對於每個節點來説,數據輸出和輸入都表達為列的匹配即可。例如 Query 查詢節點,其輸入輸出可以根據 nGQL 動態變化,因此輸入輸出的錨點也是動態可變的,用户可以自由地將 Query 輸出的結果輸出到一個或多個計算任務節點中。
  • 對於參數錨點,則可以改變算法的配置參數,或 nGQL 的字符串變量,這對於經常調整算法參數的計算流程非常有用,另外參數錨點也可以來自於上游的數據錨點,例如對圖進行 SSSP(單源最短路徑)運算,就可以通過參數錨點動態的從上游數據錨點中獲取需要進行計算的根節點 ID,如下圖:

(黃色標識的為參數錨點,白色標識的為數據錨點)

可以利用這個特性,將常用的 nGQL 功能模塊抽象為函數節點,快速構建圖業務流程

NebulaGraph Explorer Server 任務管理

NebulaGraph Explorer Server 會存儲用户的 workflow 做為模板,用户可以利用前台界面和 API 網關調用 workflow 生成對應 Job 實例,將對應的 workflow 配置邏輯傳輸到 DAG-Ctrl 中運行。目前只支持手動生成實例,未來會加入定時調度能力,加強對 workflow 和 job 的管理能力。

在生成 Job 實例後,NebulaGraph Explorer Server 端會定時同步 DAG-Ctrl 的 Job 運行情況。

DAG-Ctrl

DAG 對用户配置的有向圖進行解析後,會下發到 Analytics 集羣中並行運算。這裏我們抽離了 DAG 作為獨立 Server,支持和 Explorer 分離部署,通過 HTTP 進行數據互通,NebulaGraph Explorer 默認會附帶 DAG-Ctrl 包一鍵啟動,併發壓力情況較小的情況下,適合部署在一台機器上運行。

由於下發任務需要登入相應的 Analytics 機器,因此需要用户先安裝好 Analytics 後,對 DAG 所在機器給予 SSH 授權後才能使用。

DAG 在拿到對應的有向節點任務後會進行依賴優先級排序,依次 SSH 到 Analytics 機器中啟動進行運算,並將運算結果地址傳入下個節點任務中作為輸入。

DAG 通過獨立的 DB 用來存儲運行過程中產生的任務和日誌等數據。

NebulaGraph Analytics

NebulaGraph Analytics 是一款高性能的圖計算工具,Explorer 不會附帶 Analytics 啟動,也不會感知到 Analytics 節點,主要通過 DAG-Ctrl 完成 Analytics 集羣節點的交互配置,因此 NebulaGraph Explorer 提供一個配置界面供用户在線配置 DAG 需要的相關配置。

其中,Analytics 集羣和 HDFS 地址通過配置直接存儲在 DAG-Ctrl 中,NebulaGraph 則會默認在 NebulaGraph Explorer 登錄後將登錄信息加密後直接傳輸到 DAG-Ctrl 中。在 Analytics 計算服務運行時會從 DAG-Ctrl 下發的配置中取得需要寫入或讀取的數據源地址及相關的驗證信息,完成計算後將數據寫入到指定數據源中。關於 Analytics 的詳細介紹可以參考我們之前發佈的文章。

工作流結果

NebulaGraph Explorer 對結果的讀取主要有兩種

  1. 直接撈取數據源中的數據,如直接讀取 NebulaGraph、HDFS、CSV 等,這樣在海量數據下可以獲取到完整的計算結果。
  2. 通過 Explorer 可視化查看,因為受限於 HTTP 的傳輸能力,在大數據量下,取 HDFS 數據會取指定大小的一部分文件回來進行渲染可視化,因此相當於對數據進行了採樣後再展示。而對於 NebulaGraph 數據源則會通過分頁在前台展示全量工作流結果。

在計算結果導入到 NebulaGraph Explorer 的畫布上可視化後,由於計算結果返回的是一系列點 ID,不能展示邊和詳細數據,因此我們提供了一個自動補齊數據的方案,會請求導入到畫布的點之間所有可能的邊數據,這樣我們可以大致模擬出工作流結果間的圖拓撲結構。

圖計算可視化

對圖計算出的結果集,我們針對圖算法的類別進行了針對性的可視化展示。

  • 節點重要度、聚類係數、路徑長度 - 值歸一化到節點尺寸
  • 聚類 - 通過顏色標記 label
  • 圖特徵 - 對應形狀的邊顏色 / 高亮

如上圖進行 BNC (中介中心性計算)後,節點重要度一目瞭然。

Web 圖計算

除了以上介紹的圖計算工作流外,針對小數據量,重可視化分析的場景,NebulaGraph Explorer 額外提供了一套輕量級的 Web 端單機圖計算方案,針對畫布中用户已探索出的圖數據進行實時圖計算。

如下圖所示,目前支持工作流中的所有圖算法,但由於部分不穩定算法(如 LPA), 分佈單機及同步異步算法間的差異,少部分圖算法會和工作流圖計算結果有一些差異。

性能方面,我們通過利用 Rust 將圖算法編譯為 WASM 在 Web 端運行,對於點邊數量 1w 左右的場景, Floyd-Warshall 這類 O(n^3) 基本在 2s 左右即可完成,能實時快速的對畫布圖數據進行可視化分析,提升小數據量下的圖算法可視化體驗。

關於未來

未來 NebulaGraph Explorer Workflow 會逐漸完善並豐富目前的功能,同時在實際業務需求的基礎上對現有功能進行優化,主要包含以下幾個方向:

  • 加入定時調度,任務監控
  • 接入更多算子來實現數據清洗,合併等完備的ETL邏輯
  • 接入更多數據源
  • 定義完備的圖計算可視化語言

歡迎免費試用我們的 NebulaGraph Explorer,體驗完整的 workflow 流程。


謝謝你讀完本文 (///▽///)

NebulaGraph Desktop,Windows 和 macOS 用户安裝圖數據庫的綠色通道,10s 拉起搞定海量數據的圖服務。通道傳送門:http://c.nxw.so/aved3

想看源碼的小夥伴可以前往 GitHub 閲讀、使用、(^з^)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一起交流圖數據庫技術和應用技能,留下「你的名片」一起玩耍呢~