合并回源

3310阅读 0评论2017-12-31 oxwangfeng
分类:服务器与存储

合并回源能够提高用户体验
有相同的http请求A和B,A没有完成时,B访问到达。当A请求写完一个fragment之后,B才能访问到这个fragment;当A写一个fragment时,B是无法访问这个fragment的;

具体实现:

定义一个全局变量:map[string]value;
url作为key;value记录正在回源并缓存的上下文,包括响应头,body,长度等信息;
对于小文件,body直接放到value的body中;
对于大文件,就不能将body存放在value中,要不然很耗费内存的;大文件是需要分片存储在磁盘上的,每个fragment都有一个key,所有的fragment key组成一个key list;对于大文件来讲,value可以是包括读写大文件行为的结构体,包括key list以及大文件的读写操作;
读:首先遍历map结构体,查找key是url对应的value;
对于小文件,直接读取value中的body内容即可;
对于大文件,由于value->openObject->fgKeys保存着所有的fragment key,只需要遍历key即可,在value->openObject里面必须添加一个文件写完的标记,要不然无法知道fragmet key list是不是完整了;这样当写完一个fragment之后,另外一个请求才能访问到这个fragment;当A写一个fragment时,B是无法访问这个fragment的;

待完善。。。

上一篇:缓存索引读写性能优化
下一篇:golang使用raw socket发送syn包