如何在aws中激活/钝化docker容器

时间:2016-01-18 17:06:33

标签: tomcat amazon-web-services docker containers

我有一个在Tomcat下使用专有数据库运行的有状态应用程序。我已成功将其停靠在我的机器上,并且很容易在AWS上运行它的单个实例。数据库不是很大(在演出之下),每个客户都想要自己的版本。因此,我们的计划是每个客户基本上都有他自己的系统副本。每个客户将拥有少量系统用户(通常为1个,可能是10个),并且通常每周只使用几个小时。

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

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

1 个答案:

答案 0 :(得分:0)

  

钝化

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

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

1)为每个客户运行预留实例微实例。是的,这是非常昂贵的#34;但这是您编写软件时所假设的架构。不要责怪我或云。如果你想获得好处,你必须为云构建。

此外,不要将此视为一种解决方案 - 通常是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,或任何其他经过良好测试的经过充分考验的多用户数据库)?< / p>

P.S。您可以重复使用https://sandstorm.io/

的部分内容