对象存储文件系统分布式锁设计与实现

背景

capfs是实验室自主研发,隶属于国家863重大项目“海量存储系统整体研究”的分布式对象存储系统,设计采用类似于PNFS的三方架构,具有高聚合带宽,并且具备高可扩展性、支持大目录等。系统能够达到60GB/s聚合带宽,支持10PB级存储,IOPS达到10^4至10^5,系统能够支持10亿个文件的访问(这些不需要强调)。

任务

主要任务是为capfs提供分布式锁服务,为系统中的共享资源提供协同访问和一致性视图,保证数据并发访问的安全性。主要涉及flock文件锁系统调用功能及多客户端访问同一文件的元数据或数据一致性,满足读写一致性要求。

设计

首先是带领小组分析学习成熟系统NFS及Lustre文件系统的一致性保证机制,为设计作为参考。NFS在v3版本之前都仅采用时间戳判断元数据是否失效,并每次更新同步并重新请求元数据,在多客户端访问下可能存在短暂的读写不一致情况。NFSv4在此基础上引入租约及回调机制,但只在open操作时申请,并且在remove类似操作时释放并回调,导致在多客户端情况下可能出现ping-pong效应且客户端缓存利用不足。Lustre设计多种锁类型进行一致性保护,修改了Linux内核以支持意图锁模式,并利用多种回调机制使得客户端尽可能持有锁,在服务器实现方面利用namespace及资源两个概念描述被保护的共享资源,并为每个资源设计三种锁队列。

编写分布式锁主体框架以及与分布式系统耦合相关的代码。主要是提供文件级租约锁服务以保障客户端元数据缓存的一致性,该设计充分吸取了NFS的设计经验,这样就可以避免复杂的锁请求恢复及死锁检测(租约会在一段时间后自动失效,目前设置为30s,优化可以使用自适应算法),但是在lookup时即申请并在对应操作进行锁升级以加大并发度。服务器与回调接口设计参考Lustre,服务器架设在mds端,这样锁请求与元数据请求同时发送;同时在客户端架设锁客户端以类似plugin的形式嵌合(模块),接口传入资源字符串以保证通用性,以不同的命名规则区分文件锁及租约锁申请。

优化、难点

性能优化方面实现锁客户端的锁缓存方便回调查找,以及所谓子树锁优化,前者保证回调查找的高效,后者保证同一目录下多文件不用多次进行租约授予。继续可以利用冲突判断(目前为5次,超过后即放弃元数据缓存)降低ping-pong效应,特别是子树锁可能导致的冲突加剧。容易忽略的地方是客户端的时间同步。高可用性方面,需要加强mds的高可用性,锁相关的mds事务处理尚未实现。(关键设计难点在删除操作的一致性保证,目前尚未解决)。

支持5000并发访问

关键点:Linux内核开发,租约机制,回调,子树锁优化

本站总访问量