簡體   English   中英

為什么不在一個Amazon EC2實例上運行Node.js和Neo4j

[英]Why not to run Node.js and Neo4j on one Amazon EC2 instance

我將在亞馬遜上建立服務器架構。 我不熟悉最佳做法,並且在學習過程中幾乎學到了東西。

我的老板告訴我要啟動一個Amazon EC2實例,其中Node.js和Neo4j(圖形數據庫)在一個實例上運行。 兩者都應使用不同數量的可用CPU。 隨着應用程序的增大和需要更多資源,我們將簡單地克隆實例。 我的老板也沒有這方面的經驗。

我必須說我對將Node.js和Neo4j都放在一個實例/機器上有一種不好的感覺。 我以為我會使用Amazon Linux HVM發行版,因為他們對其進行了設置以使其能夠正常工作。 遺憾的是,yum官方不支持Neo4j,而是apt(Amazon Linux基於Ubuntu,並使用yum代替apt)。 因此Neo4j建議使用Debian / Ubuntu來運行他們的數據庫。

為什么將Node.js和Neo4j放在一個實例上不是一個好主意?

我可以想象的一個原因是,可伸縮性不再像在每個服務上運行兩個單獨的實例那樣動態。

可伸縮性可能是主要原因。 我認為“ node.js”是指使用node.js編寫的應用程序。 將node.js包本身安裝在運行neo4j的同一台機器上沒有問題。

可以看出,部署neo4j的一種好方法是作為服務器,而應用程序與該服務器通信。 當然,它們可以在同一台VM上,但這會帶來一些麻煩:

  • 該虛擬機上的安全性/防火牆設置必須更復雜,才能兼顧兩者的所有方面。
  • 兩者的內存/磁盤配置必須足夠。 如果您的應用程序需要增長,那么當neo4j占用大量內存而沒有為節點應用程序留下太多內存時又會發生什么呢?

通過將它們分成兩個單獨的VM,您可以分別對它們進行性能調整,以確保在那里運行的一件事運行得很好。 以后,如果需要HA群集,則可以將單個neo4j VM置於HA群集的前端,並且node.js應用程序可以繼續使用服務器,就好像什么都沒有改變一樣。 因此,可伸縮性在此受益。

在安全性和網絡配置上,將它們分為兩個虛擬機意味着您必須在第一時間考慮如何正確地進行配置。 您不希望任何人都能連接到neo4j db,您只希望應用程序能夠做到這一點。

根本問題是運行數據庫的計算機和運行代碼的計算機有不同的需求。

Node.js代碼:您的代碼是無狀態的(意味着它本身不包含任何數據)。 它的所有狀態都存儲在數據庫中。 如果有問題,您可以重新啟動計算機,或者殺死它並制造一台新的運行相同代碼的相同計算機,而沒人能分辨出差異。 如果以后需要更大的可伸縮性,則可以將代碼作為服務(例如AWS Elastic Beanstalk或Heroku)移到平台上,這些服務將全部由您來管理。 只需將其指向您的數據庫即可。

數據庫:需要持久且持久。 如果重新啟動它,則整個應用程序將在此期間處於關閉狀態。 如果它損壞了,您將丟失所有數據。 Neo4j具有高可用性軟件包,可以幫助您管理一些風險/將風險分散到多台計算機上,但這聽起來並不像您很快就能做到。 設置數據庫計算機並且不觸摸它(以更新node.js代碼)將使發生任何事情的可能性降低。 當您移植到高可用性時,這將使過渡更加無縫,因為您無需尋找新的位置來托管代碼。

暫無
暫無

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

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