繁体   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