本节主要来自 web caching 的 Chapter 7. Cache Hierarchies , 这节主要就是笔记。
cache层级化主要是为了提高命中率,cache无论是容量还是性能都是有限的,假如cache miss了,从neighbor cache获取内容一般来讲比从origin server好: 可以节约延迟和WAN的带宽。
层级化意味着多个cache,cache之间常见的关系是两种:parent-child, sibling-sibling , neighbor 和 peers的意义比较自由,可以包含这两种含义。
- child cache 会将请求转到它的 parent , parent 会从自身cache,或者origin server, 或者其它cache来满足该请求。
- sibling 的请求应该都是命中的,而sibling假如peer的请求没有命中,也不应该去试图获取该内容,它会返回一个表示出错的消息,sibling之间使用一些intercache协议来交互,来知道哪个peer有指定内容
- parent-child, sibling-sibling 关系并非固定,一个cache可以作为某些cache的parent,同时是另外的cache的sibling;或者对于特定域的请求是parent,其它的是sibling
- peers关系不一定对称,A可以发request给B,但是B不一定能够发request给A,一般来讲,parent-child关系都非对称,sibling关系常常是对称的
最后组成了 hierarchical topology ,
下面这个就不是hierarchical topology , 而是 mesh topology .
7.2.1 Performance
要获得性能提升,需要一些条件(必须全部满足):
- 一些本地没有得内容可以从peer得到
- 从peer得到的cache hit比从origin server块
- parent cache,的cache miss不会明显比origin server慢
假如parent cache 负载很重,或者neighbor cache 比较远,都会使性能受到影响,而且这些可能随着时间或者其他条件而不同,所以需要一些minitor tool来监控情况。
7.2.2 Nondefault Routing
Parent caches are useful when you need to force web traffic along a specific route in your network。 比如防火墙。一些机构还使用多个parent,因为一些链路可能便宜但是拥塞,而昂贵的链路比较快速,所以可以根据优先级来选择链路。
附言:我目前从事 Video CDN 的设计开发,也做Streaming Server cluster,折腾了8年了。CDN这个行业说新不新,说老不老,和CDN相关的文章有很多,但是说"大"概念的很多,人云亦云的很多,我想想把我这些年的经验东西写成一个系列,记录一些东西,有我实现过的,也有一些没有没有实现过的想法,有看书或者paper的得到的一些知识,还有业界的某些做法。
最近的工作的重心转移了,做技术研究的时间也越来越少,感觉这两年的文章越写越少,质量也低了,先把写系列的话放出来,可以避免自己食言:>
下面是我的其他博客:
博客园,写一些工作和学习的笔记: http://www.cnblogs.com/peon/
博客堂,开发方面的一些文章:http://blog.joycode.com/peon/
流媒体博客,流媒体方面的一些文章:http://blog.lmtw.com/b/peon/