Tomcat 如何在aws中激活/钝化docker容器
我有一个在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容器上下旋转,然后路由到正在运行的容器。每个容器都应该将其数据存储在主机文件系统的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”并登录系统。然后我们应该为他们旋转容器。最终
/somewhere/COMPANYNAME/
(使用-v
标志)下,以便在容器未运行时不会丢失数据
如果你想要稳健性,你应该把/放在EFS的某个地方。这将允许您在多台主机上运行docker容器。“路由”层将向上/向下旋转容器和路由请求,编写起来将非常棘手(竞争条件比比皆是)。您甚至可以通过在旋转容器时给他们一个“登录”屏幕来隐藏旋转向上/向下延迟
它可以工作。但您必须决定:您对客户的价值在您的自定义数据库和自定义路由层中吗?或者是软件的实际功能,因此最好使用商品路由层(ELB)和商品数据库(RDS、Dynamo或您能想到的任何其他经过良好测试的随机多用户数据库)
另外,您可能可以重复使用
钝化
我甚至不认为那是一个词P Docker和AWS都没有这个概念
我可以想出几种简单的方法来解决你的问题,但你不会喜欢它们的
1) 为每个客户运行一个保留实例微实例。是的,这是“昂贵的”,但这是您在编写软件时假设的体系结构。不要责怪我或乌云。如果你想获得好处,你必须为云设计架构
此外,不要将此视为一种解决方案——通常情况下,从一开始就是这样。你正在花钱验证你的商业模式。一旦你有了客户,你可以决定花时间省钱,而不是增加功能。但是如果客户从未出现,那么你就不需要在软件上浪费时间
2) 将您的软件修复为多租户。(第一步,摆脱你的定制数据库。有成千上万的开源和托管数据库,由数千名专家编写。无意冒犯,但你的代码不太可能比他们所有的都好。)几乎每一个SaaS业务都以多租户软件作为一级需求
现在,问题很简单。无状态应用服务器(不再需要每个客户1个,但每1000个用户1个)和有状态数据库层。随着您的发展,有很多成熟的技术可以帮助您发展数据库。(主-主、从读取、切分,将应用程序拆分为具有自己较小数据库的微服务)
3) 在您的软件周围编写一个包装器,使docker容器上下旋转,然后路由到正在运行的容器。每个容器都应该将其数据存储在主机文件系统的/somewhere/COMPANYNAME/
(使用-v
标志)下,以便在容器未运行时不会丢失数据
如果你想要稳健性,你应该把/放在EFS的某个地方。这将允许您在多台主机上运行docker容器。“路由”层将向上/向下旋转容器和路由请求,编写起来将非常棘手(竞争条件比比皆是)。您甚至可以通过给它们指定时间来隐藏自旋向上/向下延迟