Varnish_cache_原理篇.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Varnish_cache_原理篇,varnishcache,varnishcacheserver,varnishnginxcache,varnish,varnishnginx,varnish官网,varnish配置,varnish缓存,squidvarnish

Varnish 文件缓冲的实现 1、Varnish 文件缓存的整体思路及优点 Varnish 将所有的HTTP object 存于一个单独的大文件中,而该文件在工作进程初始时就 将其整个mmap 到内存中。Varnish 在该块内存中实现类似于一个简单的“文件系统”,具 有分配、释放、修剪、合并等功能。 Varnish 文件缓存的优点,就如其创始人Poul-Henning Kamp 所说,它是一个具有“现代 设计理念”的软件,其整体设计优点可以从[1]得知。我觉得它的优点主要有两点:1、它避 免了软件与系统对内存控制的冲突,引入了虚拟内存的概念,将内存与硬盘文件统一,软件 只需要注重对内存的操作即可;2 、它将所有的object 存于一个文件中,避免类似Squid 为每 个object 存放一个小文件的设计,减少文件系统频繁的操作。当然这需要记录每个object 在 内存中的偏移量,并定期检查并释放内存,进而增加编程难度,但同时提高了系统的性能。 2、Varnish 文件缓存的工作流程 Varnish 与一般服务器软件类似,分为master (management )进程和child (worker ,主要 做cache 的工作)进程。master 进程读入命令,进行一些初始化,然后fork 并监控child 进程。 child 进程分配若干线程进行工作,主要包括一些管理线程和很多woker 线程。 针对文件缓存部分,master 读入存储配置(-s file[,path[,size[,granularity]]] ),调用合适 的存储类型,然后创建/读入相应大小的缓存大文件(根据其man 文档,为避免文件出现存 储分片[2]影响读写性能,作者建议用dd(1)命令预先创建大文件)。接着,master 初始化管 理该存储空间的结构体。这些变量都是全局变量,在fork 以后会被child 进程所继承(包括 文件描述符)。 在child 进程主线程初始化过程中,将前面打开的存储大文件整个mmap 到内存中(如果 超出系统的虚拟内存,mmap 失败,进程会减少原来的配置mmap 大小,然后继续 mmap ),此时创建并初始化空闲存储结构体,挂到存储管理结构体,以待分配。 接着,真正的工作开始,Varnish 的某个负责接受新HTTP 连接的线程开始等待用户(具 体过程可参见[3]),如果有新的HTTP 连接过来,它总负责接收,然后叫醒某个等待中的线 程,并把具体的处理过程交给它。 Worker 线程读入HTTP 请求的URI ,查找已有的object,如果命中则直接返回并回复用 户。如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再 回复。 分配缓存的过程是这样的:它根据所读到object 的大小,创建相应大小的缓存文件。为 了读写方便,程序会把每个object 的大小变为最接近其大小的内存页面倍数。然后从现有的 空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。如果空闲块没有用完, 就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。如果缓存已满,就根据 LRU[4]机制,把最旧的object 释放掉。 释放缓存的过程是这样的:有一个超时线程,检测缓存中所有object 的生存期,如果超 初设定的TTL (Time To Live )没有被访问,就删除之,并且释放相应的结构体及存储内存。 注意释放时会检查该存储内存块前面或后面的空闲内存块,如果前面或后面的空闲内存和该 释放内存是连续的,就将它们合并成更大一块内存。 整个文件缓存的管理,没有考虑文件与内存的关系,实际上是将所有的object 都考虑是 在内存中,如果系统内存不足,系统会自动将其换到swap 空间,而 需要varnish 程序去控 制。 3、文件缓存的数据结构及其操 3.1 基本数据结构 尾队列 由于Poul-Henning Kamp 是FreeBSD 的内核维护者,Varnish 代码中受FreeBSD 编程风格 的影响较大。程序中使用最多的是名叫尾队列 (tail queue )的数据结构,是其四种基本数据 结构中的一种:单向列表(single-linked lists)、单向尾队列(single-linked tail queue)、列表 (lists)、尾队列(tail queues) 。 全部的数据结构定义可以在varnish-dist/include/vqueue.h 中找到, 附录1 中有尾队列全部操作的定义。参考

文档评论(0)

mydoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档