背景: 我使用过 EC2 和 RDS。最近我收到一位客户的询问,他想使用 Amazon Web Services 开发移动和 Web 应用程序,并且需要关于他应该使用哪种服务的建议?
- 弹力豆茎
- 拉姆达
- 弹性容器服务 (ECS) 或弹性容器注册表 (ECR)
此外,我已经通过 YouTube 和 Google 上的几个教程来了解这些服务,但我仍然无法弄清楚他应该使用哪种服务。
问题: 我没有使用上述服务的任何适当知识和经验。因此,我希望有与他们合作过的人的建议。
请说明使用特定服务的优缺点,以便我提供建议。
Elastic Beanstalk是您的传统托管 - 您可以上传 PHP 或 Java 或任何应用程序,例如 Wordpress、配置数据库等,然后就可以使用了。在扩展、恢复等方面有一些智能,但它仍然是一个非常传统的托管平台。
ECS Containers仍然可以运行您的传统应用程序,但还有更多细节 - 最值得注意的是容器没有持久存储并且是短暂的,它们可以随时来来去去并重新启动。这意味着它们必须在没有手动配置/干预的情况下构建并准备好运行。有一些方法可以为容器提供持久存储,但如果你能避免它,那就更好了。例如,以将所有数据存储在数据库中并将所有文件存储在 S3 中的方式设计您的应用程序。BTW ECR(弹性容器注册表)只是您的容器的存储。它与ECS一起使用。
Lambda是一个云原生无服务器概念,其中应用程序被拆分为服务各种 API 请求的小函数。网站前端通常是在 React 或 Vue 或类似中构建的,并由 S3 / CloudFront 提供服务。然后它通过 API 网关对 Lambda 进行 API 调用。
如果做得好,无服务器应用程序和容器通常可以比传统应用程序更好地扩展。另一方面,构建你的第一个无服务器应用程序将是一个相当长的学习曲线,因为一些概念与你可能习惯做的不同。
这是一个非常简短的概述。这个话题可以讨论几个小时:)
如果您想这样做,请尝试在 Google 上搜索“无服务器应用程序设计最佳实践”或“容器化应用程序设计最佳实践”之类的内容。
希望有帮助:)
添加到上一个答案 - Elastic Beanstalk 更像是一个Pet 平台,而 Docker (ECS) 和 Lambda 是Cattles。这也意味着 Docker 和 Lambda 是无状态的,这意味着它们不会(绝不能)在本地存储任何状态,一切都在数据库、memcache 集群和 S3 中。另一方面,Beanstalk 可以存储本地状态,但现代应用程序不鼓励使用它,因为它使扩展变得复杂。
如果您不熟悉宠物和牛的概念,请看这里。