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

NebulaGraph發表於2023-03-02

前言

在視覺化圖探索工具 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 使用者一起交流圖資料庫技術和應用技能,留下「你的名片」一起玩耍呢~

相關文章