RGW简介
Ceph对象存储又名RGW,提供REST风格的API接口,兼容S3和swift。RGW简单来说就是一个语义转换层,以s3接口来说,就是将s3语义的数据读写转换成rados集群中对象的读写。比方说上传文件,RGW主要做的事情就是将文件对象拆分成多个rados集群对象保存下来(当然不止这么简单),下载文件再将多个rados集群对象读取上来返回给用户。所以用户看到的一个文件映射到rados集群中可能是1:N的关系。
RGW设计
对外来说用户通过发送http请求到apache,apache转fastcgi module到radosgw内部的fastcgi接收端,然后radosgw通过librados将数据存储在rados集群中。业务流向图如下:
RGW内部主要分为3大部分:
1、 rgw-http:解析接收到的restful请求,包括S3,SWIFT,ADMIN Ops等
2、 librgw:将协议语义转换为对象存储的语义,最终将元数据或数据存储在rados集群中去。这里面细分的话又有文件数据,桶元数据,用户信息数据,计量数据,配额信息数据,日志等
3、 后台:rgw有多个后台处理或刷数据线程。包括gc(垃圾数据回收),usage(计量数据),renewlog(远程复制data日志)等。
RGW主流程线程模型
Rgw的主要线程模型使用的是ceph通用的线程池管理,主线程用于接收fastcgi接收到的请求,然后将请求丢队列,具体的请求都是由threadPool的worker线程来处理