多节点连接池设计想法

    如果不是编写网络通讯应用相信对连接池接触比较少,其实我们是经常用到的特别是使用ado.net访问数据库的时候,默认情况就开启了连接池功能.连接池的主要功能是对N个连接循还复用,而不是每次使用都创建一个次的连接,通过减少连接创建达到一个更好性能的网络吞吐处理.

    在ado.net使用的连接池都是针对一台服务器,但在有些情况下应用相对比较复杂,逻辑分布在几台服务器上,而WEB分布调用这几个逻辑服务器应用.

以上这情况如果连接池只针对单一服务器的情况,这时候web维护不同服务器的连接池就变得比较麻烦多了;如节点轮循调用,如果一个节点有异常,还要放弃异常节点轮循;服务器恢复正常后还要把节点归队等一系列的问题都要在调用层考虑.为了方便地应付以上问题,所以在beetle里添加一个多节点的连接池,用于处理这情况.

当某个节的的Socket出现网络异常的时候,可以断定为引节点有问题,池在轮循的过程根据节状态来确认是否放弃些节点轮循.对于节点恢复池可以在指定间隔时间后对节点进行检查,如果能正常连接则恢复节点.

以上是大概设计思路,代码也只是完成部分,如果有这方面经验或兴趣的朋友不防提一下一个自己的意见和想法.

posted @ 2012-08-22 21:19  beetlex  阅读(1854)  评论(1编辑  收藏  举报