ceph源码分析之消息通信机制

本文详细分析了Ceph中消息通信的机制,从Messenger、Pipe、Connection三个核心概念入手,解释了网络层的工作流程。Ceph使用基于poll的异步网络IO方式,通过读写线程处理请求,Messenger负责监听和连接管理,Pipe维护会话状态,Connection封装socket。文章还介绍了Accepter、DispatchQueue和Connection的作用,以及它们如何协同工作完成消息的发送与接收。
摘要由CSDN通过智能技术生成

在介绍ceph的读写流程时,我们流程的开始于OSD::_ms_dispatcher,这个函数的意义表示,osd拿到了消息,并要根据不同的表示对消息进行dispatcher,那么消息究竟是如何来的,这个之前没有进行任何介绍,本章主要就是对此进行梳理。本文引用参考了《解析ceph:网络层的处理》这篇文章

 

现在大多的网络编程中,都会使用基于事件通知的异步网络IO方式来实现,比如EpollKqueueCeph项目开始的比较早,使用的是poll。在终端采用了两个读写线程pipe:: reader_threadpipe::writer_thread来处理读写事件。读线程在得到请求后会解析网络流并重构消息,然后派发给后端的dispatcher队列,后端的dispatcher线程负责将队列中的消息进行分发。写线程等到有模块调用send_message时会被wakeup然后处理。

 

Ceph在目前的网络层面上有三个重要概念,分别是 MessengerPipeConnectionMessenger实际上可以理解为一个监听地址和多个连接的集合。比如每个OSD 中会有cluster_messenger public_messenger,顾名思义cluster_messenger 负责给OSD 与其他OSD Monitor 的通信并提供了一个监听地址,public_messenger负责与客户端的通信并提供了一个面向客户端的监听地址。因此cluster_messenger 中负责的连接会全部是面向其他OSD 或者Monitor 的连接。Pipe实际上是一个 Session 的载体,为了解决网络连接不稳定或者临时闪断连接的问题,Pipe会一直维护面向一个终端地址的会话状态,如类似 TCP 包序号的消息序号和发送队列。Connection 就是一个 socket

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值