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

标签 tomcat amazon-web-services docker containers

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

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

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

最佳答案

passivation

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

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

1) 为每个客户运行一个 Reserved Instance 微型实例。是的,这是“昂贵的”,但这是您在编写软件时假定的架构。不要怪我或云。如果您想从中受益,就必须为云设计架构。

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

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

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

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

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

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

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

关于tomcat - 如何在aws中激活/钝化docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860264/

相关文章:

docker - 无法从 docker 容器连接 mysql?

windows - 无法在 apache 7.0.25 的 Windows Vista 中找到 htdocs 文件夹

tomcat - 如何在 Jenkins 中创建 2 个独立的 m2 存储库

Python:如何正确设置 boto3 并连接到 AWS S3?

amazon-web-services - AWS RDS "Publicly Accessible = No"与私有(private)子网中的实例

docker - 基于网络利用率或每秒请求数的 Kubernetes 扩展

docker - 错误! Fabric Docker镜像版本1.1.0与测试网络支持的版本不匹配

apache - 我需要安装 Tomcat 吗?我已经安装了 JBoss 用于与 Apache 进行负载平衡

angular - 无法使用 Angular2/Tomcat 加载资源(JS 文件)

android - AWS Cognito 数据集和 Google Identity Toolkit 错误