1跨主机直接通信,分布式存储等,如今互联网上层之间的应用都是在基于http协议之上的,因此深刻的理解http协议.对于上层之间的熟练运用是相当重要的.php
如今智能手机与互联网技术的充分融合,使得咱们的生活愈来愈依赖于手机.手机已成为咱们身体以外的另外一个器官.手机在带给咱们便利的同时.也在无尽的损耗着咱们的碎片化时间.花费在手机上的时间日渐增多,但对于生活的增益却无甚寥寥. 增益,首先是在思惟上对一个事物有深入的看法,须要花费心力、脑力持续不断的试探、执行、重复、改进。
2写日记的另外一个目的在于:有迹可循。
3大道理少讲。一件事情如何作成的,心态如何改变的。
等等此类事宜。在发生改变以后,后续最好能够整理出相应的改变执法1234。css
用户请求web资源在服务器层面通常分为两块:
1:动态内容服务器:js css php jsphtml
php jsp 在后台为动态内容 js css 在服务器端 是静态内容,但偶尔须要做出相应修改
2:静态内容服务器:存放 jpg png jif 等图片文件前端
分为 前端数据和后端数据
前端数据:js css 网页布局 展现 交互式设计nginx
wordpress属于前端展现工具,在服务器端存储的数据格式通常为 js css php。
用户访问一个网页所看到的界面通常由js css 数据来提供。web
后端数据:PHP jsp 数据处理的业务端程序,负责被调用后生成数据
指令+数据 指令:存放在程序文件中 数据:变量和属组,经过i/o加载数据 数据通常存放在 文件系统中或者 数据库之中
常常被访问的数据,存放在用户较近的位置。进而减小用户的I/O请求跳转,使得用户能够快速的获取所须要的数据。
缓存不处理用户的请求,仅仅是把用户常常访问的数据,在本地存放下来,随后当用户再次访问时,把数据推送给用户。数据库
公共缓存:CDN Content Delivery NetWork后端
squid:http1.0时代使用
varnish:http2.0时代。拥有更好的性能
首先是代理,其次是缓存。
varnish最强大的是缓存,其次是代理
Nginx:最强大的是代理,其次是缓存。缓存
缓存机制
过时机制: 依据缓存中定义的过时时间
文件过时以前,从缓存处响应客户端服务器
文件过时以后,从后台服务器响应客户端
条件式请求:访问缓存时,查看服务器与缓存内容有无改变
查看缓存内容有无改变的两种
1文件的修改时间
2文件的校验码 请求流程:每一次请求,缓存服务器都要向后端服务器发请求,查看缓存中的数 据有无变化,无变化时,从缓存处响应。有变化时从后端响应
两者的结合: 请求时,时间未过时,从缓存处响应。 过时时,想后端服务器发送请求,看文件有无变化,决定响应的方式。
请求报文用于通知缓存服务如何使用缓存响应请求:
cache-request-directive = "no-cache", 不可用缓存中的数据响应客户端 | "no-store" | "max-age" "=" delta-seconds 最大可缓存的时间 | "max-stale" [ "=" delta-seconds ] | "min-fresh" "=" delta-seconds | "no-transform" | "only-if-cached" | cache-extension 响应报文用于通知缓存服务器如何存储上级服务器响应的内容: cache-response-directive = "public" 仅可用于公共缓存 | "private" [ "=" <"> 1#field-name <"> ] | "no-cache" [ "=" <"> 1#field-name <"> ],可缓存,但响应给客户端以前须要revalidation,即必须发出条件式请求进行缓存有效性验正; | "no-store" ,不容许存储响应内容于缓存中; | "no-transform" | "must-revalidate" | "proxy-revalidate" | "max-age" "=" delta-seconds | "s-maxage" "=" delta-seconds | cache-extension
缓存命中率:hit/(hit+miss) 页面命中率:基于页面数量进行衡量 字节命中率:基于页面的体积进行衡量
squid: varnish: varnish官方站点: http://www.varnish-cache.org/ Community :社区版 Enterprise :企业版
程序架构:
Manager进程 Cacher进程,包含多种类型的线程: accept, worker, expiry, ... shared memory log: 日志存放于内存中,重启后日志数据及缓存都将丢失 统计数据:计数器; 日志区域:日志记录; 查看日志的命令 varnishlog, varnishncsa, varnishstat... 配置接口:VCL Varnish Configuration Language, vcl complier --> c complier --> shared object
yum install varnish
varnish位于epl仓库 中
/etc/varnish/varnish.params: 配置varnish服务进程的工做特性,例如监听的地址和端口,缓存机制, 使用多大的缓存,启用多少个线程; /etc/varnish/default.vcl:配置各Child/Cache线程的缓存策略; 主程序: /usr/sbin/varnishd CLI interface: /usr/bin/varnishadm Shared Memory Log交互工具: /usr/bin/varnishhist /usr/bin/varnishlog /usr/bin/varnishncsa /usr/bin/varnishstat /usr/bin/varnishtop 测试工具程序: /usr/bin/varnishtest VCL配置文件重载程序: /usr/sbin/varnish_reload_vcl Systemd Unit File: /usr/lib/systemd/system/varnish.service varnish服务 /usr/lib/systemd/system/varnishlog.service /usr/lib/systemd/system/varnishncsa.service 日志持久的服务;
/etc/varnish/varnish.params 在此文件中作修改
-s [name=]type[,options] • malloc[,size] 内存存储,[,size]用于定义空间大小;重启后全部缓存项失效; • file[,path[,size[,granularity]]] 磁盘文件存储,黑盒;重启后全部缓存项失效; • persistent,path,size 文件存储,黑盒;重启后全部缓存项有效;实验; varnish程序的选项: 程序选项:/etc/varnish/varnish.params文件 -a address[:port][,address[:port][...],http监听的端口默认为6081端口; -T address[:port],默认为6082端口; -s [name=]type[,options],定义缓存存储机制; -u user -g group -f config:VCL配置文件; -F:运行于前台;
运行时参数:
/etc/varnish/varnish.params文件, DEAMON_OPTS
DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300" -p param=value:设定运行参数及其值; 可重复使用屡次; -r param[,param...]: 设定指定的参数为只读状态;
重载vcl配置文件:
~ ]# varnish_reload_vcl
修改 /etc/varnish/default.vcl文件
默认监听的后端 ip地址及端口号(http服务)
更改成
启动服务 systemctl start varnish
启动服务时,要确保本机的httpd 及 nginx服务都是关闭状态
ss –ntl
测试: http://172.16.253.95:6081/ind...
95主机没有提供web服务,
显示的是后端服务器的页面
响应报文 也证明了这一点
varnish 3版本和 4 版本的流程稍微不同。具体以下
varnish 3版本
一:vcl_recv()引擎 收到请求如何处理
1:不是http请求 直接发至后端服务器
使用pass()引擎
2:是http请求,发送至Cacheable处理
1)不可缓存的方法如 put post等
给fetch()引擎。fetch()引擎向后端去取数据 去取数据以前,还能够操纵如下请求报文,做出一些修改
fetch()取到数据以后,给deliver()引擎(交付之意),deliver引擎发送至客户端。
deliver()引擎发送至客户端以前,能够修改如下响应报文
2)能够缓存的方法 get head
交付给 vcl_hash, vcl_hash能够定义hash哪些数据 hash完以后的结果有两种命中或不命中
命中交付给 hit()引擎处理
不命中miss() 引擎处理
结:此流程主要 说起了如下几个引擎
vcl_recv() 接收用户请求的引擎
fetch() 向后端去取数据的引擎,能够修改请求报文
deliver() 发送数据给 客户端的引擎,能够修改响应报文
vcl_hash() : 缓存 hash比较的引擎,能够定义hash的一些规则
hit() 命中缓存的引擎
miss() 未命中缓存的引擎
varnish 4.0
增长的引擎:
vcl_purge(): 修剪。 清除一项缓存项
ban():篱笆 清除一类缓存项。 支持正则
pipe(): 不是http请求,直接发送至后端处理
2:vcl中的状态引擎
1:recv():接收用户请求的缓存
pipe():不是http的请求,经过管道(四层)直接发送至后端
pass():直接发送至后端
sysnth() 自定义不接受用户的请求
purge()修剪缓存
hash()
2:hash()缓存 hash比较的引擎,能够定义hash的一些规则
hit() 命中缓存的引擎
miss() 未命中缓存的引擎
3:
fetch():
接收的是 miss()引擎后的请求及
recv()请求 及
beresponce() 后端处理过的请求
修改请求报文至 后端
error():发送至后端处理以后,没有找到数据
beresponce() 后端处理以后 ,能够处理的数据
deliver() 发送数据给 客户端的引擎,能够修改响应报文
接收 hit()及 fetch()的数据
下述章节主要描述 vcl配置及 实验实现