Ceph开发每周谈Vol 38|LibRBD Client Cache

2016年08月 · 麦子迈

这是Ceph开发每周谈的第三十八篇文章,记录从16年8月21号到16年8月28号的社区开发情况。笔者从前年开始做Ceph的技术模块分析到今年中告一段落,想必有挺多人期待下一篇Ceph技术分析。考虑到Ceph的发展已经从前年的一穷二白到现在的如火如荼,但对于社区的方向和实况仍有所脱节,笔者考虑开始Ceph开发每周谈这个系列。每篇文章都会综述上周技术更新,围绕几个热点进行深度解析,如果正好有产业届新闻的话就进行解读,最后有读者反馈问题的话并且值得一聊的话,就附上答疑部分。

  • 上周综述

上周 Ceph 并没有太多可述进展

  • Librbd Client Side Cache

LibRBD Cache 目前仅支持基于对象的内存缓存,并且不提供保序的 writeback 支持。这个缓存仅仅能作为虚拟化场景下使用。同时,目前基于 ObjectCacher 的实现是单线程,而 librbd 是多线程,使得 ObjectCacher 存在明显的高性能瓶颈。ObjectCacher 的大多数复杂度来自于它同时要支持 librbd 和 cephfs 两者。因此实现一个独立的块缓存是个更好的选择,另一个限制是目前每个镜像在 RBD 层不共享缓存。

目前计划先实现读缓存,使得在客户端侧利用本地存储介质进行缓存。目前在缓存空间管理有两个选择,一个是独立实现,另一个是利用 BlueStore 的设计。因为本质上,BlueStore 就是一个本地存储介质的管理和分发引擎,作为客户端缓存并没有太多问题,同时能复用众多 BlueStore 设计也是非常好的。

详细的讨论见CDM August(http://pad.ceph.com/p/rbd_persistent_cache)

  • Mantle: A Programmable Metadata Load Balancer

在之前提到的 Mantle 项目已经开始做整合主线的准备了,Pull Request(https://github.com/ceph/ceph/pull/10887) 主要依赖 Ceph CLS Lua Class 来实现,使用 LUA 代码进行动态的元数据负载均衡管理。