0

我是一个快乐的Amazon EC2用户,我在这里和那里学习了一些教程(主要是这个)并且我成功地部署了一个node.js应用程序。

我目前有这t2.nano台机器,它可以作为我的几个用户的测试环境正常工作。目前我的 iOS 应用程序几乎准备就绪,因此在大版本发布之前,我需要注意可扩展性并为更广泛的用户群体做好准备。

我乐观地假设我很快就会有 1000 个用户。我想准备整个环境以至少为该数量的用户顺利工作。但问题是 - 我什至不知道应该如何开始配置所有内容。

如果我错了,请纠正我,但我假设我需要 2-3 台机器t2.medium(?)所有这些机器都运行我的node.js代码并由 处理Amazon's Load Balancer,但是数据库呢?

mongodb如果我做对了,我需要在一台机器(上面提到的一台)上设置一个主实例t2.medium,在另外两台机器上设置从属实例?

但是 - 如果我这样做 - 在机器之间复制数据怎么样?另外——每台机器node.js上运行的每台服务器t2.medium都必须连接到数据库——它应该指向主服务器吗?

我试图找到任何教程 - 类似于我用来部署单个应用程序的教程 - 但我正在努力解决它。我发现这个 youtube 视频,其中一个人描述了他如何用 5mongodb台机器(一台主机,其余的是从机)设置环境,但我不确定这是否是一个好的方向。

你们能帮我,在这一点上给我任何提示吗?我什至不知道什么时候开始,在这一点上我真的很感激任何事情。谢谢!

4

2 回答 2

1

我将尝试逐步回答这个问题。但请记住,这只是众多设置中的一种,可能无法完全满足您的需求。

拓扑:

  1. AWS
  2. 节点.js
  3. MongoDB

AWS - 您提到您现在正在争取 1000 个用户。您对您的应用程序所说的只是 IOS,因此我们不知道后端数据库必须有多密集(CRUD 操作)。

如果你需要它,我会可扩展性开始。因此,我强烈建议亚马逊称之为NAT Gateway。这将允许您的 Node.js 位于面向 Internet 的服务器上,而 MongoDB 将位于其后面。这首先是保护 Mongo 免受任何不必要的访问。换句话说,初始设置将是 1 个网关(它将保存 Node.js),暂时让我们称之为网关后面的 Master MongoDB。只能通过网关的 SSH 隧道访问此服务器。它位于 CIDR 地址范围内。

但是,正确设置 NAT 网关并不简单 1-2-3。您确实需要了解亚马逊如何使用路由,当然还有如何正确使用入站和出站规则。

实际的网关服务器(Node.js 服务器)应该在 ElasticIP 上。当您需要扩展到更好的服务器时,这将为您节省很多心痛。每当您对服务器进行关键更改时,您还应该拍摄服务器的快照或实际图像。

至于网关服务器本身。根据您的 Node.js 实际代码,您至少应该选择 t2 介质(micro 根本不会这样做)。至于保护,再次入站和出站规则,并可能在服务器上安装软件防火墙。

我自己也使用其他一些实用程序,但我认为在这里至关重要的是PM2。这将使您的 Node 代码在重新启动时保持运行,并在您扩展到服务器上的更多内核时使生活更轻松。

你没有提到你选择的操作系统,所以我不会触及这个热门话题,只是说,Ubuntu 和 AWS Linux 是明智的选择。

至于现在受网关保护的 MongoDB。这是我可能有点保守的地方,基本上是因为我正在处理你所询问的数字的现实。我个人认为没有理由让 1000 个用户在 MongoDB 上设置集群或分片,直到你看到你的应用程序是否真的起飞。NAT 网关是可扩展的,如果您的应用程序起飞,那么您无论如何都会迁移到 ATLAS 或 Enterprise。但是,如果您要集群(主从),您可以选择 3 或 7(我认为 7 可能是 5)。一个是你的主人。你通过 ssh 隧道进入任何人,就像你通过 ssh 进入你的主人一样(显然是通过不同的 CIDR)。如果你做集群,你必须密切关注mongod.conf 文件和所有可用的参数

显然还有很多东西要写,当然很多人有不同的意见,这是一件好事。但是,在您完成需要工作的基本设置之前,我会谨慎行事(以及您的每月账单!)。然后,您可以将 Mongo 扩展到集群和分片以及您的 Node.js 应用程序。

简单总结一下:

  1. AWS 中的入站和出站规则和路由
  2. 您将使用的操作系统
  3. 实际服务器和核心配置
  4. 面向世界的网关服务器上的 Node.js
  5. 网关后面的 MongoDB 服务器(或集群)。
  6. 关键:您应该几乎立即在 MongoDB 中创建角色。这也是最后一道防线。在没有设置管理员角色的情况下,永远不要拥有 MongoDB 实例,这样您就可以控制访问或更改数据所需的权限。

祝你好运 - 希望一切都比你想象的更好!

于 2017-03-28T15:53:39.937 回答
0

此答案仅限于您的数据库服务器的问题:

对于数据库,你当然应该配置一个副本集;但为了冗余和可用性,不支持更高的负载。在 MongoDB 文档中有一些关于如何部署的很好的说明。

如果您想确保数据库能够支持更高的负载,那么您需要确保硬件(CPU、RAM、磁盘 IO)能够胜任这项工作;很难事先确切知道您需要什么级别的硬件配置,因此我建议您进行一些负载测试,以了解给定的一组硬件如何响应。

于 2017-03-28T08:24:26.170 回答