知识卡片
OSD到PGBackend的分层职责设计
内容
服务端从上到下按管辖范围分层:OSD/OSDService 处理一个节点层面的事务(早期是一个类,因为承载的功能越来越多才拆出 OSDService 分担);PG 用 boost statechart 状态机维护一个 PG 的状态转换;ReplicatedPG 继承 PG,在其上实现具体的数据读写和恢复逻辑;PGBackend 再抽出一层,专门负责把更新操作以事务形式同步到该 PG 的其他副本,并按副本模式/纠删码模式分成 ReplicatedBackend 和 ECBackend 两个子类。这条链路的分层原则是”越往下越具体到某一种冗余策略的实现细节”,PG 层的状态管理完全不需要关心数据到底是靠副本还是纠删码同步的。
参考来源
《Ceph源码分析》第6章《Ceph的数据读写》