我在我的应用程序中使用休眠 3.2.2。对于连接池,我们使用的是 c3p0 0.9.1。我正在使用 Generic DAO Pattern 和 Open Session in View 模式来进行数据库操作。
我们正在开发现有网站的新网站。目前,现有应用程序的访问量为 50 万页。我对 c3p0 配置感到困惑。在什么基准上,我决定要打开的连接数。最大连接,最小连接,空闲时间,超时等......
问问题
2197 次
2 回答
3
您首先需要确定如果请求进入并且没有免费连接来服务它,池将做什么。它会抛出异常吗?返回空?阻塞直到另一个连接返回到池中?
一旦知道超出容量时会发生什么,请考虑如何在调用代码中处理这种情况,以及在什么情况下可以接受这种情况。在某些时候,随着连接数量的增加,您将不得不开始拒绝服务某些请求,但只有您可以决定该点是什么。实际点取决于很多因素,包括诸如
- 您当前的空闲和忙碌请求率
- 这些利率的波动性(如果利率大幅上涨,你需要更多的“喘息空间”)
- 与硬件改进和开发人员修改此代码的预算时间相比,任何未来对容量增加的预测(如果您计划在几个月内升级它,那么您需要的开销比它打算继续运行几年的开销要少)
- 贵公司对处理能力的任何保证
- 客户端理解“稍后再试”请求的能力 - 例如,如果您知道它是另一端的自动脚本,在 503 上休眠一分钟并再次尝试,这比人类收到“暂时超出容量”消息要好并且两者都比获得非 200 响应并因错误退出的批处理脚本要好得多。
- 请求的紧迫性——一些请求(看小猫的照片)可以合理地延迟,但其他请求(股票交易订单)可能对时间非常敏感。
等等等等。
希望从上面你应该能够想出你需要能够同时处理的请求数量(如果有不同类型的请求,你可能也需要考虑这一点)。然后,只需查看传入请求如何获取和使用连接、推理和分析,直到您发现池中维持目标连接率所需的连接数。
不要忘记考虑诸如非请求线程(例如工作池)从同一个池中获取自己的连接(池需要更大),以及请求仅在其部分执行期间保持连接(池可以变小)。
于 2009-11-03T12:44:07.323 回答
0
分析您的测试实例,进行小的配置更改,然后最终通过负载测试进行验证。
于 2009-11-03T12:28:23.110 回答