使用Bitronix事务管理器可以实现自己的XA事务的连接池解决方案。根据Bitronix连接池文档,我们需要使用以下设置:
- minPoolSize:初始连接池大小
- maxPoolSize:连接池可以增长到的最大大小
- maxIdleTime:连接在被销毁之前保持空闲的最长时间
- acquisitionTimeout:连接请求在抛出超时之前可以等待的最长时间。默认值30s对我们的QoS来说太过分了
FlexyPool附带默认度量标准实现,构建于Dropwizard Metrics之上,并提供两种报告机制:
企业系统必须使用中央监控工具,例如Ganglia或Graphite,并指示FlexyPool使用不同的报告机制相当容易。我们的示例将报告导出为CSV文件,这是您可以自定义默认指标设置的方法。
FlexyPool初始设置:
我们只需要给出足够大的maxOverflow和retryAttempts,并让FlexyPool平衡地找到池的大小。
minPoolSize:0 //池的初始大小为0
maxPoolSize: 1 //池的最大大小为1
acquisitionTimeout: 1 //在放弃超时异常之前,连接请求将等待1秒
maxOverflow: 9 //该池最多可以增加10个连接(初始maxPoolSize + maxOverflow)
retryAttempts: 30 //如果达到10的最终maxPoolSize并且没有可用的连接,请求将在放弃之前重试30次。
|
案例:
点击标题可进入更多图标分析:
我们的应用程序是一个批处理器,我们将让它处理大量数据,以便我们收集各种指标。在分析指标后,我们可以得出以下结论:
- 最大池大小应为8
- 对于此最大池大小,不会尝试重试。
- 在池已达到其最大大小后,连接获取时间已稳定。
- 峰值连接租约时间为50秒,导致池大小从7增加到8.降低连接时间可以减少池大小。
如果数据库最大连接数为100,则最多可以运行12个并发应用程序。
结论
FlexyPool简化了连接池大小调整,同时为初始假设不再支持的无法预料的情况提供故障转移机制。
只要重试次数超过某个阈值,就可以触发警报,这样我们就可以尽快介入。