3.13.2 对象存储逻辑时钟应用
对象存储通常使用逻辑时钟来提供序号,为多节点的交互控制提供时序控制,保证请求的顺序性。开源系统 CEPH对千并发写请求,通过主 OSD上的 ObjectStore::Sequencer递增序号来实现逻辑时钟,为每个客户端发送过来的写请求分配序号,然后主 OSD将写请求复制到多个从 OSD, 并使用 该序号作为并发请求的先后顺序,保证请求在多个 OSD上的顺序性,即使出现网络异常、服务器错误、磁盘亚 健康状态恢复后,系统复制模块仍然能够根据序号正确地恢复。如下是并发写请求控制示例。
· 客户端 1发送写请求 WRl(将对象 X修改为 100),客户端 2发送写请求 WR2(将对象X修改为200),客户端 3发送写请求WR3(将对象X修改为 300)。
· 主 OSD收到请求后 ,为写请求 WRl分配序号 1001,为写请求 WR2分配序号 1002,为写请求 WR3分配序号 1003。
· 主 OSD按照序号递增顺序 WR1->WR2->WR3写入存储,最后 X的值为 300。同样,所有从 OSD即使出现错误也会在 再次收到请求后 ,根据序号组织写请求顺序,按照WR1->WR2->WR3写入存储,保证和主 OSD上的执行顺序一致。
对于并发冲突较多的场景,逻辑时钟是不错的技术选择,就是需要主节点做递增序号管 理,接入客户端太多时会有性能瓶颈 。因此对千并发冲突较少 的场景,也可以选择其他 技术,例如,Amazon'sDynamo就选择使用 时钟向量技术来优化性能,而RIAK则采用 版本向量技术来优化性能,系统保存多个数据版本,可以有效地支撑误删除、误操作时的数据恢复,这 也是额外 的亮点。