我对此相对很陌生,但我设置了一个 Tomcat 集群(使用mod_proxy
来自httpd)和会话复制(单独的redis服务器)以实现容错。
我对这个设置有几个问题:
-
我的应用程序(spring/hibernate)每个用户都有不同的数据库。所以这里的问题是数据源(使用 spring 和 hibernate 进行持久化)是在 Tomcat 级别创建的。因此,无论我做什么连接池都将在服务器级别进行。
根据集群配置,Tomcat 实例将创建自己的连接池。
我想知道是否可以使用 Tomcat 在集群级别实现连接池,即是否有办法确保集群中的所有服务器都使用共享连接池?
-
我不想配置DataSource
由于性能问题,在每个 Tomcat 实例上。在集群设置之前,应用程序部署在单台服务器上,DataSource
配置为每个连接池中仅允许几个 (50) 个连接DataSource
.
现在在集群环境中,我无法在每个 Tomcat 上创建或拆分这些数量的连接,而且节点的动态注册也会产生更多问题。我还想知道如果连接池不可能或效率低下,是否有其他解决方案可以解决此问题?
我将以相反的顺序处理你的问题,因为第二个问题更简单。
Tomcat 中的数据库连接池无法在集群范围内配置:您必须为集群中的每个节点配置单独的池。但这不一定是坏消息...将节点配置为每个节点上的连接池中有 5 个、10 个或 100 个连接并没有什么问题。
确实,您最终可能会遇到这样的情况:一次有太多用户连接到数据库,从而导致数据库不堪重负,但单个节点也可能会发生这种情况。多节点在概念上没有什么不同,但对于单个节点来说也是如此。
关键是确保您的集群适当地平衡用户,这样您就不会受到例如用户数量的限制。每个节点有 5 个数据库连接,但一个节点上最终有 100 个用户,而其他节点每个节点只有 5 个用户。在这种情况下,热门节点(100 个用户)将必须共享这 5 个连接,而在其他节点上,每个用户都会获得一个属于自己的连接。
回到你的第一个项目,它更复杂。如果你有一个单独的database对于每个用户,那么连接池是不可能完成的事情,因为您每次都必须为每个用户建立一个新连接。那些联系aren't可以共用,至少在不小心的情况下是这样。听起来您有一个架构问题,您可能必须先解决该问题,然后才能确定该问题的技术解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)