美文网首页
高性能分布式文件存储及文件下载解决方案-Nginx断点续传方案(

高性能分布式文件存储及文件下载解决方案-Nginx断点续传方案(

作者: 李小磊_0867 | 来源:发表于2019-10-11 10:41 被阅读0次

    对于小文件来说,断点续传并不是必备的需求,只不过之前业务中已经包含此功能,因此对于升级文件读取方案后,也需要支持该功能,这样可以实现客户端及服务端得无缝升级。

    对于容器断点续传功能,此前已经实现,这里只描述Nginx断点续传。Nginx的断点续传功能主要由ngx_http_range_filter_module模块实现,该模块主要有ngx_http_range_header_filter_modulengx_http_range_body_filter_module等两个模块组成。其中ngx_http_range_header_filter_module模块主要用于设置Http响应头,设置响应头中的Content-Range(指定响应的文件区间块的开始和结束位置),Content-Length(指定断点续传时应答的包大小),同时设置响应状态码为206,参见下述测试。ngx_http_range_body_filter_module模块主要用于根据区间的位置,从缓冲区中读取数据并发送给客户端。

    Nginx区域数据下载示例
    以上描述了Nginx实现断点续传的主要组件,当客户端以断点续传方式进行文件下载时,需要设置Range头信息,如上图中的Range: bytes=12-212,要从服务器取文件的12开始到212之间的字节数据,当该请求经过容器鉴权后,转发到Nginx,会被ngx_http_range_header_filter_module模块拦截处理,读取Range参数,并进行解析,确定是区块下载时,会进行设置相应头处理流程,设置完成后,该请求会被ngx_http_range_body_filter_module模块拦截并处理,该模块同样会处理Range头信息,此处的处理会按照单个区块请求和多区块请求分别进行处理,按照Range指定的区块,从缓冲区进行读取数据并发送给客户端。以下为Range的参数格式,以及多区块传递描述。

    Range : bytes=12-212,322-422
    Range的值支持形式如下:
    Range: bytes=x-y 表示第 x-y 字节范围的内容x取值为[0-contentlength],y取值为[x,contentlength]
    Range: bytes=-y 表示最后 y 字节的内容
    Range: bytes=x- 表示从第 x 字节开始到文件结束部分的内容
    Range: bytes=x-y,x1-y1 同时指定几个范围

    整体上文件存储改为FastDFS存储,同时不在使用容器API提供数据下载后,切换到Nginx下载,并实现原有的限流、鉴权等功能,对于客户端来说,没有任何的变更,服务端升级后,客户端可以直接应用。

    相关文章

      网友评论

          本文标题:高性能分布式文件存储及文件下载解决方案-Nginx断点续传方案(

          本文链接:https://www.haomeiwen.com/subject/umhtmctx.html