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配置及 實驗實現