修改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>
分类:
存储
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构