cache 大文件分片

最近在研究大文件切片的问题,我们节点使用的nginx+trafficserver的架构,nginx做负载,ats做cache。

在此基础上想出两个方案:

方案一:利用ats 支持插件这个特性,全部功能都放在该插件上,负责根据切片大小,将一个object 根据Content-Length进行切片,然后转化为不同的cachekey存储到cache 中,当然code 要从206 转化200(该功能可以参考cache_range_requests插件),用户请求的时候再进行合并响应。注意要点参考

方案二:就是主要逻辑在nginx 段实现,client连接nginx-(nginx-lua)-nginx-upstream-ats nginx-lua 负载切片,也就是把相同的range块,转为URL ,去通过nginx-upstream hash 负载到后端ats,然后,后端ats 再向源站range 请求,回来修改成200 ,存储 nginx-lua 负载请求不同的URL 片到upstream ,然后再转发给用户

可以参考:Caching range requests using NGINX at MaxCDN

github nginx ranger

最近nginx 刚出的分片模块,由淘宝开源的,可以参考源码思路编写

https://github.com/alibaba/nginx-http-slice

自己比较蠢,误认为nginx 这个分片模块不能针对代理模式下的资源,导致误区,幸好有人实现了,看到了第二种解决方案

https://github.com/oxwangfeng/ats_slice_range

社区分片功能的文档https://www.dropbox.com/s/t0r4c5plp6rd7ii/Partial-Object-Caching-Update-Spring-2016.pdf

留下评论