美文网首页
ceph-rgw读写事务性

ceph-rgw读写事务性

作者: 小跑001 | 来源:发表于2022-10-09 19:26 被阅读0次

    背景

    rgw写一个对象的时候需要更新文件内容,又要更新index pool中的索引,如何保证多个操作的一致性,也就是如何保证多个操作的事务性。有没可能只更新了文件内容而没更新index pool,有没可能并发操作下index pool和文件内容并不一致。

    分析

    这里其实有两个问题:
    1) 原子性问题,也就是只更新了index 而没更新数据,或者说只更新了数据而没更新index。

    答:这里实际用了最终一致性。也就是记录index的prepare日志,以是否更新了rados header对象为准来判断是否要更新index对象。当服务中断恢复后,可以通过prepare日志来查询是否更新了header对象,从而决定是否更新index索引。

    2) 写写冲突问题。也就是两个客户端同时并发写入一个rgw对象,最终状态是A客户端更新了索引而B客户端更新了header对象,从而导致两边数据不一致。

    答: 这里仍然采用了以header对象为准,更新完header对象会返回一个唯一时间戳,后更新的肯定时间戳较大,当去更新index的时候会比较时间戳,如果发现已经存在更大的时间戳则放弃更新index,从而避免了不一致的情况发生。

    相关文章

      网友评论

          本文标题:ceph-rgw读写事务性

          本文链接:https://www.haomeiwen.com/subject/mfswartx.html