【发布时间】:2015-03-11 04:11:27
【问题描述】:
我们公司目前的情况是:
- 3 个可以根据需要多次生成的 Python 应用程序
- 单个 Amazon EC2 服务器托管所有提到的应用程序(每个 1 个实例)
- CPU 利用率 ~30%
- 我们希望在 1 小时内完成的定期工作需要 2 小时(我们应用的单个实例无法更快地运行 - 原因在这里并不重要 - 但生成第二个实例就可以了)
我们想找出使用 docker、salt 和 Amazon EC2 的自动可扩展解决方案。由于我没有管理员背景,因此很难评估我们提出的哪些可能的解决方案是好的,哪些是坏的。因此,我决定询问您在上述技术方面的经验,也许您可以指出以下解决方案可能存在的问题:
- 我们有处理单个 ec2 服务器的 salt。它正在安装所有应用程序依赖项并使用最新的应用程序版本创建 AMI 映像。然后,我们使用 Amazon 自动扩展服务在需要时生成新的 AMI。
- 优点:
- 很简单
- 很灵活
- 很好地处理硬件故障
- 缺点:
- 不划算
- 我们并未使用所有资源
- 优点:
- 我们在 EC2 服务器实例上部署了固定数量的应用程序(由 docker 容器包装),例如我们总是在服务器 L4.medium 上运行 3x 应用程序 A。当我们需要更多应用程序实例时,Amazon 自动扩展正在生成新的 EC2 服务器,并且 salt 正在处理我们将有 3 个 docker 容器,其中运行应用程序 A。
- 优点:
- 我们可以使用任何我们想要的 EC2 服务器
- 我们可以使用特定服务器上的所有可用资源
- 缺点:
- 扩展粒度:如果四个应用程序 A 实例在 1 小时 20 分钟内完成工作,而我们的目标是 1 小时,我们将生成接下来的 4 个实例,然后工作在 40 分钟内完成(这太快了)。
- 优点:
- 我们有任何我们想要的服务器,扩展意味着将新的 ec2 实例或新的 docker 容器添加到现有的 ec2 实例。所以换句话说,我们正在向现有机器添加新的 docker 容器,除非亚马逊自动扩展添加新的 ec2 实例。从理论上讲,这是我们找到的最佳解决方案,但问题是我不知道是否可以用盐来实现。
- 优点:
- 灵活
- 性价比高
- 很酷:)
- 缺点:
- 最复杂的解决方案
- 缩减问题(我们在 3 台服务器上有 6 个应用程序 A 实例,现在我们只需要 2 个,因此我们从 2 台服务器中删除 4 个实例,但可能有不同的应用程序阻止我们停止 ec2,因此我们有未使用的资源再次)
- 我什至不知道从哪里开始
- 优点:
这就是我们所拥有的:) 任何建议将不胜感激。任何与这三个不同的解决方案都非常受欢迎(尤其是那些已经在生产环境中运行的解决方案)。
【问题讨论】:
标签: amazon-web-services amazon-ec2 docker salt-stack