选择正确的 AWS 服务和软件工具

Posted

技术标签:

【中文标题】选择正确的 AWS 服务和软件工具【英文标题】:Choosing the right AWS Services and software tools 【发布时间】:2017-11-04 07:56:09 【问题描述】:

我正在开发一个原型 IoT 应用程序,它执行以下操作

    接收/存储来自传感器的数据。 具有基于 Web 的 IDE 的 Web 应用程序,供用户部署在 Docker 容器中执行的简单 javascript/Python 脚本。 来自传感器的数据流式传输到这些容器。 用户程序可以使用这些数据进行分析、监控等。 这些程序的日志在webapp上输出给用户

当前架构和服务

    使用一个 AWS EC2 实例。我选择 EC2 是因为我试图弄清楚架构。 堆栈是 Node.js、RabbitMQ、Express、mysql、MongoDB 和 Docker 我对使用 AWS IoT 服务(如 AWS IoT 和 Greengrass)不感兴趣 我已经排除了 Heroku,因为我正在使用其他 AWS 服务。

问题和疑虑

我的目标是为 50 位用户开发 Beta 版原型 (希望其他人会帮助/处理生产版本)

    我不想花太多时间在服务之间迁移,因为开发产品是关键。我应该坚持使用 EC2 还是迁移到 Beanstalk? 如果我坚持使用 EC2,处理中小型流量的最佳方式是什么?使用一台大型 EC2 机器还是使用许多小型微型实例? 管理容器的好方法是什么?使用 swarm 并进行容器管理是否值得?如果我必须使用多个实例怎么办? 我还有一些小脚本,其中包含 Web 应用程序和其他服务所需的传感器信息状态。如果我移动到多个实例,如何使这些脚本可用于多台机器? 上述问题也适用于服务器、消息总线、数据库等。

我的目标当然不是​​产品发布。我想完成产品,表明我有感兴趣的用户,当然,表明产品有效!

非常感谢您在这方面的任何帮助!

【问题讨论】:

你有没有想过使用ECS?因为您使用的是 docker 容器,所以 3 号将解决您的大部分问题 我已经排除了 Heroku,因为我正在使用其他 AWS 服务。 Heroku 托管在 AWS 内,所以它仍然就在靠近其他一切的地方,如果你真的很想用它。 【参考方案1】:

您可以将您的 Web 应用程序保留在 Heroku 上,并在 AWS EC2 或 AWS Lambda 中运行您的 IoT 服务器。 Heroku 位于 AWS 本身,因此这种拆分设置不会影响性能。您可以通过编写Terraform 脚本来解决“坐在两把椅子上”的不便,该脚本提供 EC2 实例和 Heroku 应用程序并将它们绑定在一起。

或者,您可以使用 Dockhero 插件在 Docker 容器中与 Heroku 应用一起运行您的 IoT 服务器。

ps:我是 Dockhero 维护者

【讨论】:

【参考方案2】:

如果您想在 AWS 中轻松管理 docker 容器,您可以使用 Amazon ECS 服务来部署您的容器,或者使用 Beanstalk。此外,您无需在 AWS 中使用 Swarm,ECS 将为您工作。

使用中小型 EC2 实例,横向扩展而不是纵向扩展总是更好。然而,您将在这里面临的挑战是管理和扩展底层 EC2 以及您的 docker 容器。这导致您使用大型 EC2 实例来保留 EC2 扩展并专注于 docker 扩展(这将为您增加额外的成本)

您可以为 Web 应用程序部分使用的另一种替代方法是使用带有 Serverless Framework 的 AWS Lambda 和 API Gateway 堆栈,这需要最少的操作开销并附带 DevOps 工具。

【讨论】:

我不确定 AWS Lambda/Beanstalk 是否适合,尤其是在产品尚未准备好时。我正在查看是否可以扩大#4 和#5 并将Kubernetes 用于#3。我也可以使用 ECS,但它的吸引力较小,因为它会导致供应商锁定。我可能会使用一个中型或大型实例,然后运行 ​​Kubernetes/ECS 有 1-2 个较小的实例。我觉得你的回答不完整,有点抽象。您能否扩展以涵盖我的观点或提供更多想法? 我将在今天晚些时候更新详细信息。顺便说一句,供应商锁定在 AWS 云中是您的架构的一个问题吗?与管理费用和成本相比。 是的。至少在产品原型设计阶段。一旦一切都弄清楚了,生产版本/团队可以考虑成本等。我只想让产品尽快与一小部分 beta 用户一起工作,而无需锁定。在这一点上,我正在考虑使用 kubernetes 来扩展容器,并使用一个大型实例来扩展其他服务。

以上是关于选择正确的 AWS 服务和软件工具的主要内容,如果未能解决你的问题,请参考以下文章

如何正确选择内网访问工具

CircleCI与Jenkins:选择正确的CI/CD工具

AWS简介与历史

TeamCity VS Jenkins:选择正确的CI / CD工具

什么是管理 AWS 代码部署和管理的正确方法

免费使用一年的aws服务EC2使用纪录