在视频点播的业务应用场景中,用户使用了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="" config="cprefix=s3testqwer;containers=r(1,2)" />
</workstage> <workstage name="prepare">
<work type="prepare" workers="" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,24);sizes=u(1,3)MB" />
</workstage> <workstage name="main">
<work name="main" workers="" runtime="">
<operation type="read" ratio="" config="cprefix=s3testqwer;containers=u(1,2);objects=u(1,12)"/>
<operation type="write" ratio="" 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="" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,24)" />
</workstage> <workstage name="dispose">
<work type="dispose" workers="" config="cprefix=s3testqwer;containers=r(1,2)" />
</workstage> </workflow> </workload>

修改Cosbench源码 支持s3的 http range request 测试场景的更多相关文章

  1. 修改json源码支持datetime序列化

    修改json源码支持datetime序列化 import json import datetime now = datetime.datetime.today() json.dumps(now) 抛出 ...

  2. THINKPHP_(8)_修改TP源码,支持基于多层关联的任一字段进行排序

    之前博文 前述博文THINKPHP_(1)_修改TP源码,支持对中文字符串按拼音进行排序,其解决的主要问题是,对于查询出的think\collection数据,按指定字段对数据进行排序,从而在页面上进 ...

  3. 《Flink SQL任务自动生成与提交》后续:修改flink源码实现kafka connector BatchMode

    目录 问题 思路 kafka参数问题 支持batchmode的问题 参数提交至kafkasource的问题 group by支持问题 实现 编译 测试 因为在一篇博文上看到介绍"汽车之家介绍 ...

  4. 修改FFMpeg源码—捕获丢包

    概述 最近我们项目有一个需求就是解决客户端播放RTSP视频流花屏的问题,一般来说丢包就会引起花屏,导致客户端花屏的因素又有很多,比如说: 相机到服务器丢包 服务器到客户端丢包 等等... 其中服务器到 ...

  5. 修改spring源码重写classloader实现项目加密

      (一)操作方法和spring源码添加修改部分 事先说明:spring源码要下载好,会有修改spring的源码操作,本文和本作者所依赖的spring项目的版本是3.1.1,spring4及以上源码对 ...

  6. 修改VCL源码实现自定义输入对话框

    来自:https://yq.aliyun.com/wenji/88428 通过修改VCL源码实现自定义输入对话框 在BCB中有两个函数可以实现输入对话框:InputBox和InputQuery,其实I ...

  7. paramiko修改本分源码

    一.获取paramiko源码 环境:Python3 下载地址:https://github.com/paramiko/paramiko 使用的是 demos这个文件夹 二.修改部分源码用以登入 2.1 ...

  8. 修改CAS源码是的基于DB的认证方式配置更灵活

    最近在做CAS配置的时候,遇到了数据源不提供密码等数据的情况下,怎样实现密码输入认证呢? 第一步:新建Java项目,根据假面算法生成CAS加密工具 出于保密需要不提供自定义的加密工具,在您的实际项目中 ...

  9. 修改springfox-swagger源码,使example中时间格式默认为“yyyy-MM-dd HH:mm:ss”

    修改swagger源码,使example中时间格式默认为"yyyy-MM-dd HH:mm:ss" 前言 简单点说,在swagger中,怎么能针对以下vo中的java.util.D ...

随机推荐

  1. CentOS 7 yum 安装 MySQL5.7

    1.下载 MySQL 官方的 Yum Repository ,官网地址:https://dev.mysql.com/downloads/repo/yum/ 从 MySQL 官网选取合适的 MySQL ...

  2. div仿td标签属性

    链接:https://pan.baidu.com/s/1kW1At9d 密码:g0he 这里说的div是指固定大小的,动态往里面填充文字的时候,文字一直水平垂直居中(换行也是).就和td标签一样.当然 ...

  3. iOS-PYSearch 完美搜索页

    APP搜索页基本上是少不了的,热门搜索.搜索记录等:这里推荐一个大牛ko1o写的:PYSearch,他还有一个不错的图片浏览开源:PYPhotoBrowser:这个也不错,感兴趣的可以了解下:下面说下 ...

  4. 使用Google Cloud Platform构建机器学习项目-宠物识别

    宠物识别我们使用到了tensorflow object-detection API  (https://github.com/tensorflow/models/tree/master/researc ...

  5. Spring源码情操陶冶-PathMatchingResourcePatternResolver路径资源匹配溶解器

    本文简单的分析下spring对某个目录下的class资源是如何做到全部的加载 PathMatchingResourcePatternResolver#getResources PathMatching ...

  6. 大白话说Java反射:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java反射:入门.进阶.原理> 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时 ...

  7. BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1902  Solved: 837[Submit][St ...

  8. 【IT人】如何提高阅读源代码的效率

    1.最近刚到公司,公司就发一架构代码自己看,看了几天看的想吐,也在网上找了下相关的技巧吧,不是有句话叫做:成功必有方法,失败总是借口! 2.借鉴别人的方法来看看如下: 记得在开源流行之前,我看过的代码 ...

  9. chrome_options

      用法 from selenium.webdriver.chrome.options import Options chorme_option=Options() chorme_option.add ...

  10. mongodb window安装配置

    下载mongodb安装包 1. https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl?_ga=2.233271640.711265466.15193 ...