• 修改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 shell 小技能
    Jenkins 2.60.x 2种发送邮件方式
    Linux wget 批量下载
    日语阅读-2-如何看“何々的”的用法
    日语阅读-1-如何看ほう的用法
    [日本语]初级语法
    Python基础
    Python基础(10)
    Python基础(8)
    Python基础(7)
  • 原文地址:https://www.cnblogs.com/bodhitree/p/6674147.html
Copyright © 2020-2023  润新知