您的位置:首页 > 服装鞋帽 > 女装 > Varnish

Varnish

luyued 发布于 2011-06-23 15:02   浏览 N 次  
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。

Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。 varnish项目是2006年发布的第一个版本0.9.距今已经四年多了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。

编辑本段Varnish介绍

1 Varnish is HTTP accelerator. 2 Varnish stores data in virtual memory and leaves the task of deciding what is stored in memory and what gets paged out to disk to the operating system 3 The Varnish web site claims that Varnish is ten to twenty times faster than the popular Squid cache on the same hardware. 4 Varnish is heavily threaded

编辑本段varnish 总体架构

2.1 总体流程 主进程 fork 子进程,主进程等待子进程的信号,子进程退出后,主进程重新启动子进程 子进程生成若干线程。 Accept 线程:接受请求,将请求挂在 overflow对列上 Work 线程: 多个,从对列上摘除请求,对请求进行处理,直到完成,然后处理下一个 请求 Epoll 线程: 一个请求处理称作一个 sesion,在 sesion 周期内,处理完请求后,会交给 Epoll 处理,监听是否还有事件发生。 Expire 线程:对于缓存的对象,根据过期时间,组织成二叉堆,该线程周期检查该堆的 根,处理过期的文件。线程之间的关系: 2.1.1 accept 线程 监听端口,接受连接。 接受后组织成 struct ses(session 结构) ,看是否有空闲的工作线程,如果有,将请求给它, pthread_cond_signal 信号通知它没有空闲线程,如果 overflow过大,则放弃该请求。否则, 将其挂在 overflow 上(需要更多工作线程,发通知)。 继续监听 2.1.2 work 线程 从 overflow队列上摘取请求(struct ses),进入状态机处理,处理结束后,通过 pipe通信, 将 struct ses发送给 epoll 线程。 2.1.3 Epoll 线程,得到传过来的 struct ses,若还没有过期,将 socket 放入 epoll 的事件中,事 件发生时,也会将其放入到 overflow中进行。


MSN空间完美搬家到新浪博客!

图文资讯
广告赞助商