2012-02-27 61 views
0

这是一个多部分问题,请耐心等待。来自多个servlet的远程数据库连接池

我正在用java servlets开发一个基于web的应用程序。将有多个应用程序服务器负载均衡系统。这些服务器访问中央远程数据库(它们都不在局域网中)来执行请求。系统的其中一项要求是能够动态地将新的应用程序服务器添加到网络,并使其能够立即连接到数据库并开始处理请求。

我的问题:

  • 要设置远程MySQL数据库服务器,我需要修改一些配置文件,以允许外部连接。这些文件是哪些文件,以及如何在运行之前修改它们,以便在实际启动之前IP地址未知的新增服务器?
  • 对于远程数据库访问,我应该使用连接池吗?连接池是否会针对每个servlet单独完成?池如何扩展新增加的服务器(更多请求)?
  • 对应用程序服务器的每个请求都经历多个单独的数据库调用(例如:查找和更新)。我应该在这些操作中使用相同的连接还是每次释放它?

谢谢

+0

任何你没有看JEE/JPA的理由?它会自动处理(半)所有这些问题。 – Perception 2012-02-27 21:57:52

+0

我们最初使用SOAP Web服务进行了讨论,但开销太大。我们的应用程序也不提供任何jsps。 HTTP响应包含转换为客户端应用程序上的音频文件的字节流。响应需要尽可能轻。这不是真正的问题。您可以将我链接到JPA的JPQL连接到远程数据库的教程吗? – 2012-02-27 22:07:02

+0

最好不要问多部分问题 - 而是问几个问题。 – 2012-02-27 22:20:12

回答

1

我不知道很多关于MySQL的,所以我不会回答的第一部分。

但是,你应该肯定使用连接池。对于远处的数据库,连接建立时间会比邻近数据库更糟,因此重用连接更为重要。

池可以配置,但是你喜欢,但通常是每个服务器,所以它们将被给定服务器中的所有servlet共享。如果您将最大大小配置到池中,那么数据库上的连接总数将与服务器的数量成比例。这是值得注意的事情 - 我曾经看到数据库几次下降,因为大量客户端的数据库大小不合适。

是的,你应该在每个请求(可能)的持续时间重用一个连接。对于初学者来说,如果您希望在整个请求中使用单个事务,那么您将不得不这样做,而这几乎可以确保这样做。除此之外,获取和释放连接并不是免费的,所以重复使用可以分摊几个操作的成本。

一个告诫:坚持一个连接的请求的生命可能会增加必要的池大小抓住和释放每个操作。通常情况下,这是一个很好的折衷。但是,如果你受到连接数量的严重限制,可能不会。它在一定程度上取决于您的请求持续了多长时间,以及他们做了多少数据库工作,以及更短,更繁忙的请求更好地使用重用连接。如果您提供的是可以在不参考数据库的情况下生成的巨大媒体流,那么您的应用程序可能不适合这种模式。最后一点:如果你的数据库距离很远,你将从缓存中获得比平常更多的好处。仔细查看是否有数据可以有效缓存,甚至存储在本地数据库中,以避免访问中央数据库。