关于rgw S3 API S3-style subdomain

关于rgw S3 libs3 (C/C++) S3-style subdomain接口访问

rgw 的S3 api是兼容S3,同样也提供了S3的特殊访问形式。

S3的两种访问形式:

1.Virtual Host: ${protocol}://${bucket}.s3.amazonaws.com/[${key}]    (s3-style subdomain)
2.Path: ${protocol}://s3.amazonaws.com/${bucket}/[${key}]     (普通path url访问形式)  
以上两种方式在rgw中目前都是可以使用的。

关于S3 libs3(C/C++)API库,对两种访问形式的实现及使用:

在调用libs3的接口,需要指明你使用的s3 api的访问形式,该形式的可以通过指定已定义的枚举常量来标识;其常量定义如下:

typedef enum
{
    S3UriStyleVirtualHost               = 0, //标识使用Virtual host的访问形式
    S3UriStylePath                      = 1  //path 访问形式
} S3UriStyle;

例如:S3中删除一个object的操作:

void S3_delete_object(const S3BucketContext *bucketContext, const char *key,
                      S3RequestContext *requestContext,
                      const S3ResponseHandler *handler, void *callbackData)
  1. 使用virtual host的访问形式

构造S3BucketContext结构体:

S3BucketContext bucketContext =
    {
        "www.aaa.cn",
        "ssss",
        S3ProtocolHTTP,
        S3UriStyleVirtualHost,
        "AD9DL40533G8EFF6YOJ4",
        "hJi8K7qzIrEeFwwBWcxuv28yBLaCAtRjaOhTljCs",
        0
    };

    S3ResponseHandler responseHandler =
    {
        0,
        &responseCompleteCallback
    };
删除eof这个对象。
S3_delete_object(&bucketContext, "eof", 0, &responseHandler, 0);

注:使用这种访问形式,用户(客户端)必须要对ssss.www.aaa.cn能够解析到rgw服务;因为在client端发出请求时是对ssss.www.aaa.cn解析的(delete http://ssss.www.aaa.cn/eof)。

  1. 使用path url普通访问形式

构造S3BucketContext结构体:

S3BucketContext bucketContext =
    {
        "www.aaa.cn",
        "ssss",
        S3ProtocolHTTP,
        S3UriStylePath,
        "AD9DL40533G8EFF6YOJ4",
        "hJi8K7qzIrEeFwwBWcxuv28yBLaCAtRjaOhTljCs",
        0
    };

    S3ResponseHandler responseHandler =
    {
        0,
        &responseCompleteCallback
    };

删除eof这个对象。

S3_delete_object(&bucketContext, "eof", 0, &responseHandler, 0);

注:使用这种普通访问形式,用户(客户端)必须要对www.aaa.cn能够解析到rgw服务;因为在client端发出请求时是对www.aaa.cn解析的(delete http://www.aaa.cn/ssss/eof)。

特殊实例

libs3的某些接口是不支持Virtual Host(s3-style subdomain)访问形式,如:
列出属于该用户(access_key)的所有buckets

void S3_list_service(S3Protocol protocol, const char *accessKeyId,
                     const char *secretAccessKey, const char *securityToken,
                     const char *hostName, S3RequestContext *requestContext,
                     const S3ListServiceHandler *handler,
                     void *callbackData);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: S3是Amazon Web Services提供的一种对象存储服务,而Ceph是一个开源的分布式存储系统,可以提供块存储、文件存储和对象存储。Ceph可以通过RGW(Rados Gateway)模块提供S3兼容接口,因此可以使用S3客户端来访问Ceph集群中的对象存储服务。简而言之,S3是一种对象存储服务,而Ceph是一种可以提供S3兼容接口的分布式存储系统。 ### 回答2: S3和Ceph是两个不同的概念和技术。S3是指亚马逊的对象存储服务,而Ceph是一种开源的分布式存储系统。 S3是一种云存储服务,它允许用户在云环境中存储和检索任意数量的数据。它使用适用于Web的RESTful架构,可以通过HTTP协议进行访问。S3具有高可用性、可伸缩性和耐久性,并在全球各地的多个数据中心提供数据冗余备份。 Ceph是一个分布式存储系统,旨在提供可伸缩性、高性能和高可用性的存储解决方案。Ceph以对象存储的形式存储数据,并使用RADOS(Reliable Autonomic Distributed Object Store)作为底层存储架构。Ceph通过自我修复和数据复制来确保数据的安全性和冗余备份,并使用CRUSH算法来实现数据的动态分布和负载均衡。 S3和Ceph之间的关系是,Ceph可以实现一个与S3兼容的对象存储接口。通过Ceph的各种组件和模块,可以将Ceph存储集群配置为一个S3兼容的存储桶,使得用户可以使用S3 API来访问和管理存储在Ceph集群中的对象。这意味着,通过Ceph作为底层存储系统,可以在私有云环境中构建一个与S3兼容的存储服务,提供与亚马逊S3类似的功能和接口。 总之,S3是亚马逊提供的对象存储服务,而Ceph是一种开源的分布式存储系统。Ceph可以实现S3兼容的对象存储接口,从而允许在私有云环境中构建具有S3类似功能的存储服务。 ### 回答3: S3和Ceph是两种不同的存储技术。S3是亚马逊提供的一种对象存储服务,可以用于存储和检索大量的数据。它提供了可靠性、扩展性和安全性,并且具有广泛的应用场景。 而Ceph是一个开源的分布式存储系统,它可以实现高性能、高可靠性和可扩展性的分布式存储。Ceph提供了对象存储、块存储和文件系统等多种存储模式,可以适应不同的应用需求。 S3和Ceph之间的关系是,Ceph可以作为一个支持S3协议的存储后端,用于实现S3对象存储服务。这意味着,通过配置Ceph存储集群,可以将其作为亚马逊S3的替代方案,提供与S3类似的对象存储功能。 使用Ceph作为S3存储后端有以下一些优势: 1.开源性:Ceph是一个开源项目,可以免费使用和修改,而S3需要购买亚马逊的服务。 2.可定制性:Ceph可以根据自己的需求进行定制和配置,而S3是亚马逊提供的固定的服务。 3.可扩展性:Ceph的存储集群可以根据需要进行扩展,以适应不断增长的数据量,而S3的扩展性受到亚马逊服务器的限制。 总之,S3和Ceph是两种不同的存储技术,但可以通过配置Ceph作为S3存储后端来提供S3对象存储服务,从而享受开源性、可定制性和可扩展性的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值