【问题标题】:Do multiple Tomcat instances make sense on EC2 instances?多个 Tomcat 实例对 EC2 实例有意义吗?
【发布时间】:2013-07-06 18:42:05
【问题描述】:

我正在 AWS EC2 (Ubuntu) 实例上安装 Railo。我遇到了这个guide for installing Railo on Ubuntu with multiple Tomcat7 instances,提示如下问题:

鉴于能够“启动”多个 EC2 实例并使用弹性 IP/Route 53 进行负载平衡,将每个单独的 EC2 实例配置为运行多个 Tomcat 实例是否会带来额外的好处?是否值得,还是只是多余的?

【问题讨论】:

  • 我怀疑你不需要使用tomcat。运行多个线程的主要原因是利用单线程应用程序的多个内核,并在其他线程可能被 io 阻塞时提供侦听器。

标签: tomcat amazon-web-services amazon-ec2 railo cfml


【解决方案1】:

您必须确定您的瓶颈:如果您的服务器 使用单个 tomcat 的内存不足,则启动第二个 tomcat 是没有用的。此外,如果您的 CPU 已用尽,启动第二个 tomcat 通常没有任何优势。

但是,如果您无论如何要在不同服务器之间进行平衡,一台机器上有足够的 CPU 和内存可用,您可能会从在一台机器上运行两个 tomcat 获得一些好处:例如您可以一次从负载均衡器中删除其中一个,更新它并再次将其添加到均衡器 - 然后对第二个执行相同操作。

但是...无论如何,您都可以为每个 VM 使用一个 tomcat。

恐怕:您必须自己回答这个问题,通过测量:如果您获得的负载可以由 4 个 EC2 实例上的 4 个 tomcat 处理,是否也可以由 2 个 EC2 上的 4 个 tomcat 处理实例?您运行的每个 EC2 实例通常有多少可用资源(CPU、内存、I/O)?这一切都在很大程度上取决于您的用例以及机器实际在做什么。

更多示例:如果您的网络带宽已经饱和,而您还剩下 CPU 和内存,那么第二个 tomcat 将不会利用机器上的更多带宽 - 它只会降低另一个 tomcat 的吞吐量,因为它们必须共享连接带宽。

如果您的网络带宽未饱和并且您的 Tomcat 正在等待外部资源(例如 Web 服务、数据库),则在第二个实例中利用多余的 CPU 和内存可能是有意义的。

但是还有一点是弹性:如果一个 EC2 实例出现故障,它会占用您的两个 tomcat。你能容忍这一点吗?或者这就是你最初选择云端的原因吗?

【讨论】:

  • 澄清一下:“开始一秒钟没有用”...“不需要启动一秒钟”——这两个语句都指的是第二个 Tomcat,并且不是第二个 EC2 实例,对吧?
【解决方案2】:

除了 Olaf 的回答之外,这取决于您对容错和成本的要求,原因有几个。我记得读过一篇文章,说一个更大的实例比几个具有相同容量的小实例便宜,我不记得 URL,但计算起来很容易。

不应将 Amazon 实例视为永久实例,并且主机可能随时停机,并带走所有虚拟机,包括您的虚拟机。因此,您将丢失该 EC2 实例中的所有 Tomcat 实例。当然,您可以提供足够的资源,因此丢失不是问题,但这里是您了解您的应用的地方。

但还有一些问题:在同一台机器上有多个 Tomcat 实例,您必须管理它们正在侦听的端口,这样就不会发生冲突。并配置弹性负载均衡器,以便使用所有这些。可行,但比在同一个端口上监听多个 EC2 实例有点麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    相关资源
    最近更新 更多