1:http再聊1:http聊1跨主机直接通信,分布式存储等现在互联网上层之间的应用都是基于http协议的,所以深刻理解http协议。对于上流社会的熟练使用来说是非常重要的。现在智能手机和互联网技术的全面融合,让我们的生活越来越依赖于手机。手机已经成为我们身体之外的另一个器官。手机在给我们带来方便的同时,也在无休止地浪费着我们碎片化的时间。花在手机上的时间与日俱增,生活上却收获甚微。收获,首先是在思考中对一个事物有了深刻的洞察,需要心力和脑力去不断地测试、执行、重复、改进。2记日记的另一个目的是跟踪记录。3.不要讲太多真相。一件事情是怎么完成的,心态是怎么变化的。等等。发生变更后,最好稍后整理出相应的变更执法1234。二:动态和静态用户对web资源的请求在服务器端一般分为两部分:1:动态内容服务器:jscssphpjspphpjsp是后台的动态内容jscss是服务器端的静态内容,但是偶尔需要做相应修改2:静态内容服务器:存放jpg、png、jif等图片文件3:动态内容服务器:分为前端数据和后端数据一般jscssphp.用户在访问网页时看到的界面一般都是由jscss数据提供的。后端数据:PHPjsp数据处理业务端程序,调用后负责生成数据四:程序指令+数据指令:存储在程序文件中数据:变量和组,通过i/o加载的数据一般存储数据在文件系统或数据库中五:缓存经常访问的数据并将其存储在靠近用户的位置。这样进一步减少了用户的I/O请求跳转,使用户可以快速获取到需要的数据。缓存不处理用户的请求,只是将用户经常访问的数据存储在本地,等用户再次访问时再推送给用户。公共缓存:CDNContentDeliveryNetWork六:缓存工具:squid:http1.0时代使用varnish:http2.0时代。具有更好的性能首先是代理,其次是缓存。Varnish最强大的是缓存,其次是代理Nginx:最强大的是代理,其次是缓存。七:http缓存是如何工作的?缓存机制过期机制:根据缓存中定义的过期时间,在文件过期前,文件过期后从缓存中响应客户端,然后后台服务器响应客户端条件请求:访问缓存时,检查服务器有两种方法可以检查缓存内容是否发生变化:1.文件的修改时间2.文件的验证码请求过程:对于每一个请求,缓存服务器都要向后台发送一个请求端服务器检查缓存中的数据是否有变化,没有变化时从缓存中响应。当有变化时,从后端响应两者的结合:请求时,时间还没有过期,从缓存中响应。过期后,向后端服务器发送请求,查看文件是否有变化,决定如何响应。八:缓存中的请求消息响应消息请求消息用于通知缓存服务如何使用缓存响应请求:cache-request-directive="no-cache",缓存中的数据不可响应客户|“无商店”|"max-age""="delta-seconds最大可缓存时间|“最大陈旧”[“=”增量秒]|“min-fresh”“=delta-seconds|“无变换”|“只有缓存”|cache-extension响应消息用于通知缓存服务器如何存储上层服务器的响应内容:cache-response-directive="public"只能用于publiccache|“私人”[“=”<“>1#field-name<”>]|"no-cache"["="<">1#field-name<">],可以缓存,但是在响应发送给客户端之前需要重新验证,即必须发送条件请求来验证缓存的有效性;|“no-store”,不允许将响应内容存储在缓存中;|“不变换”|“必须重新验证”|“代理重新验证”|“最大年龄”“=”增量秒|“s-maxage”“=增量秒|cache-extension九:缓存命中率缓存命中率:hit/(hit+miss)页面命中率:根据页面数来衡量字节命中率:根据页面的体积来衡量十:开源方案squid:varnish:varnish官网:http://www.varnish-cache.org/Community:CommunityEditionEnterprise:企业版II:VarnishI:程序架构程序架构:Manager进程Cacher进程,包括各类线程:accept、worker,expiry,...sharedmemorylog:日志保存在内存中,重启后日志数据和缓存会丢失统计数据:counter;日志区:日志记录;查看日志命令varnishlog,varnishncsa,varnishstat...配置界面:VCLVarnishConfigurationLanguage,vclcomplier-->ccomplier-->sharedobject2:varnish安装yuminstallvarnishvarnish位于epl仓库3:varnish程序环境:/etc/varnish/varnish.params:配置varnish服务进程的工作特性,如监听地址和端口、缓存机制、使用多少缓存、启用多少线程;/etc/varnish/default.vcl:配置每个Child/Cache线程的缓存策略;主要程序:/usr/sbin/varnishdCLI接口:/usr/bin/varnishadm共享内存日志交互工具:/usr/bin/varnishhist/usr/bin/varnishlog/usr/bin/varnishncsa/usr/bin/varnishstat/usr/bin/varnishtop测试工具程序:/usr/bin/varnishtestVCL配置文件reload程序:/usr/sbin/varnish_reload_vclSystemd单元文件:/usr/lib/systemd/system/varnish.servicevarnishservice/usr/lib/systemd/system/varnishlog.service/usr/lib/systemd/system/varnishncsa.service日志持久服务;4:varnish缓存存储机制(StorageTypes):/etc/varnish/varnish.params在这个文件中进行修改-s[name=]type[,options]?malloc[,size]内存存储,使用[,size]定义空间大小;重启后所有缓存项将失效;?file[,path[,size[,granularity]]]磁盘文件存储,黑盒;重启后所有缓存项都无效;?persistent,path,size文件存储,黑盒;所有缓存项在重启后都有效;实验性的;清漆程序的选项:程序选项:/etc/varnish/varnish.paramsfile-aaddress[:port][,address[:port][...],http监听的默认端口为6081端口;-Taddress[:port],默认是6082端口;-s[name=]type[,options],定义缓存存储机制;-uuser-ggroup-fconfig:VCL配置文件;-F:在前台运行;运行参数:/etc/varnish/varnish.params文件,DEAMON_OPTSDAEMON_OPTS="-pthread_pool_min=5-pthread_pool_max=500-pthread_pool_timeout=300"-pparam=value:设置运行参数及其值;可重复使用;-rparam[,param...]:设置指定参数为只读;重新加载vcl配置文件:~]#varnish_reload_vcl五:简单修改配置文件启动varnish服务,修改/etc/varnish/default.vcl文件默认监听更改后端ip地址和端口号(httpservice)启动服务systemctlstartvarnish启动服务时,确保本机httpd和nginx服务关闭ss–ntltest:http://172.16.253.95:6081/ind...95主机没有提供web服务,显示后台服务器的页面响应信息,也印证了这一点。具体如下Varnish3version1:如何处理vcl_recv()引擎收到的请求1:不是HTTP请求,直接使用pass()引擎发送给后端服务器2:是HTTP请求,发送到Cacheable处理1)非缓存方法如putpost等到fetch()引擎。fetch()引擎还可以在从后端获取数据之前操作以下请求消息进行一些修改。fetch()获取数据后,会发送给deliver()引擎(意思是投递),由deliver引擎发送给客户端。结尾。在deliver()引擎发送给客户端之前,可以修改如下响应信息2)可缓存的方法gethead被传递给vcl_hash,vcl_hash可以定义对哪些数据进行hash。散列完成后,有两种结果:命中或未命中。()引擎处理miss()引擎处理结论:这个过程主要是指以下几个引擎vcl_recv()接收用户请求的引擎向客户端发送数据可以修改响应消息vcl_hash():缓存哈希比较的引擎,可以定义一些哈希规则hit()命中缓存的引擎miss()命中缓存的引擎Varnish中添加的引擎4.0:vcl_purge():修剪。清除缓存项ban():Fence清除一类缓存项。支持正则pipe():不是http请求,直接发给后端处理2:vcl中状态引擎1:recv():接收用户请求缓存pipe():不是http请求,直接通过管道(四层)发送到后端pass():直接发送到后端sysnth()自定义不接受用户请求purge()修剪缓存hash()2:hash()缓存hash比较引擎,可以定义一些hashhit()的规则enginethathitthecachemiss()未命中缓存的引擎3:fetch():接收miss()引擎后的请求,recv()请求和berresponce()后端处理的请求修改请求报文到postEnderror():发送到后端处理后,没有找到数据。beresponce()经过后端处理后,可以处理的数据为deliver()。向客户端发送数据的引擎可以修改响应消息来接收hit()和fetch()数据3:可以使用变量的地方下面章节主要描述vcl配置和实验实现
