COSBench-OSS Adaptor开发(二)
COSBench-OSS    2017-06-23 11:27:40    217    0    0
zejoe   COSBench-OSS

一、总体设计

COSBench-OSS的角色相当于OSS的客户端。COSBench对OSS存储进行性能测试的本质即模拟用户对OSS存储后端进行读写操作。

COSBench的cosbench-api为各路对象存储适配器定义了两组api,Auth API和Storage API,分别处理认证、存储的业务。各路对象存储想要得到COSBench测试工具的支持,只要实现了这些api即可。

cosbench-api三大组件:API、Client、Context

  1. API:
    连接COSBench和其对象存储适配器的接口。我们的OSS-Storage集成了自己的的认证方式(rados),存储服务端会在处理请求的同时去做认证,认证过程被封装,我们用户看不到。因此,COSBench-OSS只需要实现Storage API。

    时序图:

  2. Client:
    连接对象存储适配器(OSS客户端)和OSS存储服务的接口。在这里封装了实现了OSS协议的接口,作为OSS客户端,去访问OSS服务器。阿里云有现成的封装了OSS API的SDK包aliyun-sdk-oss,COSBench-OSS可以调用阿里云的sdk并封装为COSBench-OSS Client。
    阿里云 oss sdk包:aliyun-sdk-oss-2.2.1.jar
  3. Context
    用于存放Storage和Auth的一些交换信息,比如Token等。

二、COSBench-OSS开发设计

1.创建开发环境(COSBench是基于eclipse环境开发,因此IDE推荐eclipse,以下以eclipse为例)

在java IDE(推荐eclipse)中导入COSBench项目,导入时选择cosbench/dev目录为根目录。

COSBench-OSS所需依赖包:

- other libraries needed based on abcStor specific requirements.
- cosbench-api_xxx.jar
- cosbench-config_xxx.jar
- cosbench-http_xxx.jar
- cosbench-log_xxx.jar


------以上为cosbench内部依赖bundle,下面列出的jar包是需要手动添加的第三方jar包(aliyun sdk以及其依赖包)------

 

- aliyun-sdk-oss-2.2.1.jar
- jdom-1.1.jar
- commons-codec-1.9.jar
- httpclient-4.4.1.jar
- httpcore-4.4.1.jar
- commons-logging-1.2.jar
- hamcrest-core-1.1.jar

2.构建代码结构

  1. 创建osgi项目:
    1. File > New > Plug-in Project
    2. Target Platform选择an OSGi FrameWork,下拉框选择Equinox,Next
    3. Options中取消勾选第一项,该项用于自动创建bundle初始化类,当前业务暂时不需要
  2. 将第三方jar包放在当前项目的目录下,右击项目,Build Path>Add External Archives

  3. 在MANIFEST中配置依赖Bundles和Class Path
    ClassPath中配置oss jdk,"."代表当前bundle中的类,如果没有配置,运行时将无法调用当前bundle中的类
    修改META-INF/MANIFEST.MF,加入Import-Package属性,会自动导入依赖的包
    MANIFEST.MF是bundle运行时查找的配置文件,如果配置有误,将会导致运行失败

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: Cosbench-oss
    Bundle-SymbolicName: cosbench-oss
    Bundle-Version: 0.4.2.0
    Bundle-RequiredExecutionEnvironment: JavaSE-1.6
    Bundle-ClassPath: .,
     aliyun-sdk-oss-2.2.1.jar,
     httpcore-4.4.1.jar,
     httpclient-4.4.1.jar,
     commons-logging-1.2.jar,
     commons-codec-1.9.jar,
     hamcrest-core-1.1.jar,
     jdom-1.1.jar
    Import-Package: com.intel.cosbench.api.auth,
     com.intel.cosbench.api.context,
     com.intel.cosbench.api.storage,
     com.intel.cosbench.client.http,
     com.intel.cosbench.config,
     com.intel.cosbench.log


     

  4. 构建包目录(这里将项目名变更为cosbench-oss)

3.定义配置文件

plugin-context.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi"
    xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/osgi
         http://www.springframework.org/schema/osgi/spring-osgi.xsd">
 
 
    <!--定义OSSStorageFactory为一个bean-->
    <bean name="storageFactory" class="com.intel.cosbench.api.oss.OSSStorageFactory" />
 
    <!--声明bean OSSStorageFactory为一个osgi服务,osgi容器会自动将该服务注册到它的服务中心-->
    <osgi:service ref="storageFactory" context-class-loader="service-provider"
        interface="com.intel.cosbench.api.storage.StorageAPIFactory">
    </osgi:service>
     
</beans>
4.接口声明
OSSStorage.java
//继承cosbench-api的NoneStorage,调用oss client(aliyun sdk)实现oss的基本功能
public class OSSStorage extends NoneStorage{
}
OSSStorageFactory.java
//实现cosbench-api的StorageAPIFactory,返回给cosbench一个ossStorage对象
public class OSSStorageFactory implements StorageAPIFactory{
} 
OSSConstants.java
public interface OSSConstants {
    //封装了oss client所需要的常量
}

 

5.OSSStorage接口实现(以下为参考S3的基本实现,扩展实现后续根据需求逐步增加)

  1.  初始化一个ossClient,并绑定基本设置
    1. 初始化所需参数(基于继承于oss服务的rados认证):endpoint,accessKey,secretKey
    2. 基本设置:connectionTimeout,socketTimeout
  2. 创建一个容器(Container),对象存储中,对象存放在容器中,也称为bucket,只有创建了容器才能创建对象
    1. 调用ossClient判断bucket是否存在(oss jdk 中bucket存在的情况下创建同名bucket将异常)
    2. 调用ossClient创建一个bucket
  3. 创建对象(object)
    1. 设置对象的元数据 
      1. 文件的MIME
      2. 文件的长度
    2. 调用ossClient用已知参数和元数据创建一个object
  4. 获取对象:调用ossClient获取对象内容
  5. 删除对象:调用ossClient删除对象
  6. 删除容器(容器中对象为空时删除容器
    1. 调用ossClient判断bucket是否存在(oss jdk 中bucket不存在的情况下删除同名bucket将异常)
    2. 调用ossClient删除bucket
  7. 关闭ossClient,调用ossClient关闭

 

 

上一篇: COSBench-OSS Adaptor开发(三)

下一篇: COSBench-OSS Adaptor开发(一)

217 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航