这几天在做一个API的时候,由于后端服务器量太多,导致前段webserver的CGI连接数过多,所以,不得不使用连接池来进行管理。(好吧,我知道说出来有点恐怖,600台webserver,125台32G的cache服务器,也就是cache量接近3T……)
之前有人实现过,大体思路如下:
1)定义一个list数组,里面的每个指针对象维护一条连接,并且为list规定一个最大值。
2)每当有信莲连接生成时(或者已经有的连接重新使用),就向list中添加一个对象;如果list的大小已经大于最大值,那么就把最后一个对象关闭并且扔出连接池(也就是要求,在这个对象的连接被断掉后,这个对象再次使用时,应该有重连的功能)

这样做的确比较简单,但是也会产生如下几个问题:
1)在第二点中,如果是已经有的连接重新使用,假设我们规定list的最大大小为1,那么这个被重复使用的连接实际上是在被重复的关闭和重新打开。
2)没有权重的概念,即可能对于一个访问频率比较高的连接,很可能会被一个访问量比较低的连接冲击导致连接断掉。

基于以上考虑,我重新设计了一套连接池模型:

typedef _conn_info
{
????int iCreateTime;//就是创建这个结构体的时间(第一次建立连接时的时间)
????int iLastTime;//最后一次被调用的时间
????int iReq;//被使用到的次数
????CConnClass* ptrConn;//对象的指针,维护着一个长连接
????//需要重载??>,>=,==,<,<= 几个符号,因为需要直接来通过struct的比较来实现权重的比较
}ConnInfo;
class CConnPool
{
????public:
????????int SetMaxConnNum(int maxConnNum);
????????int push_back(CConnClass *ptrConn)
????????{
????????????m_MulSetConnInfo.find(ptrConn)
????????????if(找到ptrConn在m_MulSetConnInfo中已经存在)
????????????{
????????????????获取已经存在的ConnInfo;
????????????????从m_MulSetConnInfo中删除
????????????}
????????????else
????????????{
????????????????创建一个新的ConnInfo
????????????}
????????????将iLastTime和iReq重新赋值,并且塞回m_MulSetConnInfo中去;
????????????while(m_MulSetConnInfo.size()>m_MaxConnNum)
????????????{
????????????????获取m_MulSetConnInfo的最后一个对象
????????????????关闭这个对象的ptr维护的长连接
????????????????m_MulSetConnInfo.erase(这个对象);
????????????}
????????}
????private:
????????multiset<ConnInfo> m_MulSetConnInfo;//用来
????????int m_MaxConnNum;
};

用这样的方法来实现的最大好处,就是,权重?。òǖ饔昧啃〉鹊龋┑某ち踊静换嵊跋斓饺ㄖ卮蟮某ち?,当然,这样消耗的效率也会比直接用list大一点。

好啦,就到这里啦,如果有更好的实现方法,我会继续在这里和大家分享的~

转载请注明出处.湖南快乐十分网址

实现多线程对队列的读写操作(封装类)

由于之前一个server用到后台线程的功能,所以写了一个线程+队列的通用模型。(代码见文章底的附件) 应用场景:当处理的数据不影响回包,即可以在后台执行。 ...

阅读全文

3则回应给“有关连接池管理的一个简单实现设想”

  1. egmkang说道:

    哇,你这啥公司,这么牛叉

    [回复]

    湖南快乐十分网址 回复:

    呵呵,腾讯……

    [回复]

    egmkang 回复:

    怪不得n多服务器

    [回复]

发表评论

湖南快乐十分网址
  • 国务院印发《关于积极有效利用外资推动经济高质量发展若干措施的通知》 2018-11-28
  • 庆祝中国人民解放军建军90周年大会在京隆重举行 2018-11-24
  • 稳中有进 稳中向好——国家统计局新闻发言人毛盛勇解读经济运行态势 2018-11-09
  • 人民观影团:《正义联盟》六大英雄全员聚首 2018-11-09
  • 【十九大·理论新视野】动漫:“人类命运共同体”如何构建 2018-10-09
  • 尽力打好每一场球(奥运大点兵·男篮)  2018-09-14
  • 浪潮孙丕恕:建立“智慧城市大脑” 实现“以人为本”的全智能交通 2018-09-14
  • 横断山脉,让我潜入了花香四溢的宁静文章中国国家地理网 2018-08-23
  • 首届妈祖信俗“立德”论坛成功举办 2018-08-23
  • 2017年度湖北新闻奖新闻摄影复评结果公示 2018-08-16
  • Срочно Закон о надзоре одобрен на заключительном заседании 1-й сессии ВСНП 13-го созыва 2018-08-13
  • 端午假期国内游客超8900万人次 全域旅游见成效 2018-08-08
  • “文化自信”的古田探索 2018-08-08
  • 重庆市工商行政管理局公众信息网 2018-08-03
  • 《古汉字发展论》简介 2018-08-02
  • 306| 484| 196| 599| 753| 371| 815| 441| 313| 479|