注意

本文档适用于 Ceph 开发版本。

The ClientRequest管道

RADOS 要求每个对象的写入操作必须有序。如果客户端提交一系列并发写入(不希望之前的写入完成后再提交下一个),那么该客户端可以依赖于写入操作按照提交的顺序完成。

因此,客户端和 OSD 之间的通信和队列机制必须在双方都小心确保(连接,对象)对的写入在整个过程中保持有序。

crimson-osd 通过管道和阶段(crimson/osd/osd_operation.h)强制执行这种排序。当消息到达 OSD 时,它们进入 ConnectionPipeline::AwaitActive 阶段,然后通过一系列管道阶段:

  • ConnectionPipeline:表示在将消息交给目标 PG 之前的每个连接阶段的消息处理路径

  • PerShardPipeline:表示从接收分片到具有目标 PG 的分片的交接的中间管道。

  • CommonPGPipeline:表示在获取操作目标的对象上下文之前在目标 PG 上的处理。

  • CommonOBCPipeline:表示在目标对象上的实际 IO 处理

因为 CommonOBCPipeline 是按对象而不是按连接或按 PG 的,所以多个不同对象的请求可以同时处于同一个 CommonOBCPipeline 阶段。这允许我们在同一个 PG 中同时服务多个读取。我们也可以同时处理多个对象的写入,直到写入实际提交为止。

详细信息请参阅 crimson/osd/osd_operations/client_request.(h|cc)。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.