Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 如何在aws中激活/钝化docker容器_Tomcat_Amazon Web Services_Docker_Containers - Fatal编程技术网

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

Tomcat 如何在aws中激活/钝化docker容器,tomcat,amazon-web-services,docker,containers,Tomcat,Amazon Web Services,Docker,Containers,我有一个在Tomcat下运行的有状态应用程序,它有一个专有数据库。我已经成功地将它停靠在我的机器上,在AWS上运行它的单个实例很容易。数据库不是很大(在gig下),每个客户都想要自己的版本。因此,我们的计划是,每个客户基本上都有自己的系统副本。每个客户都会有少量的系统用户(通常是1个,可能是10个),并且通常每周只使用几个小时 当我们得到一个新客户XYZ时,我们将为他们的系统创建一个新的Docker容器。他们将进入“XYZ.mycompany.com”并登录系统。然后我们应该为他们旋转容器。最终

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

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

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

钝化

我甚至不认为那是一个词P Docker和AWS都没有这个概念

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

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

此外,不要将此视为一种解决方案——通常情况下,从一开始就是这样。你正在花钱验证你的商业模式。一旦你有了客户,你可以决定花时间省钱,而不是增加功能。但是如果客户从未出现,那么你就不需要在软件上浪费时间

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

现在,问题很简单。无状态应用服务器(不再需要每个客户1个,但每1000个用户1个)和有状态数据库层。随着您的发展,有很多成熟的技术可以帮助您发展数据库。(主-主、从读取、切分,将应用程序拆分为具有自己较小数据库的微服务)

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

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

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

另外,您可能可以重复使用

钝化

我甚至不认为那是一个词P Docker和AWS都没有这个概念

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

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

此外,不要将此视为一种解决方案——通常情况下,从一开始就是这样。你正在花钱验证你的商业模式。一旦你有了客户,你可以决定花时间省钱,而不是增加功能。但是如果客户从未出现,那么你就不需要在软件上浪费时间

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

现在,问题很简单。无状态应用服务器(不再需要每个客户1个,但每1000个用户1个)和有状态数据库层。随着您的发展,有很多成熟的技术可以帮助您发展数据库。(主-主、从读取、切分,将应用程序拆分为具有自己较小数据库的微服务)

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

如果你想要稳健性,你应该把
/放在EFS的某个地方。这将允许您在多台主机上运行docker容器。“路由”层将向上/向下旋转容器和路由请求,编写起来将非常棘手(竞争条件比比皆是)。您甚至可以通过给它们指定时间来隐藏自旋向上/向下延迟