【发布时间】:2013-06-26 01:58:18
【问题描述】:
我们正计划使用 Amazon OpsWork 部署一个 Web 应用程序,我只是想与您确认一下我们的架构是否存在任何设计缺陷。
我们有 4 个组件:
- 负载均衡器(最好是亚马逊)
- 基于Node.js的表达
- MongoDB
- 弹性搜索
这是我们组件的通信图:
前面是一个负载均衡器,它将 http 请求分发到多个 Web 服务器。
Web 服务器是无状态的,因此可以在每次负载需要时进行克隆。所有 Web 服务器实例都是平等的。会话信息保存在 MongoDB 中。
在“后端”中,我们计划使用 MongoDB 和 ElasticSearch 的内置集群功能。因此,每个 Web 服务器实例只连接到一个 MongoDB 和 ElasticSearch 主实例。 MongoDB 和 ElasticSearch 会相应地进行扩展。此外,ElasticSearch master 与 MongoDB master 对话以检索用于构建索引的数据。
我们认为,设置这样一个系统最具挑战性的任务是使用 MongoDB 和 ElasticSearch 集群配置 OpsWorks。
非常感谢!
【问题讨论】:
-
是否也考虑多区域部署?很好地考虑一下,因为如果您的受众遍布世界各地,那么将复制品扩展到各个地区可能会更好。但是,您需要确保 Web Worker 将访问最近的 MongoDB 副本,而不是物理上可能非常远的主副本。与 ElasticSearch 相同。您的架构的优势在于高负载性能,但来自不同区域的延迟并不是很好。
-
如果数据允许,可以在每个区域进行设置。因此,您会在不同地区失去性能!
-
目前我们的客户来自德国,也可能来自欧洲。所以我们现在不考虑多区域部署。
-
如果您要存储会话数据,我认为将其存储在缓存服务器中可能是一种选择(仍然可以有备用选项从持久存储访问它)。你的设计看起来与我所做的和现在生产的相似:masonzhang.com/2013/07/…。我也有相同的目标来轻松扩展 Web 服务器,并且每个请求都是无状态的。顺便说一句:我也使用 node.js
标签: node.js mongodb amazon-web-services cloud elasticsearch