我即将在 Amazon 上设置服务器架构。我不熟悉最佳实践,而且几乎是边做边学。
我的老板告诉我启动一个 Amazon EC2 实例,并在同一个实例上运行 Node.js 和 Neo4j(图形数据库)。两者都应使用不同数量的可用 CPU。随着应用程序变得越来越大并且需要更多资源,我们只需克隆实例即可。我的老板也没有这方面的经验。
我必须说,我对将 Node.js 和 Neo4j 放在一个实例/机器上有一种不好的感觉。我想我会使用 Amazon Linux HVM 发行版,因为他们将其设置为可以与他们的服务配合良好。遗憾的是,Neo4j 官方不支持 yum,而是支持 apt(Amazon Linux 基于 Ubuntu,使用 yum 而不是 apt)。因此 Neo4j 建议使用 Debian/Ubuntu 来运行他们的数据库。
为什么将 Node.js 和 Neo4j 放在一个实例上不是一个好主意?
我可以想象的一个原因是,可扩展性不再像运行每个服务的两个单独实例那样动态。
最佳答案
可扩展性可能是主要原因。我认为这里的“node.js”是指使用node.js 编写的应用程序。将 node.js 包本身安装在运行 neo4j 的同一台机器上是没有问题的。
认为部署 Neo4j 的一个好方法是作为服务器,让您的应用程序与该服务器通信。当然,它们可以位于同一个虚拟机上,但这会带来一些复杂性:
- 该虚拟机上的安全/防火墙设置必须更加复杂,以考虑到两者共存的所有方面。
- 内存/磁盘配置需要足以满足两者的需要。如果您的应用程序需要增长,当 Neo4j 占用大量内存而没有为您的 Node 应用程序留下太多内存时会发生什么情况,反之亦然?
通过将它们拆分为两个独立的虚拟机,您可以分别对它们进行性能调整,以确保其中运行的那一个运行得非常好。稍后,如果您需要 HA 集群,您可以将单个 Neo4j 虚拟机设置为 HA 集群的前端,并且 Node.js 应用程序可以继续使用服务器,就好像没有发生任何变化一样。因此,可扩展性有好处。
在安全和网络配置方面,将它们分成两个虚拟机意味着您必须在第一次就考虑如何正确配置。您不希望任何人都能够连接到您的 neo4j 数据库,您只希望您的应用程序能够做到这一点。
关于linux - 为什么不在一个 Amazon EC2 实例上运行 Node.js 和 Neo4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30350940/