使用FlexyPool度量你的XA事务连接池合适大小 - Vlad Mihalcea

19-07-02 banq


使用Bitronix事务管理器可以实现自己的XA事务的连接池解决方案。根据Bitronix连接池文档,我们需要使用以下设置:

  • minPoolSize:初始连接池大小
  • maxPoolSize:连接池可以增长到的最大大小
  • maxIdleTime:连接在被销毁之前保持空闲的最长时间
  • acquisitionTimeout:连接请求在抛出超时之前可以等待的最长时间。默认值30s对我们的QoS来说太过分了

FlexyPool附带默认度量标准实现,构建于Dropwizard Metrics之上,并提供两种报告机制:


企业系统必须使用中央监控工具,例如GangliaGraphite,并指示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简化了连接池大小调整,同时为初始假设不再支持的无法预料的情况提供故障转移机制。
只要重试次数超过某个阈值,就可以触发警报,这样我们就可以尽快介入。