什么是cls
cls对应ceph原文件中的 src/cls 目录,在官方文档EXTENDING CEPH中有对这个概念作出介绍:
You can extend Ceph by creating shared object classes called ‘Ceph Classes’. Ceph loads
.so
classes stored in theosd class dir
directory dynamically (i.e.,$libdir/rados-classes
by default). When you implement a class, you can create new object methods that have the ability to call the native methods in the Ceph Object Store, or other class methods you incorporate via libraries or create yourself.
cls的作用
简单的说,就是ceph通过 cls 让 OSD 可以动态加载模块(so),使得ceph的原生应用(RBD、RADOSGW等)能够在OSD侧实现一些逻辑。
这样做有什么好处??
- 灵活,我们可以通过cls来实现自己的op,而不用修改OSD的代码
其实也不灵活,毕竟实现cls模块需要对OSD代码上下文和编程方式有一定了解。
- 性能,基于此,我们可以避免一次多余的网络数据传输。
比如我们需要计算一个对象的md5, 按照正常的流程需要从OSD读取数据 到客户端,然后客户端计算MD5, 现在直接在OSD侧就能完成MD5计算,只需要将计算结果返回客户端即可。