我在 apache2 服务器上的 preforked(MOD_PHP) 中运行 PHP。设置在 linux Ubuntu 10.04 上。我使用的数据库是firebird 数据库2.5.2。apache2 服务器运行在一个由 8 个网络服务器组成的网络集群中。
在某个时间点,由于对应用程序的请求激增(我们有窥视时间),我们遇到了严重的性能问题。瓶颈显示为解决在很短的时间内出现的请求数量所需的数据库连接数量。Firebird 没有很好地处理它,请求只是超时了。
这种类型的数据库没有连接池,这就是为什么我一直在 PHP 中使用 pconnect 来减轻数据库的压力。这会在 apache2 进程中保持数据库连接。这是一个重大的性能提升。不利的一面是,我们必须让 apache2 进程在轮换之前接受大量请求,并且即使没有负载,我们也要保持大量 apache2 进程运行。每个网络服务器运行 70 个 apache 进程。这是为了保持连接打开并准备就绪。基本上我们试图让 apache2 成为我们的连接池。这行得通。当用户请求应用程序时,数据库句柄已准备就绪,Firebird 不必担心创建新数据库连接的成本。
现在这是我的问题。我们现在需要有很多数据库——小型的。但它们都将在 apache2 服务器集群中运行。这意味着在 apache2 进程的生命周期中,它很可能会获得与多个数据库(可能是 80-100)的持久连接。
我担心 apache2 将如何处理这种情况。apache2 可以处理的连接数是否有限制?它会变慢吗..它会在内存中增长并完美处理所有事情吗?
目前,数据库分片无关紧要。我们(作为开发团队)根本不喜欢拆分数据库的想法。但是重写应用程序并创建新的数据库结构以从代码中获得更多性能并没有绿灯。就目前而言,硬件就是答案。还有一些法律问题迫使我们分成几个数据库来封装数据。但这是我有点担心 apache2 能够处理什么。
有人知道吗?