lxyfirst

C++博客 首页 新随笔 联系 聚合 管理
  33 Posts :: 3 Stories :: 27 Comments :: 0 Trackbacks
varnish的作者Poul-Henning Kamp,是写freebsd内核的,在写varnish时结合了内核的一些原理和机制,摘录了一些设计思路。
1.现代的操作系统对于内存管理,磁盘读写有复杂的优化机制,以提高系统的整体性能,开发用户空间的程序时需要关注、配合这些机制,以squid为例,内部实现了对象的缓存、淘汰策略,其实现跟操作系统类似,比如被访问的对象会被缓存,冷对象会刷到磁盘,释放内存,在一些情况下,这种机制可能跟操作系统冲突,从而并不能达到预期。当squid缓存的内存对象一段时间内未被访问,并且还未被squid刷到磁盘时,操作系统可能因为内存不足将这些冷对象swap到磁盘,此时squid是不知道的,而一直认为这些冷对象还在内存中,然后squid根据淘汰策略将这些冷对象刷到磁盘时,操作系统需要先把这些冷对象从swap中重新载入内存,squid接着将这些冷对象写入磁盘。可以看出整个过程的性能损耗。
评注:这个例子需要一分为二的看,应用程序的内存对象被系统swap,说明系统已经内存不够了,内存cache效率大打折扣。

2.带持久化的cache,需要从持久化的数据中重构cache,一般有两种方法,一种是直接从磁盘中按需读取,由于访问是随机的,而磁盘的随机读效率很低,这种方式访问效率不高但是节省空间,适合低流量的小机器,大数据量的cache。另外一种方法是预先从磁盘中建立完整的索引,能够大大提升访问效率。
持久化缓存和磁盘不同的是持久化缓存对可靠性要求不高,不需要严格的崩溃恢复,varnish使用了第二种方式,通过分层的保护提升可靠性,顶层通过A/B写保证可靠性。底层具体数据不保证可靠性。
http://www.varnish-cache.org/trac/wiki/ArchitectNotes
posted on 2011-01-28 11:52 star 阅读(465) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理