暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB技术分析(5)- Mongos的连接池

数据库及存储技术 2021-04-16
1117

Mongos在MongoDB的Sharding集群模式下承担Router的责任,负责将来自客户端的请求转发给ShardServer和ConfigServer节点,因此维护着到ShardServer和ConfigServer的连接池,用于避免频繁建连接的消耗




连接池类型



Mongos总共包括三类连接池,包括TaskExecutorPool中的连接池用于查询操作、shardConnectionPool用于更新操作及Command操作,globalConnPool用于部分不需要checkShardVersion的Command操作如删除等。




Task Executor Pool中的连接池

在前面介绍TaskExecutorPool的文章中有介绍到,系统为每一个CPU核创建一个TaskExecutor对象,执行查询类操作Query、getMore。

  • 每一个TaskExecutor对象包含一个ConnectionPool;

  • 每个ConnectionPool按照目标Host(Shard或Config)组织Connection;

  • Connection根据当前的状态归宿不同的队列:

    • checkedOutPool包含正在执行查询请求的连接

    • readyPool表示当前可用的连接

    • processingPool表示正在执行refresh的连接,包括正在创建的连接,以及超时不活跃的连接执行isMaster命令判断连接是否正常;

ConnectionPool以Specific Pool为单位控制连接的数量及上下限,当查询请求到来时,会比较当前待执行的请求数量和当前已有的连接数量,如果请求数量大于连接数量,就会补齐连接到待执行请求数量。

当请求执行完归还连接时,如果连接数高于下限,则直接销毁,如果等于下限则保留。

系统默认连接数下限为1,即每核每主机只保留一个连接,默认上限为int的最大值,不做限制。


globalConnPool和ShardConnectionPool

为同一个类DBConnectionPool的两个不同实例,负责系统中除查询外的操作,简单分工如下:

  • globalConnPool用于不需要检查shardVersion版本是否一致的操作,以删除操作为主; 

  • shardConnectionPool用于执行Insert/Update/Delete,以及大部分Command命令,需要额外检查mongos和ShardServer间的shardVersion是否一致,如果不一致抛出异常初始重新更新ChunkMap;

DBConnectionPool内部也是按照目标Host来管理连接,并以Host为单位控制连接数量上下限。



连接池统计


MongoDB有两个命令可以查看连接池的统计信息,connPoolStat和shardConnPoolStat,3.4版本的官方文档解释如下:

connPoolStats
The command connPoolStats returns information regarding the open outgoing connections from the current database instance to other members of the sharded cluster or replica set.

shardConnPoolStats
Returns information on the pooled and cached connections in the sharded connection pool. The command also returns information on the per-thread connection cache in the connection pool.

说的比较模糊,不太好理解具体含义,诊断问题的时候也不知道每个输出具体代表啥。 那么,结合前面关于连接池类型的介绍,这两个命令的输出对应如下:

connPoolStats

实际上包含了上面globalConnPool和Task Executor Pool两个连接池的统计输出:

  • NetworkInterfaceASIO开头的为Task Executor Pool的连接池统计,用于执行查询请求的连接情况;

  • global段的输出,为globalConnPool的连接情况;

shardConnPoolStats

实际上为上面shardConnnectionPool的统计信息,包含了Insert/Update/Delete操作需要的连接。



..........................  END  ..........................


长按二维码关注


文章转载自数据库及存储技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论