张程伟:MongoDB 技术分析 -TransportLayer

Posted ABCLink社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了张程伟:MongoDB 技术分析 -TransportLayer相关的知识,希望对你有一定的参考价值。

MongoDB 是当前最为流行的 NoSQL 数据库,功能丰富,社区非常活跃,版本迭代迅速,在企业中得到大规模的使用。


MongoDB 是非常流行的分布式文档型 NOSQL 数据库,拥有很好的性能表现和扩展能力,并且具有 Scheme-free,以及丰富的二级索引和周边生态,在互联网应用中有着广泛的使用场景。笔者因为工作原因接触到 MongoDB 数据库,在查找 MongoDB 的文档时发现大多是介绍怎么使用的文档,对 MongoDB 的内部实现原理介绍的很少,因此把自己对 MongoDB 3.4 版本代码的理解记录并分享出来。


MongoDB 主体上包含 3 个子系统:Mongos、ShardServer、ConfigServer;Mongos 负责将请求路由到对应的 ShardServer 节点,ShardServer 负责具体的数据库业务逻辑处理,ConfigServer 负责集群管理等工作。


张程伟:MongoDB 技术分析 -TransportLayer


本文介绍的 TransportLayer 是 MongoDB 的一个基础模块,负责网络服务端的收发包处理逻辑,是 Monogs、ShardServer 和 ConfigServer 中接收网络请求的公共模块,所有网络请求首先达到 TransportLayer 模块,然后再转交由业务模块处理。

TransportLayer 的业务逻辑

A

张程伟:MongoDB 技术分析 -TransportLayer

如上图所示,TransportLayer 包含如下几个功能:

  • 启动时创建 listener 线程监听网络端口,接受客户端连接请求;



  • 收到新连接后建立会话,并创建新的 conn 线程处理该连接的后续请求;


3.4 版本是为每个网络连接创建一个专用线程,并同步调用网络接口 recv/send 收发包;3.6 版本做了较大修改,引入了 boost.asio 库实现网络接口的异步调用并作为默认配置,同时还把线程模型调整为线程池,动态根据 workload 压力情况调整线程数量,在大量连接情况下可以避免产生大量的处理线程,降低线程切换开销,以获得更稳定的性能表现。


  • conn 线程循环处理:sourceMessage 从网络收包,processMessage 处理业务逻辑,sinkMessage 发送响应请求给客户端。


该部分逻辑在 mongos 或 mongod 的 service_entry_point 文件中_sessionLoop 函数中实现,进一步根据 message 的类型走不同 COMMAND 的处理流程。


TransportLayer 模块设计

张程伟:MongoDB 技术分析 -TransportLayer


  • ListenerLegacy 类负责监听端口,接收新连接;

  • MessagingPort 类负责具体收发包处理;

  • TransportLayerLegacy 的_handleNewConnection 函数会判断是否超过允许的最大连接数;

  • LegacySession 维持一个连接中多次操作的会话关系;

  • LegacyTicket 增加收发包超时机制。


张程伟:MongoDB 技术分析 -TransportLayer


分享人介绍 :

张程伟华为云文档数据库架构师,NOSQL 内核技术研究团队 Leader,从事数据库和存储融合方向的技术研究工作,有十多年的企业存储及分布式存储研发经验。



ABCLink 社区

人工智能  大数据  云计算



技术 | 管理 | 分享 | 互助


以上是关于张程伟:MongoDB 技术分析 -TransportLayer的主要内容,如果未能解决你的问题,请参考以下文章

codevs 2557 张程易,编程易

伟景行WebGL为客户创造新价值

课程设计 高云鹏 郑帅康 张程 姬泽辉

数据挖掘概念与技术(韩家伟)阅读笔记4--数据集成和变换

工信部信软司副司长王建伟-《工业互联网平台发展与展望》

首尔伟傲世向SK magic提供卓有成效的Violeds杀菌技术