zoukankan      html  css  js  c++  java
  • 修改Cosbench源码 支持s3的 http range request 测试场景

    在视频点播的业务应用场景中,用户使用了ffmpeg工具做视频实时转码用。 而ffmpeg使用range 请求。而Cosbench不支持这种测试场景,所以需要修改源码支持这种测试场景。

    HTTP 协议介绍:

    HTTP 请求头 Range

    请求资源的部分内容(不包括响应头的大小), 单位是byte,即字节,从0开始.

    如果服务器能够正常响应的话,服务器会返回206 Partial Content的状态码及说明. 如果不能处理这种Range的话,就会返回整个资源以及响应状态码为200 OK.(这个要注意,要分段下载时,要先判断这个)

    Range 请求头格式

    Range: bytes=start-end
    

    例如:

    Range: bytes=10-:第10个字节及最后个字节的数据 Range: bytes=40-100:第40个字节到第100个字节之间的数据.

    注意,这个表示[start,end],即是包含请求头的start及end字节的,所以,下一个请求,应该是上一个请求的[end+1, nextEnd]

    响应头

    Content-Range

    Content-Range: bytes 0-10/3103

    这个表示,服务器响应了前(0-10)个字节的数据,该资源一共有(3103)个字节大小。

    分段下载

    利用这个特点,我们可以使用分段下载(多线程下载,分布式下载)

    思想:先请求一个HEAD方法的请求,获取总文件大小, 然后启用多线程并发下载不同的分片。

    代码库:https://github.com/BodihTao/cosbench

    修改后重新编译的安装包: http://s3.yyclouds.com/public/cosbench.zip

    配置文件:

    is_range_request=true;range_start=4096;range_end=10240;

    <?xml version="1.0" encoding="UTF-8" ?>
    <workload name="s3 test 1 node read" description="sample benchmark for s3">
    
      <storage type="s3" config="accesskey=xxx;secretkey=xxxx;is_range_request=true;range_start=4096;range_end=10240;endpoint=http://tj-s3.yyclouds.com;path_style_access=true" />
    
        <workflow>
    
        <workstage name="init">
          <work type="init" workers="16" config="cprefix=s3testqwer;containers=r(1,2)" />
        </workstage>
    
        <workstage name="prepare">
          <work type="prepare" workers="16" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,24);sizes=u(1,3)MB" />
        </workstage>
    
        <workstage name="main">
          <work name="main" workers="16" runtime="300">
            <operation type="read" ratio="90" config="cprefix=s3testqwer;containers=u(1,2);objects=u(1,12)"/>
            <operation type="write" ratio="10" config="cprefix=s3testqwer;containers=u(1,2);objects=u(13,24);sizes=u(1,3)MB" />
          </work>
        </workstage>
    
        <workstage name="cleanup">
          <work type="cleanup" workers="16" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,24)" />
        </workstage>
    
        <workstage name="dispose">
          <work type="dispose" workers="16" config="cprefix=s3testqwer;containers=r(1,2)" />
        </workstage>
    
      </workflow>
    
    </workload>
  • 相关阅读:
    Linux系统目录数和文件数限制
    用十条命令在一分钟内检查Linux服务器性能
    Linux 性能
    vmstat命令
    利用Clonezilla备份还原Linux系统 (转载别人的知识)
    性能,并发,压力--别人所写
    linux -top 命令
    Linux 随写
    接口测试
    Jmeter关联正则表达式提取器
  • 原文地址:https://www.cnblogs.com/bodhitree/p/6674147.html
Copyright © 2011-2022 走看看