注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

ATS的设计艺术集累  

2013-11-27 19:00:15|  分类: trafficserver编 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.关于ATS中存储介质的选择(采集于:来往扎堆恕仇的阅述)

         在TrafficServer的storage.config的配置文件中,可配置三种类型的存储介质:
         a)裸盘(raw disk);
         b)文件(file);
         c)目录(dir)。

      仅当存储介质配置为目录(dir)时,才会生成cache.db,TS会在每个目录下创建一个对应的cache.db,然后把这个cache.db作为文件(file)介质来使用,因此volume会在cache.db上进行切分。

       在生产环境中,我们建议使用a)裸盘(raw disk)来存储,这样可以绕过kernel的文件系统,效率会更高,在这种模式下,不存在cache.db文件。

        在我的理解中,b)文件、c)目录这两种存储类型,是为了测试而设计,因为普通用户通常没有裸盘可用。
2. 标签
        TS使用URL的MD5值作为索引,去磁盘上查找对应的内容,first_key就是URL的MD5值。

       对于小于1M的文件,它会作为一个完整的块,存储在磁盘上,TS称之为Single fragment。

        当文件大于1M时,就会分成多个fragment。例如,有一个2.5M的文件,就会分为3个fragment:A(1M),B(1M),C(0.5M)。
           A/B/C三个fragment,拥有自己独立的Key,而且这三个Key有先后的顺序,以便可以重新组装成一个完整的文件,A是第一个 fragment,它的key为earlist_key,earlisy_key是由first_key+随机因子计算出来的,B是第二个 fragment,它的key(用KeyB指代)通过next_CacheKey(earlist_key)计算得来的(不随机),C是最后一个 fragment,它的Key就是first_key,比较特别的是,C不仅包含最后0.5M的内容,还需要存储一些额外的信息,例如,它需要记录这个文 件总共有3个fragment与及这三个fragment在磁盘中的offset信息。

             当TS通过first_key读取到C fragment时,它很容易的判断出,还有另外两个fragment。于是它通过earlist_key找到A fragment,再通过next_CacheKey()计算出B的key,从而把三个fragment都读出来,拼成一个完整的文件。

               但显然,把「最后一个fragment」的key命名为first_key,是极斯让人费解,直到我把所有代码读完,才领悟到first_key的fragment存放在最后。

              从我的角度,first_key应该命名为meta_key。

3.ATS软件工程构架

ATS的设计艺术集累 - itoedr - itoedr的it学苑
4.Enabling read-while-writer
(此地内容可以使用man trafficserver(v5.3+)

The following settings are required for the read-while-writer feature to function:

CONFIG proxy.config.cache.max_doc_size INT 0
CONFIG proxy.config.cache.enable_read_while_writer INT 1
CONFIG proxy.config.http.background_fill_completed_threshold FLOAT 0

With this enabled, the pressure on a single object that is uncacheable is heavily improved. See TS-505 for more details. In addition, this setting makes life quite nice again:

CONFIG proxy.config.http.cache.max_open_read_retries INT -1

I've made this the new default on Apache Traffic Server trunk, it makes things 10-20x faster under certain conditions, and 20x less latency.

- See more at: http://www.ogre.com/node/386#sthash.RnGLxycP.dpuf

******************************
附:关于缓存的几个概念
******************************

同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。
异 步传输:浏览器发起请求,请求不会立刻转到后台,而是将请求数据(header)先收到nginx上,然后nginx再把这个请求发到后端,后端处理完之 后把数据返回到nginx上,nginx将数据流发到浏览器,这点和lighttpd有点不同,lighttpd是将后端数据完全接收后才发送到浏览器。

分析:apache和squid的反向会增加后端web的负担,因为每个用户请求都 会在proxy上与后端server建立的长久链接,知道数据取完前,连接都不会消失。因为wan速度与lan速度的不同,虽然lan之间的速度是极度快 的,但是用户的wan连接决定了这个时间长。而lighttpd和nginx的异步模式,是不管你用户要求的数据有多大,都是先收下来,再与后端联系,这 是非常迅速的速度,所以proxy与后端连接时间也会很短,几十M的东西也是几秒内。后端不需要维护这么多连接。而lighttpd也和nginx不同的异步,lighttpd是先收完再转向客户浏览器,而nginx是边收数据边转向用户浏览器。而ATS的表现将更为出色。


  评论这张
 
阅读(104)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017