1 / 26

对象存储系统方案设计

对象存储系统方案设计. 汇报人:黄小猛 牟帅 阮华斌 时间: 2010-11-5. 概要. 对象存储系统整体架构. 对象存储系统元数据. 对象操作设计. 容器操作设计. 存储适配层设计. 概要. 对象存储系统整体架构. 对象存储系统元数据. 对象操作设计. 容器操作设计. 存储适配层设计. 对象存储系统整体架构. 接口层. REST 接口. API 接口. 容器操作. 对象操作. 管理员. 用户管理. 创建. 删除. 创建. 删除. 容器相关功能. 对象相关功能. 系统管理. 访问控制. 读取. 写入. 读取属性. 整体.

norris
Download Presentation

对象存储系统方案设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 对象存储系统方案设计 汇报人:黄小猛 牟帅 阮华斌 时间:2010-11-5

  2. 概要 对象存储系统整体架构 对象存储系统元数据 对象操作设计 容器操作设计 存储适配层设计

  3. 概要 对象存储系统整体架构 对象存储系统元数据 对象操作设计 容器操作设计 存储适配层设计

  4. 对象存储系统整体架构 接口层 REST接口 API接口 容器操作 对象操作 管理员 用户管理 创建 删除 创建 删除 容器相关功能 对象相关功能 系统管理 访问控制 读取 写入 读取属性 整体 整体 日志管理 列出对象(集) 偏移量 偏移量 统计分析 容器控制 对象控制 服务层 图形界面操作 权限设置 对象服务层 设置属性 用户 属性设置 读取属性 授权管理 删除属性 删除属性 统计查看 统计 判别 安全模块(暂用MD5) Apache AXIS2/C 接口适配层(PVFS2 Trove 的Key-Value接口) 对象存储层 DCACHE 文件系统

  5. 概要 对象存储系统整体架构 对象存储系统元数据 对象操作设计 容器操作设计 存储适配层设计

  6. 对象存储系统元数据

  7. 概要 对象存储系统整体架构 对象存储系统元数据 对象操作设计 容器操作设计 存储适配层设计

  8. 对象操作设计 创建对象 PUT <Root URI>/<Container>/<ObjName> \ HTTP/1.1 User-Agent: Axis2C/1.6.0 Content-Length: [Numberic] Content_type: text/xml Host: <ip>:<port> <webdisk:operation><FileData>content</FileData><webdisk:operation> HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [xxx] X-OSS-Object-ID:string <?xml version=“1.0” encoding=“utf-8”?> <OSS> <Status>IntValue</Status> <ObjectURI>/<Container>/<ObjName></ObjectURI> <ObjectID>string</ObjectID> <ParentURI>string</Parent> <Desc>string</Desc> </OSS> Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  9. 对象操作设计 访问对象 GET <Root URI>/<Container>/<ObjName> \ HTTP/1.1 User-Agent: Axis2C/1.6.0 Content_type:[xxx] Host: <ip>:<port> Authorization: AccessKeyID:Signature X_OSS_Info: <?xml version=“1.0” encoding=“utf-8”?> <OSS> <Start-Pos>xxxx</Start-Pos> <Start-Length>xxxx</Start-Length> <Grandfather>abc/def</Grandfather> </OSS> HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [Time] Last-Modified: Time X-OSS-Object-ID:string X-OSS-Object-name:string X-OSS-Object-Size: X-OSS-Object-Create-Time: [Data……] Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  10. 对象操作设计 删除对象 DELETE<Root URI>/<Container>/<ObjName> \ HTTP/1.1 User-Agent: Axis2C/1.6.0 Host: <ip>:<port> Authorization: AccessKeyID:Signature HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [Time] Last-Modified: Time <OSS> <Status>IntValue</Status> <Desc>string</Desc> </OSS> Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  11. 概要 对象存储系统整体架构 对象存储系统元数据 对象操作设计 容器操作设计 存储适配层设计

  12. 容器操作设计 创建容器 HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [xxx] X-OSS-Object-ID:string <?xml version=“1.0” encoding=“utf-8”?> <OSS> <Status>IntValue</Status> <ObjectURI>/<Container>/<ObjName></ObjectURI> <ObjectID>string</ObjectID> <ParentURI>string</Parent> <Desc>string</Desc> </OSS> PUT <Root URI>/<Container>/ HTTP/1.1 User-Agent: Axis2C/1.6.0 Content-Length: [Numberic] Content_type: text/xml Host: <ip>:<port> Authorization: AccessKeyID:Signature X_OSS_Info: <?xml version=“1.0” encoding=“utf-8”?> <OSS> <ACL> <UserDefineMeta> <Key>string</Key> <Value>string</Value> </UserDefineMeta> <AccessControlUnit> <UserAccessKey> string </UserAccessKey> <ControlPermission> string </ControlPermission> </AccessControlUnit> </ACL> <Grandfather>abc/def</Grandfather> </OSS> Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  13. 容器操作设计 访问容器中的对象 GET <Root URI>/GetObjList/<ContainerID> \ HTTP/1.1 User-Agent: Axis2C/1.6.0 Content_type:[xxx] Host: <ip>:<port> Authorization: AccessKeyID:Signature X_OSS_Info: <?xml version=“1.0” encoding=“utf-8”?> <OSS> <Request-User-Prop>xxxxcRequest-User-Prop> <Start-Pos>xxxx</Start-Pos> <max-result>xxx</max-result> <Grandfather>abc/def</Grandfather> </OSS> HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [Time] Content-type:xxx Content-length:xxx <?xml version="1.0" encoding="utf-8"?> <ListObjectsResult> <Start-position>int64</Start-position> <MaxResults>int</MaxResults> <ObjectList> <ObjectUnit> <ObjectID>string</ObjectID> <ObjectName>string</ObjectName> <SysProp> <CreateTime>time</CreateTime> …… </SysProp> <UserProp> … </ UserProp > </ObjectUnit> … </ObjectsetList> </ListObjectsResult > Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  14. 容器操作设计 获取容器属性 HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [Time] Content-type:xxx Content-length:xxx <?xml version="1.0" encoding="utf-8"?> <ListPropResult> <ContainerID>int64</ContainerID> <Container-Name>xxx</ContainerName> <Container-Owner>xxx</Owner> <CreateTime>time</CreateTime> <Permission></Permission> <ContainerSize></ContainerSize> <ObjCount></ObjCount> <UserProp> <name></name> <value></value> </UserProp> </ListPropResult > GET <Root URI>/GetContainerProp/<ContainerID> \ HTTP/1.1 User-Agent: Axis2C/1.6.0 Content_type:[xxx] Host: <ip>:<port> Authorization: AccessKeyID:Signature Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  15. 容器操作设计 设置容器访问控制策略 HTTP/1.1 200 OK Server: Axis2C/1.6.0 Date: [xxx] <?xml version=“1.0” encoding=“utf-8”?> <OSS> <Status>IntValue</Status> <Desc>string</Desc> </OSS> PUT <Root URI>/<Container>/ HTTP/1.1 User-Agent: Axis2C/1.6.0 Content-Length: [Numberic] Content_type: text/xml Host: <ip>:<port> Authorization: AccessKeyID:Signature X_OSS_Info: <?xml version=“1.0” encoding=“utf-8”?> <OSS> <ACL> <AccessControlUnit> <UserAccessKey> string </UserAccessKey> <ControlPermission> string </ControlPermission> </AccessControlUnit> </ACL> </OSS> Signature MD5(Operate + "\n" + Container +"\n"+ ObjName +"\n"+ AccessKeyID + "\n" + Timestamp);

  16. 概要 对象存储系统整体架构 对象存储系统元数据 对象操作设计 容器操作设计 存储适配层设计

  17. 存储适配层

  18. Trove使用基本流程

  19. Storage存储接口

  20. Storage存储接口示例 • inttrove_storage_create(TROVE_method_idmethod_id, char *stoname, void *user_ptr, TROVE_op_id *out_op_id_p) • 功能:创建storage • 返回值: • 1 表示成功创建storage • 其他 创建失败 • 输入参数: • method_id:是个枚举值, 定义为:

  21. Storage存储接口示例 • inttrove_storage_create(TROVE_method_idmethod_id, char *stoname, void *user_ptr, TROVE_op_id *out_op_id_p) • 输入参数: • stoname:类型为char *(实际上应该为const char *),指定了创建该Storage 的本地目录路径,例如stoname可以为/tmp/storage-space/, 该目录若存在则创建之。 • user_ptr: 类型为void*, 用于传递用户数据,在dbpf的实现中该参数无用,调用时一般置NULL。 • out_op_id_p: 类型为TROVE_op_id *, 内部记录该操作的ID,用于非阻塞实现;但在dbpf中,本API 是同步调用,该参数无用,调用时置NULL。

  22. Collection存储接口

  23. Collection存储接口示例 • inttrove_collection_create(char *collname, TROVE_coll_id new coll_id,void * user_ptr, TROVE_op_id * out_op_id_p) • 功能: • 创建一个名为collname的collection, collection 的id 为new_coll_id。 • 返回值: • 1 表示操作成功 • 其他 操作失败 • 输入参数: • [IN] collname: 类型为char*, 指明待创建collection 的name。 • [IN] new_coll_id: 类型为TROVE_coll_id, 指明待创建collection 的ID。 • [IN] user_ptr: 类型为void*, 用于传递用户数据,在dbpf的实现中该参数无用,调用时一般置NULL。 • [Out] Out_op_id_p: 类型为TROVE_op_id *, 内部记录该操作的ID,用于非阻塞实现;但在dbpf中,本API 是同步调用,该参数无用,调用时置NULL。 • 成功执行后的效果: • 该Collection 被成功创建,storage 目录中增加一子目录,该子目录名由new_coll_id的十六进制生成。

  24. Dataspace存储接口

  25. Key-Val存储接口

  26. Key-Val存储接口示例 • inttrove_keyval_write( • TROVE_coll_idcoll_id, //keyval所属的collection id • TROVE_handle handle, • TROVE_keyval_s* key_p,//存储数据的key • TROVE_keyval_s* val_p,//存储数据的value • TROVE_ds_flags flags, • TROVE_vtag_s* vtag, • void* user_ptr, • TROVE_context_idcontext_id, • TROVE_op_id* out_op_id_p, • PVFS_hint hints) • 功能:根据key写value • 返回值:1 成功,其他 错误

More Related