对象存储服务

S3接口

ZStack ZStone提供兼容S3协议的RESTful API接口,为集群提供对象存储服务。

每个API类型对应一个主管理服务,主管理服务还可以注册多个子管理服务,因此每个API可以对应有多个管理服务。每个管理服务会维护该管理服务所支持的Resource,可以将每个管理服务看作是一种Resource。每个Resource同时还可以包含有多个Handler,每个Handler中还有多个OP。下图以S3协议类型的API为例,展示op_delete的具体操作。

图 1所示:
图 1. S3协议API类型关系示意图


访问控制管理

ZStack ZStone支持通过密钥对、用户权限、桶权限这三级权限来保障数据传输和访问安全。

对象用户权限管理

ZStack ZStone支持admin创建多个对象用户,每个对象用户的数据相互隔离,互不影响。访问对象存储服务时,需使用用户的鉴权信息进行认证访问,认证通过后才能访问对象存储中的数据。

完成认证所需要的最基础信息为访问密钥 (AccessKey) 和私有密钥 (SecretKey),用户在ZStack ZStone创建对象用户后,系统会自动生成一组密钥对。用户通过S3客户端访问对象存储时,系统根据客户端请求携带的密钥信息,对比是否一致,从而判定认证是否通过。

同时,ZStack ZStone支持管控对象用户的权限和配额:
  • 权限管理:
    支持设置对象用户对存储桶和对象的访问权限,默认拥有读、写、删三种权限。
    • 读:拥有该权限的对象用户可以读取桶ACL、列出/下载存储桶中的对象,不支持取消勾选该权限。
    • 写:拥有该权限的对象用户可以创建存储桶、修改桶ACL、上传对象等。
    • 删:拥有该权限的对象用户可以删除存储桶、删除对象等。
  • 配额管理:
    • 存储桶数:支持设置单个对象用户可以拥有的最大桶配额个数。
    • 容量:支持设置单个对象用户可以存储对象的最大容量。
    • 对象数:支持设置单个对象用户可以访问或操作的最大对象数量。
    Note: 除用户配额外,ZStack ZStone还支持设置对象用户的单桶配额,即单个对象用户在单个存储桶内能使用的容量和对象数配额。

桶权限管理

桶权限包括访问控制列表 (ACL)、桶策略以及对象用户绑定的配额。
  • 访问控制列表 (ACL):
    ACL用于控制用户对桶的行为权限。ZStack ZStone提供桶和对象基本的访问控制。
    权限值 权限对访问者限制
    READ 可读。Bucket:列出bucket下的object;Object:读取object的数据
    READ_ACP 可读取ACL规则。Bucket:读取bucket的acl规则;Object:读取object的acl规则
    WRITE 可写。Bucket:创建/删除/覆盖写该bucket下的object;Object:无
    WRITE_ACP 可修改ACL规则。Bucket:修改bucket的acl规则;Object:修改object的acl规则
    FULL_CONTROL 同时具备上述权限
  • 桶策略:
    存储桶策略使用基于JSON的访问策略语言,是对ACL的补充和扩展。用户可以使用该策略向存储桶及其中的对象授予访问权限。只有桶所有者才能将策略与存储桶关联。附加到桶的权限适用于桶所有者拥有的桶中所有对象。
    Note: 存储桶策略的大小限制为20KB。
  • 对象用户绑定配额:

    存储桶继承来自于对象用户权限的控制,若对象用户限制了某类资源的配额,则该对象用户绑定的桶的权限中同样存在此配额限制。

分段上传

ZStack ZStone支持分段上传 (Multipart Upload) 机制,允许将一份对象数据分成多个部分上传,每部分是这个对象中的一段连续的数据。这些分段数据可以以任意次序独立上传。若某一分段上传失败,则仅需将这个分段数据重新上传即可,不影响其它分段。当所有分段都上传成功后,ZStack ZStone会将这些分段按序重组成一个完整的对象。
Note: 分段上传对象时,每个分段将占用一个对象数配额,分段上传完成合并后对象只占用一个配额。
ZStack ZStone的分段上传机制具有以下优势:
  • 提升上传吞吐量:支持并行上传多个分段数据,提升上传吞吐量。
  • 降低网络故障影响:由于分段数据较小,如遇网络问题,可快速恢复数据重传,大幅降低网络故障影响。
  • 支持随时暂停或取消上传:如果暂停上传,已经上传的部分数据仍然可以被保留,下次继续上传时可以从上次暂停的位置继续上传。如果取消上传,已经上传的部分数据将会被删除,需要重新上传整个文件。

存储策略

存储策略是一组关于存储桶资源分配来源、数据存储形式等的规则,负责处理存储桶和存储池的映射关系,将不同存储类别的数据分配到相应的存储池上。ZStack ZStone支持每个存储策略指定7个存储类别,包括storageclass_0~storageclass_6,其中storageclass_0为系统添加的默认存储类别。用户可在创建存储策略时或在存储策略详情页中添加存储类别。每个存储类别对应单独的数据池,通过指定存储类别将对象数据存储至对应的数据池中。

数据压缩

数据压缩技术可以通过压缩算法对数据进行无损或有损压缩,节省数据的存储空间,降低存储成本,提高存储效率。ZStack ZStone采用Snappy算法,支持通过Web界面开启在线压缩功能。

图 1图 2所示:
图 1. 数据压缩流程图


图 2. 数据解压流程图