【发布时间】:2017-05-18 05:11:15
【问题描述】:
如图所示,我正在处理的宠物项目有以下两个组件。
a) “RestAPI 层”(一组微服务)
b) “可扩展并行算法”组件。
我打算在 AWS 上运行它。我意识到我可以使用 ElasticBeanTalk 来部署我的 RestAPI 模块。(带有嵌入式 tomcat 的 Spring Boot JAR)
我正在考虑如何构建“可扩展并行算法”组件。以下是有关此的一些设计细节:
- 这由几个节点组成,它们共享存储在 S3。
- 每个节点对 S3 数据块执行“算法”。一个节点作为主节点,其余节点将部分结果发送到 这个节点。(尴尬的并行,主从范式)。主节点 由 RestAPI 层调用。
- “节点”是一个 Spring Boot 应用程序,它通过 HTTP 与其他节点通信。
- “节点”的数量是动态的,这意味着我应该能够根据 S3 不断增加的数据大小手动添加新节点。
- Redis上有一个“节点注册表”,其中包含所有节点的IP。每个节点注册自己,并使用IP列表 注册表以相互通信。
我的问题:
1) 我应该使用 EC2 来部署“节点”还是我也可以使用 ElasticBeanStalk 来部署这些节点。我知道使用 EC2 我可以根据 S3 数据的大小来管理节点的数量,但是是否可以用 ElasticBeanStalk 做这个?
2) 我可以用吗
Inet4Address.getLocalHost().getHostAddress()
获取每个节点的 IP ? EC2 实例是否有多个 IP?此 IP 应允许 RestAPI 层与“主”节点通信。
3) 我应该使用什么组件将我的 RestAPI 层暴露给外部世界?但我不想暴露我的“节点”。
更新: 我不能使用 MapReduce,因为节点有状态。即,在初始化期间,每个节点从 S3 读取其数据块并在内存中创建“向量空间”。这是一个耗时的过程,所以这应该存储在内存中。此外,该系统需要近乎实时的响应,不能使用像 MR 这样的“批处理”系统。
【问题讨论】:
-
听起来您打算自己进行集群管理并实施 map/reduce。您是否考虑过使用 Hadoop(通过 EMR)?也许在 Elastic BeanStalk 中构建一个简单的 Web 前端,启动 EMR 集群来完成实际工作。
标签: java spring amazon-web-services amazon-ec2 amazon-elastic-beanstalk