如何激活/钝化aws中的docker集装箱

我有一个有状态的应用程序运行在Tomcat下的专有数据库。 我已经成功将其docker化在我的机器上,并且很容易在AWS上运行它的单个实例。 数据库不是很大(在一个演出),每个客户都希望自己的版本。 所以,我们的计划是每个客户基本上都得到他自己的系统副本。 每个客户将有less量的系统用户(通常是1,也许10),通常每周只用几个小时。

当我们得到一个新客户XYZ时,我们将为他们的系统创build一个新的Docker容器。 他们会去“XYZ.mycompany.com”并login到系统。 然后,我们应该为他们旋转容器。 最终他们会注销或超时。 那么我们应该钝化容器。

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

钝化

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

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

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

另外,请不要将此视为解决scheme – 通常情况下, 您必须做一些无法扩展的事情才能开始。 你花钱来validation你的商业模式。 一旦你有客户,你可以决定花费你的时间省钱,而不是添加function。 但是,如果客户从不出现,那么您就不必在软件上浪费时间。

2)修复你的软件是多租户。 (第一步,摆脱自定义的数据库,成千上万的开源和托pipe数据库都是由成千上万的专家编写的,没有冒犯性,但是你的代码不可能比他们所有的都好)。 SaaS业务从多租户软件开始,作为一stream的要求。

现在,问题很简单。 无状态的应用程序服务器(每个客户不再需要1个,而每1000个用户需要1个)和一个有状态的数据库层。 随着你的成长,有很多成熟的技术来增长你的数据库。 (Master-Master,Slave Reads,Sharding,用自己的小型数据库把你的应用分成微服务)

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

如果你想要健壮性,你应该把/somewhere EFS的/somewhere 。 这将让你在多个主机上运行docker容器。 将会启动/closures容器和路由请求的“路由”层将非常棘手 (竞争条件比比皆是)。 你甚至可以通过在旋转容器的时候给他们一个“login”屏幕来隐藏旋转的向上/向下的延迟。

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

PS您可以重新使用https://sandstorm.io/的部分内容