千家信息网

ceph中RadosGW框架的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下ceph中RadosGW框架的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!RadosGW分析。一、RadosGW的main()函数解析。RadosGW的m
千家信息网最后更新 2026年11月01日ceph中RadosGW框架的示例分析

小编给大家分享一下ceph中RadosGW框架的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

RadosGW分析。

一、RadosGW的main()函数解析。

RadosGW的main()函数位于rgw_main.cc中,该函数是RadosGW的入口函数。这里主要解析和RadosGW相关的内容,尽量省略WebServer的内容。

main()函数解析如下:

1、根据g_conf->rgw_frontends得到默认支持的前端WebServers,目前默认支持的前端WebServer包括fastcgi和civetweb。对于每一个支持的前端都有一个RGWFrontendConfig类与之对应,最后将WebServer的名字和对应的RGWFrontendConfig类设置到fe_map集合中;

2、调用global_init()函数做初始化操作;

3、调用rgw_tool_init()函数从g_conf->rgw_mime_type_file指定的文件中读取该文件中的数据并初始化;

4、调用curl_global_init()函数初始化libcurl,由此可以看出rgw使用curl进行网络数据传输;

5、调用FCGX_Init()初始化WebServer;

6、调用RGWStoreManager::get_storage()函数初始化librados对象,即:以后对Ceph集群的操作都得通过该librados对象;

7、调用rgw_rest_init()初始化rest部分;

8、调用rgw_user_init()函数初始化radosgw中关于用户部分的类RGWUserMetadataHandler,且将该类注册到store->meta_mgr中;

9、调用rgw_buckt_init()函数初始化radosgw中关于bucket部分的类RGWBucketMetadataHandler和RGWBucketInstanceMetadataHandler,且将这两个类注册到store->meta_mgr中;

10、对于兼容S3的API来说,使用RGWRESTMgr_S3类作为radosgw中rest接口的默认处理类;

11、对于支持admin的操作来说,注册管理员操作对应的类RGWRESTMgr_Usage/RGWRESTMgr_User/RGWRESTMgr_Bucket/RGWRESTMgr_Metadata/RGWRESTMgr_Log/RGWRESTMgr_Opstate/RGWRESTMgr_ReplicaLog/RGWRESTMgr_Config/RGWRESTMgr_Realm;

12、注册信号处理函数,处理诸如SIGUP/SIGTERM等信号;

13、初始化前端WebServer并运行前端WebServer;

14、调用wait_shutdown()函数等待radosgw进程执行完毕;

实际的Web请求处理位于rgw_process.cc::process_request()函数内,该函数负责处理Web前端的数据读写请求。


二、process_request()函数分析流程。

int process_request(RGWRados* store, RGWREST* rest, RGWRequest* req, RGWStreamIO* client_io, OpsLogSocket* olog)

参数说明:

store:在rgw_main.cc中的main()函数中调用的RGWStoreManager::get_storage()的返回值;

rest:在rgw_main.cc中的main()函数中调用rest.register_default_mgr(new RGWRESTMgr_S3())的返回值,也就是说rest是类RGWRESTMgr_S3的实例;

处理流程:

1)rest->get_handler():得到RGWHandler_REST类实例,包括:RGWHandler_REST_Service_S3/RGWHandler_REST_Bucket_S3/RGWHandler_REST_Obj_S3;

2)handler->get_op():根据request的op得到对应的操作处理类,如:GET/PUT/DELETE/POST等;

3)handler->authorize():执行认证操作。具体调用流程如下:

handler->authorize()

|__RGWHandler_REST_S3::authorize()

|__RGW_Auth_S3::authorize()

|__RGW_Auth_S3::authorize_v4()/RGW_Auth_S3::authorize_v2()/

根据客户端的请求头中是否包含http_auth以及http_auth的内容,确定采用S3v4或S3v2进行认证;

4)handler->postauth_init():检查bucket以及object名字的有效性。

handler->postauth_init()

|__rgw_parse_url_bucket() 解析出tenant名称和bucket名称

|__validate_tenant_name() 校验tenant名称的有效性

|__validate_s3_bucket_name() 校验S3bucket名称的有效性

|__validate_object_name() 校验对象名称的有效性

5)handler->init_permissions():读取并创建bucket有效性检查信息。

handler->init_permissions()

|__rgw_build_bucket_policies()

|__初始化req_state->bucket_acl为RGWAccessControlPolicy_S3类实例

|__RGWRados::get_bucket_info()/RGWRados::get_bucket_instance_info()获取bucket info信息

|__read_policy()读取bucket的ACL信息,bucket的属性信息等

|__RGWRados::get_zonegroup()读取bucket的zone信息

6)handler->retarget() 重新定位和计算存储对象,这个对于某些website访问的方式有效。

7)handler->read_permissions() 获取bucket以及object的ACL信息

8)op->init_processing()

op->init_processing()

|__RGWOp::init_processing()

|__RGWOp::init_quota()

|__获取bucket_quota

|__获取user_quota

9)op->verify_op_mask()

op->verify_op_mask()

|__RGWOp::verify_op_mask() 检查操作的op_mask和用户的op_mask是否一致

10)op->verify_permission()

op->verify_permission()

|__调用RGWOp子类对应的verify_permission()函数,由RGWOp子类自行判断权限是否满足

11)op->verify_params()

op->verify_params()

|__RGWPutObj_ObjStore::verify_params()/RGWPostObj_ObjStore::verify_params() 检查上传的数据大小是否超过g_conf->rgw_max_put_size值

12)op->pre_exec()

op->pre_exec()

|__调用RGWOp子类对应的pre_exec()函数,由RGWOp子类自行处理

13)op->execute()

op->execute()

|__调用RGWOp子类对应的execute()函数,由RGWOp子类自行处理

14)op->complete()

op->complete()

|__RGWOp::complete()

|__调用RGWOp子类对应的send_response()函数,由RGWOp子类自行处理


因此在实际处理对象存储请求时,需要RGWOp子类处理的主要函数包括:

1)RGWOp::verify_permission()

2)RGWOp::pre_exec()

3)RGWOp::execute()

4)RGWOp::send_response()


看完了这篇文章,相信你对"ceph中RadosGW框架的示例分析"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

函数 处理 子类 有效 信息 前端 名称 对象 有效性 分析 数据 支持 检查 内容 实例 流程 部分 框架 示例 信号 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 上海卓越科技互联网 科技金融是不是互联网金融 今日互联网科技 网络科技有限互联网 易互联网科技有限公司 猪兼强互联网科技 互联网 卓越科技 融贸通互联网科技 恒生科技互联网指数分析 汽车互联网创新科技园 宁夏众和广鑫互联网科技有限公司 科技互联网大厂 重庆互联网医院沙龙医盟信息科技 语蝶互联网科技有限公司 山东星卡互联网科技有限公司官网 上海互联网科技公司ppt 江苏互联网科技小贷 平安好医生打造互联网科技医疗 重庆科技产业互联网有哪些 苏州找大状互联网科技有限公司 腾讯阿里互联网科技 上海挚品互联网科技 远拓互联网科技 中国航天科技大学国际工业互联网 企晟互联网信息科技有限公司 上海京穆互联网科技有限公司 郑州欣桑互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 如何强化互联网金融科技
0