我在我的应用程序中使用 hibernate 3.2.2。对于连接池,我们使用 c3p0 0.9.1。我正在使用通用 DAO 模式和视图模式中的打开会话来进行数据库操作。
我们正在现有网站的基础上开发新网站。目前,现有应用程序的访问量为五十万个页面访问量。我对 c3p0 配置感到困惑。在什么基准上,我决定要打开的连接数。最大连接、最小连接、空闲时间、超时等......

有帮助吗?

解决方案

您首先需要确定如果请求传入并且没有可用连接来为其提供服务,池将执行什么操作。它会抛出异常吗?返回空值?阻塞直到另一个连接返回到池中?

一旦您知道超出容量时会发生什么,请考虑如何在调用代码中处理这种情况,以及在什么情况下可以接受这种情况发生。在某个时刻,随着连接数量的增加,您将不得不开始拒绝服务某些请求,但只有您可以决定那个点是什么。实际点取决于很多因素,包括诸如

  • 您当前的空闲和忙碌请求率
  • 这些利率的波动性(如果利率波动很大,你需要更多的“喘息空间”)
  • 与硬件改进相比,未来容量增长的任何预测以及修改此代码的开发人员时间预算(如果您计划在几个月内升级它,那么您需要的开销比打算继续运行几年的开销要少)
  • 贵公司对处理能力做出的任何保证
  • 客户理解“稍后再试”请求的能力 - 例如如果您知道另一端是一个自动脚本,在 503 上休眠一分钟并重试,那么这比人类收到“暂时超出容量”消息要好,而且两者都比收到非-的批处理脚本要好得多。 200 响应并因错误而退出。
  • 请求的紧迫性 - 某些请求(查看小猫的图片)可以合理地延迟,但其他请求(股票交易订单)可能对时间非常敏感。

等等等等。

希望根据上面的内容,您应该能够得出需要能够同时处理的请求数量(如果有不同的请求) 类型 根据要求,您可能也需要考虑这一点)。然后,只需查看传入请求如何获取和使用连接、推理和分析,直到发现池中维持目标连接速率所需的连接数。

不要忘记考虑非请求线程之类的事情(例如工作池)从同一个池中获取自己的连接(池需要更大),以及仅在部分执行过程中保留连接的请求(池可以更小)。

其他提示

对测试实例进行概要分析,进行小配置更改,然后最终通过负载测试进行验证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top