介绍
在开始处理企业项目时,大家使用的是J2EE,池化数据源由应用程序服务器提供。
扩大意味着购买更强大的硬件来支持日益增长的需求。垂直缩放意味着为了支持更多的请求,我们必须相应地增加连接池大小。
水平缩放
我们最近的架构从扩展转向扩展。因此,我们现在拥有一个分布式服务网络,而不是让一台大型机器托管我们所有的企业服务。
这具有许多优点:
数据库连接供应
但是,所有这些服务最终都会调用数据库,并且始终通过数据库连接完成。数据库服务器只能提供有限数量的并发连接,因此连接调配是强制性的。
当前的连接池解决方案提供有限的监视和故障转移支持。这是我们最近一直在努力的,这就是为什么我决定构建FlexyPool。
城里有个新人
FlexyPool是一个数据源代理,为以下连接池提供更好的监视和故障转移:
我们的结论是,确定连接池大小不是前期设计决策。在大型企业系统中,您需要适应性和监控是做出正确决策的第一步。
提前监测
名称 | 描述 |
---|---|
concurrentConnectionsHistogram
| 这表示一次使用多少个连接。 |
concurrentConnectionRequestsHistogram | 这表示一次请求多少个连接。 |
connectionAcquireMillis | 目标数据源连接获取间隔的时间直方图。 |
connectionLeaseMillis | 租用时间是连接获取到释放的时间。 |
maxPoolSizeHistogram | 目标池大小的直方图。 |
overallConnectionAcquireMillis | 总连接获取间隔的时间直方图。 |
overflowPoolSizeHistogram | 池大小的直方图溢出。 |
retryAttemptsHistogram | 重试尝试次数的直方图。 |
故障切换策略
当所有池连接正在使用时,新的连接获取请求将在放弃之前等待有限的时间。这可以防止系统重载,但为了避免拒绝连接请求,您必须正确配置连接池大小。您还必须考虑流量高峰,并考虑到争夺有限数据库连接的所有其他服务。受监控的数据可以更好地了解连接使用情况,因此在决定正确的池大小时可以更好地进行配置。
FlexyPool被设计成被动的,所以它可以更好地适应流量高峰。为此,它提供了一个可配置的故障转移策略机制。
策略是一种获取安全机制的连接,当连接未成功从目标连接池获取时调用这个连接。
FlexyPool具有以下默认策略