java - AWS 上的架构 : Running a distributed algorithm on dynamic nodes

标签 java spring amazon-web-services amazon-ec2 amazon-elastic-beanstalk

enter image description here

如图所示,我正在做的宠物项目有以下两个组件。

a) “RestAPI 层”(一组微服务)

b) “可扩展并行算法”组件。

我计划在 AWS 上运行它。我意识到我可以使用 ElasticBeanTalk 来部署我的 RestAPI 模块。(带有嵌入式 tomcat 的 Spring Boot JAR)

我正在考虑如何构建“可扩展并行算法”组件。以下是关于此的一些设计细节:

  • 这由几个节点组成,它们共享存储在 S3.
  • 每个节点对一 block 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 读取其数据 block 并在内存中创建“vector 空间”。这是一个耗时的过程,因此这就是为什么它应该存储在内存中。此外,该系统需要近实时响应,不能使用像 MR 这样的“批处理”系统。

最佳答案

1) 我会研究 CloudFormation 以帮助您自动化和编排可扩展并行算法。阅读此常见问题解答

https://aws.amazon.com/cloudformation/faqs/

2) 关于问题 #2,EC2 实例可以有私有(private) IP 和公共(public) IP,具体取决于您如何配置它们。您可以从实例中查询 AWS EC2 元数据服务以获取如下信息:

curl http://169.254.169.254/latest/meta-data/public-ipv4

curl http://169.254.169.254/latest/meta-data/local-ipv4

EC2 实例元数据的完整引用:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

3) 检查 API 网关服务,它可能是您正在寻找的:

https://aws.amazon.com/api-gateway/faqs/

关于java - AWS 上的架构 : Running a distributed algorithm on dynamic nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454876/

相关文章:

java - 关于我实现生产者消费者的建议

amazon-web-services - 我无法删除我的 VPC

java - 使用 Android Studio 和 Firebase 在 Spinner 中获取其选定子值的键

java - 字段上的@ConfigurationProperties

java.lang.IllegalStateException : No JTA UserTransaction available

java - digital ocean 上如何学习java spring

java - 在 MAPPER XML 中的 SELECT 语句中传递多个参数

java - 尝试处理 s3 文件时出现 OOM

amazon-s3 - AWS 上的 Web 托管 - 我们在哪里创建数据库以及如何将 S3 链接到 EC2

java - 如何在 apache tomcat 中安装和部署 java 应用程序(.jsp 文件)