【问题标题】:how to activate/passivate docker containers in aws如何在 aws 中激活/钝化 docker 容器
【发布时间】:2016-01-18 17:06:33
【问题描述】:

我有一个在 Tomcat 下运行的有状态应用程序,它带有一个专有数据库。我已经在我的机器上成功地对它进行了 docker 化,并且很容易在 AWS 上运行它的单个实例。数据库不是很大(在演出下),每个客户都想要自己的版本。因此,我们的计划是每个客户基本上都获得自己的系统副本。每个客户都会有少量的系统用户(通常是 1 个,也许是 10 个),并且通常每周只使用几个小时。

当我们获得新客户 XYZ 时,我们将为他们的系统创建一个新的 Docker 容器。他们将前往“XYZ.mycompany.com”并登录系统。然后我们应该为他们启动容器。最终他们将注销或超时。然后我们应该钝化容器。

那么,AWS 的哪一部分会处理 Docker 容器的激活/钝化?这与容器是无状态的通常 AWS 架构不同。我可以想象一个 http 前端(代理?),它接受 http 请求并决定它们去哪个容器,必要时启动容器。有没有我可以使用的标准包,还是我必须写一个?

【问题讨论】:

    标签: tomcat amazon-web-services docker containers


    【解决方案1】:

    钝化

    我什至不认为这是一个词。 :P Docker 和 AWS 都没有这个概念。

    我可以想出几个简单的方法来解决你的问题,但你不会喜欢它们。

    1) 为每个客户运行一个预留实例微实例。是的,这是“昂贵的”,但这是您在编写软件时假设的架构。不要责怪我或云。如果您想获得好处,就必须为云进行架构设计。

    另外,不要将此视为解决方案 - 通常情况下,you have to do things that don't scale 开始。您正在花钱来验证您的商业模式。一旦你有了客户,你就可以决定把时间花在省钱上,而不是添加功能上。但如果客户从未出现,那么您就无需在软件上浪费时间。

    2) 将您的软件修复为多租户。 (第一步,摆脱您的自定义数据库。那里有成千上万的开源和托管数据库,由数千名专家编写。无意冒犯,但您的代码不太可能比他们的所有代码都好。)几乎每个SaaS 业务以多租户软件作为首要要求。

    现在,问题很简单。无状态应用服务器(不再需要每个客户 1 个,而是每 1000 个用户 1 个)和一个有状态的数据库层。随着您的成长,有许多成熟的技术可以扩展您的数据库。 (Master-Master、Slave Reads、Sharding,将您的应用分解为具有自己较小数据库的微服务)

    3) 围绕您的软件编写一个包装器,该包装器可以上下旋转 docker 容器,然后路由到正在运行的容器。每个容器都应将其数据存储在/somewhere/COMPANYNAME/ 下的主机文件系统上(使用-v 标志),以便在容器未运行时不会丢失数据。

    如果你想要健壮性,你应该把/somewhere放在EFS上。这将允许您在多个主机上运行 docker 容器。将启动/关闭容器和路由请求的“路由”层编写起来非常棘手(竞争条件比比皆是)。您甚至可以通过在启动容器时给他们一个“登录”屏幕来隐藏启动/停止延迟。

    可以工作。但是您必须决定:您的自定义数据库和自定义路由层对您的客户有价值吗?或者是软件实际做了什么,因此最好使用商品路由层 (ELB) 和商品数据库(RDS、Dynamo 或您能想到的任何其他经过充分测试的随机多用户数据库)?

    附:你也许可以重复使用https://sandstorm.io/的部分内容

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2017-11-02
      相关资源
      最近更新 更多