簡體   English   中英

ArangoDB FOXX 節點擴展

[英]ArangoDB FOXX node extensions

我正在嘗試將應用程序從風帆移動到 FOXX。 我原以為可以在 FOXX 中使用 node.js 模塊,但遇到了問題。 我需要在服務器上創建一個“工作”目錄來對 SCM 存儲庫執行操作。 我安裝了“remove”和“mkdirp”模塊。 mkdirp 模塊調用 fs.lstatSync,在 FOXX 下報告丟失。 安裝 fs 的本地節點副本並不能解決問題。

如果這是一個問題,那么我的一些其他任務,例如生成外部命令行程序可能無法完成。 在這種情況下,我可能需要重新考慮將所有任務轉移到 FOXX 上,但這意味着在 Sais 和 FOXX 中復制許多功能,這可能是部署噩夢。

雖然 Foxx 非常靈活,但它“只是”在 ArangoDB 的 JavaScript 環境中運行。 此環境與 Node(以及 NPM 上的一些模塊)不完全兼容,尤其是在涉及異步代碼或文件系統和網絡 I/O 時。

特別是fs模塊不同於 Node 的內置fs模塊。

幸運的是, removemkdirp模塊提供的兩個功能已經內置在 ArangoDB 的fs模塊中:

  • fs.makeDirectoryRecursive等價於mkdirp
  • fs.removeDirectoryRecursive相當於remove

可以從 ArangoDB 中生成外部進程,但相關功能是內部 API 的一部分,不打算在 Foxx 服務中使用(除其他限制外,目前無法獲取輸出,只能獲取退出狀態)。

根據您想要實現的目標以及您的性能要求,將 I/O 密集型代碼分離到外部 Node 微服務中確實可能是一個更好的主意。 Foxx 最適合作為底層數據庫的應用程序邏輯包裝器,所有 Foxx 代碼有效地與其他 ArangoDB JavaScript 代碼一起運行,因此長時間運行的請求會影響 ArangoDB 處理需要接觸 JavaScript 層的其他請求的能力。

在您的特定情況下(您提到與 SCM 軟件交互),我建議創建一個小型獨立節點服務來處理 SCM 相關邏輯,並根據需要(甚至直接在兩個服務之間)與風帆進行通信。 雖然這意味着最初會增加一些開銷,但它也比在 ArangoDB 中花費 CPU 周期處理非數據庫相關任務更具可擴展性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM