zoukankan      html  css  js  c++  java
  • 【osd】OSD的读写流程

     Ceph IO, Rados IO 流程解析(读写)

    CEPH RADOS IO(读写) 处理流程图:

    CPEH读写顺序保证: 

    •  不同对象的并发控制

    不同的对象有可能落到同一个pg里,ceph实现里,在OSD的处理线程中就会给PG加锁,一直到queue_transactions里把事务放到bluestore的队列里才释放PG的锁。从这里可以看出,对于同一个PG里的不同对象,是通过PG锁来进行并发的控制,好在这个过程中没有涉及到对象的I/O,不会太影响效率;对于不同PG的对象,就可以直接进行并发访问。

    • 同一个对象的并发顺序控制

    从上面的介绍可以得知,同一个对象的访问也会受到PG锁的限制,但这是在OSD的处理逻辑里。对于同一个对象的访问,要考虑的情况比较复杂。从用户使用场景上来说,有两种使用方式。比如:

    1)一个client情况,客户端对同一个对象的更新处理逻辑是串行的,要等前一次写请求完成,再进行后一次的读取或者写更新;

    2)多个client对同一个对象的并发访问,目前的分布式系统里很少能做到,涉及到多个client同时更新带来的数据一致性问题,一般都需要集群文件系统的支持;

    对于多client的场景,ceph的rbd也是不能保证的,因此这里主要以单client访问ceph rbd块设备的场景进行阐述,看一个极端的例子:同一个client先后发送了2次对同一个对象的异步写请求。以这个例子展开进行说明。

    • pg层顺序保证及对象锁机制

    从消息队列里取消息进行处理时,osd端处理op是划分为多个shard,然后每个shard里可以配置多个线程,pg按照取模的方式映射到不同的shard里。另外osd在处理pg时,从消息队列里取出的时候就对pg加了写锁的,而且是在请求下发到store后端才释放的锁,所以消息队列里过来的消息有序后,在osd端pg这一层处理时也是有序的

    参考资料

    1. Ceph IO, Rados IO 流程解析(读写)

  • 相关阅读:
    HDU 5392 Infoplane in Tina Town
    HDU 2206 IP的计算(字符串处理)
    线程的条件变量实例
    CentOS安装配置Samba
    PO订单审批拒绝API
    【Java集合源代码剖析】Hashtable源代码剖析
    magento megatron主题加入中文
    递归系列2(字符串翻转,12345翻转)
    机器学习之&&Andrew Ng课程复习--- 聚类——Clustering
    JSP基础
  • 原文地址:https://www.cnblogs.com/sunbines/p/15667089.html
Copyright © 2011-2022 走看看