FlexyPool,响应式连接池

原创
2017/11/14 13:35
阅读数 467

介绍

在开始处理企业项目时,大家使用的是J2EE,池化数据源由应用程序服务器提供。

EnterpriseApplicationServer

扩大意味着购买更强大的硬件来支持日益增长的需求。垂直缩放意味着为了支持更多的请求,我们必须相应地增加连接池大小。

水平缩放

我们最近的架构从扩展转向扩展。因此,我们现在拥有一个分布式服务网络,而不是让一台大型机器托管我们所有的企业服务。

企业架构

这具有许多优点:

  • 每个JVM都根据托管服务的内在行为进行调整。Web节点使用并发的低暂停收集器,而批处理服务使用吞吐量收集器
  • 部署批处理服务不会影响前台服务
  • 如果一个服务中断,则不会影响其他服务

 

数据库连接供应

但是,所有这些服务最终都会调用数据库,并且始终通过数据库连接完成。数据库服务器只能提供有限数量的并发连接,因此连接调配是强制性的。

当前的连接池解决方案提供有限的监视和故障转移支持。这是我们最近一直在努力的,这就是为什么我决定构建FlexyPool

城里有个新人

FlexyPool是一个数据源代理,为以下连接池提供更好的监视和故障转移:

FlexyPoolArchitecture

我们的结论是,确定连接池大小不是前期设计决策。在大型企业系统中,您需要适应性和监控是做出正确决策的第一步。

提前监测

名称 描述
concurrentConnectionsHistogram

 

这表示一次使用多少个连接。

concurrentConnectionRequestsHistogram

这表示一次请求多少个连接。

connectionAcquireMillis

目标数据源连接获取间隔的时间直方图。

connectionLeaseMillis

租用时间是连接获取到释放的时间。

maxPoolSizeHistogram

目标池大小的直方图。

overallConnectionAcquireMillis

总连接获取间隔的时间直方图。

overflowPoolSizeHistogram

池大小的直方图溢出。

retryAttemptsHistogram

重试尝试次数的直方图。

故障切换策略

当所有池连接正在使用时,新的连接获取请求将在放弃之前等待有限的时间。这可以防止系统重载,但为了避免拒绝连接请求,您必须正确配置连接池大小。您还必须考虑流量高峰,并考虑到争夺有限数据库连接的所有其他服务。受监控的数据可以更好地了解连接使用情况,因此在决定正确的池大小时可以更好地进行配置。

FlexyPool被设计成被动的,所以它可以更好地适应流量高峰。为此,它提供了一个可配置的故障转移策略机制。

策略是一种获取安全机制的连接,当连接未成功从目标连接池获取时调用这个连接。

FlexyPool具有以下默认策略

  • 在超时时递增池
    此策略将增加连接获取超时时的目标连接池最大大小。
    连接池具有最小的大小,并可根据需要增长到最大大小。该溢出是多余的连接,让连接池增长超过其初始的缓冲区最大尺寸。每当检测到连接获取超时时,如果池未增长到其最大溢出大小,则当前请求将不会失败。

     

    OverFlowPoolSize

  • 重试尝试
    此策略对于那些缺少连接获取重试机制的连接池非常有用
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部