[关闭]
@elibinary 2017-11-03T04:02:15.000000Z 字数 792 阅读 775

拾遗 - 连接池的高可用设计

Pattern


连接池的意义,相信大家都比较清楚,简单列举下:

那么,如何去设计一个高可用的连接池呢,比如遇到下列情况:

方案

  1. 为连接设置引用计数,当一个空闲链接被请求获取使用,该连接计数 '+1'
  2. 设置连接池的最大连接数量限制,当流量尖峰时,如果无空闲连接可用就判断是否超过最大连接数,未超过就新建连接给请求使用,如果超过就当请求等待并设置超时限制,在超时限制内依然无空闲链接可用就返回错误
  3. 设置连接池的最小连接数量限制,当流量尖峰过去进入流量平缓期,就适当缩减链接数量(从空闲的连接中挑选删除),并做好连接池自检补充,维持连接池中连接不少于最小数量
  4. 增加连接池状态监测

上面的方案有一点需要注意就是,连接的引用计数到底是什么的计数,是标记该链接的使用次数?还是标记等待使用该链接的请求数?,因为与普通的资源不同同一时间,一个连接必然只能被一个请求使用,所以不存在同一时刻一个连接被多个请求引用的情况。
如果只是用来标记连接是否空闲的状态,那完全可以设置一个标识位而不必使用计数的方式。

如果是标记的使用次数,那么一般是为了达到一定使用次数后删除该连接,并重新开启新生连接。关于这一点我其实也有一点疑问,就是关闭健康连接的原因是什么?

如果是标记的等待使用数,那么当一个请求使用关闭释放时需要对其做 '-1'。当达到最大连接数,并且没有空闲连接可用时,就选择标记数最小的连接分配给请求,这里有一个问题需要注意!这时其实引用计数也兼任了连接调度分配的职责,需要考虑该连接的使用者中如果有耗时操作,就会导致后续请求的等待。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注