日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux运维 第三阶段 (十八) varnish

發(fā)布時間:2025/3/17 linux 90 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux运维 第三阶段 (十八) varnish 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Linux運(yùn)維 第三階段 (十八) varnish

?

數(shù)據(jù):

結(jié)構(gòu)化數(shù)據(jù),RDBMS

非結(jié)構(gòu)化數(shù)據(jù),FS,存海量小文件,NAS、SAN、DFS可提供較好的性能;

?

web cache

程序具有局部性(時間局部性;空間局部性);

key-valuekeyurl訪問路徑,hash),valueweb content);

hotpot熱點數(shù)據(jù);

命中率=hit/(hit+miss),文檔命中率(從文檔個數(shù)進(jìn)行衡量),字節(jié)命中率(從內(nèi)容大小進(jìn)行衡量);

緩存對象,有生命周期,定期清理;

緩存空間耗盡,LRU算法;

可緩存,不可緩存(用戶私有數(shù)據(jù));

cache is king

?

緩存的處理步驟:

接收請求-->解析請求(提取請求的URL及各種首部)-->查詢緩存-->新鮮度檢測-->創(chuàng)建響應(yīng)報文-->發(fā)送響應(yīng)-->記錄日志;

?

新鮮度檢測機(jī)制:

過期日期:

http/1.0Expires,時區(qū)不同則有問題;

http/1.1Cache-Control: max-age=600,該網(wǎng)頁內(nèi)容最多存活時間,比Expires要好;

有效性再驗證,revalidate

如果原始內(nèi)容未改變,則僅響應(yīng)首部(不附帶body部分),響應(yīng)碼304Not Modified);

如果原始內(nèi)容發(fā)生改變,則正常響應(yīng),響應(yīng)碼200

如果原始內(nèi)容消失,則響應(yīng)404,此時緩存中的cache object也應(yīng)被刪除;

?

條件式請求首部:

If-Modified-Since(基于請求內(nèi)容的時間戳作驗證);

If-Unmodified-Since

If-Match

If-None-MatchEtag);

?

Cache-Controlcache-directive?? #(更加靈活的緩存控制機(jī)制)

cache-request-directive請求:

no-cache(不要緩存的實體,要求現(xiàn)在從web server上取);

max-age(只接受Age值小于max-age值,并且沒有過期的對象);

max-stale(可以接受過去的對象,但過期時間必須小于max-stale值);

min-fresh(接受其新鮮生命期大于其當(dāng)前Agemin-fresh值之和的緩存對象);

no-store;

no-transform;

only-if-cached;

cache-extension;

cache-response-directive響應(yīng):

public(可以用cached內(nèi)容回應(yīng)任何用戶);

private(只能用緩存內(nèi)容回應(yīng)先前請求該內(nèi)容的那個用戶);

no-cache(可以緩存,但只有在跟web server驗證其有效后,才能返回給client);

max-age(本響應(yīng)包含的對象的過期時間);

ALL:no-store(不允許緩存);

no-transform;

must-revalidate;

proxy-revalidate;

s-maxage;

cache-extenion;

?

?

HTTP Expiration

緩存過期,則一定會到原始server上去取,但原始server上的內(nèi)容未必發(fā)生改變;

?

HTTP validation

Last-Modified/If-Modified-Since

Etag/If-None-Match

?

兩者結(jié)合:

you can combie HTTP headers the way you want,Expiration wins over Validation

?

常見的緩存服務(wù)器開源解決方案:

varnish VS squid(類似nginx VS httpd);

?

CDNGSLB,緩存路由協(xié)議;大公司,全國各機(jī)房自建CDN;中小公司租用 第三方CDN,帝聯(lián)、藍(lán)訊等);

?

http://www.varnish-cache.org/

?

varnish architecture

?

DSLdomain specific language

VCLvarnish configuration language,緩存策略配置接口,基于域的簡單編程語言;

管理進(jìn)程(編譯vcl并應(yīng)用新配置,監(jiān)控varnish,初始化varnishCLI接口);

child/cacheacceptor(接收新的連接請求);worker threads(處理用戶請求);Expiry(清理緩存中的過期對象));

單進(jìn)程多線程;

日志(shared memory log,默認(rèn)90M,分為兩部分,前一部分是計數(shù)器,后一部分是請求相關(guān)的數(shù)據(jù));

?

內(nèi)存分配和回收:

malloc()、free()?? #(這兩種效率不高);

jemalloc?? #General-purpose scalable concurrent malloc(3) implementation,更高效)

?

varnish如何存儲緩存對象:

方式一:file(單個文件;不支持持久機(jī)制;適用于大量文件,最好用pci-e disk;與nginx緩存不同,varnish將所有緩存對象存放在單個文件中,varnish自己管理這個文件,varnish在這個文件內(nèi)部組織出專用的FSvarnish自己識別每一個緩存對象從哪開始到哪結(jié)束,名字等元數(shù)據(jù),varnish用于緩存的這一單個文件是獨立自治的王國;varnish服務(wù)在運(yùn)行過程中不能隨便重啟,否則緩存全部失效);

注:

nginx將緩存對象放在disk中,key在內(nèi)存里,nginx緩存在定義時有多級緩存目錄,levels=1:2:2,目錄下放緩存對象,每一個緩存對象用一個文件來存,因此會有很多文件描述符inode

方式二:malloc(在內(nèi)存中存放緩存對象,時間久了有內(nèi)存碎片);

方式三:persistent(基于文件的持久存儲,實驗階段,有io問題,最好用SSD disk);

?

配置varnish的三種接口:

1、varnishd應(yīng)用程序的命令行參數(shù):

監(jiān)聽的socket,使用的存儲類型等額外的配置參數(shù);

-p param=value

-r param,param,……?? #(設(shè)定只讀參數(shù)列表)

2-p選項指明的參數(shù),run-time運(yùn)行時參數(shù),可在程序運(yùn)行時,通過其CLI進(jìn)行配置;

3、vcl,配置緩存系統(tǒng)的緩存機(jī)制,通過vcl配置文件進(jìn)行配置,先編譯(依賴c compilegcc),后應(yīng)用,/etc/varnish/default.vcl

?

?

?

]#yum -y install varnish?? #2 version-->3的配置不兼容,3-->4兼容)

Package(s)data still to download: 455 k

(1/3):jemalloc-3.6.0-1.el6.x86_64.rpm??????????????????????????????????????????????????| 100 kB???? 00:00????

(2/3):varnish-2.1.5-6.el6.x86_64.rpm???????????????????????????????????????????????????| 264 kB???? 00:00????

(3/3):varnish-libs-2.1.5-6.el6.x86_64.rpm??????????????????????????????????????????????|? 90 kB???? 00:00???

?

]#varnishd -V

varnishd(varnish-2.1.5 SVN )

Copyright(c) 2006-2009 Linpro AS / Verdens Gang AS

?

]#varnishd -h?? #(默認(rèn)listen 6081/60826081服務(wù)端口,6082admin端口,haproxy默認(rèn)5000

??? -a address:port????????????? # HTTP listen address and port

??? -b address:port????????????? # backend address and port

???????????????????????????????? #??? -b <hostname_or_IP>

???????????????????????????? ????#???-b '<hostname_or_IP>:<port_or_service>'

??? -f file????????????????????? # VCL script

??? -s kind[,storageoptions]???? # Backend storage specification

???????????????????????????????? #?? -s malloc

???????????????????????????????? #?? -s file?[default: use /tmp]

???????????????????????????????? #?? -s file,<dir_or_file>

???????????????????????????????? #?? -s file,<dir_or_file>,<size>

???????????????????????????????? #?? -sfile,<dir_or_file>,<size>,<granularity>

??? -S secret-file?????????????? # Secret file for CLIauthentication

??? -T address:port????????????? # Telnet listen address and port

?

]#rpm -ql varnish??

/etc/rc.d/init.d/varnish

/etc/rc.d/init.d/varnishlog

/etc/rc.d/init.d/varnishncsa

/etc/sysconfig/varnish

/etc/varnish

/etc/varnish/default.vcl

/usr/bin/varnishadm

/usr/bin/varnishhist

/usr/bin/varnishlog

/usr/bin/varnishncsa

/usr/bin/varnishreplay

/usr/bin/varnishsizes

/usr/bin/varnishstat

/usr/bin/varnishtest

/usr/bin/varnishtop

/usr/sbin/varnish_reload_vcl

/usr/sbin/varnishd

/usr/share/doc/varnish-2.1.5

……

?

注:

centos7中:

epel源的varnish4.0.3

通過systemctl控制應(yīng)用啟動和關(guān)閉;

/etc/varnish/varnish.params,用于在啟動varnish時傳遞運(yùn)行的參數(shù),不通過此文件則要在命令行中指定;

/usr/lib/systemd/system/varnish.service中定義EnvironmentFile=/etc/varnish/varnish.params,通過定義EnvironmentFile方式加載參數(shù),沒有腳本了;

ExecStart=/usr/sbin/varnishd

centos6中:

epel源的varnish2.1.5

/etc/sysconfig/varnish,大多數(shù)程序是通過腳本傳遞參數(shù);

?

]#yum -y install httpd

]#for i in {1..10} ; do echo "page $i on web" > /var/www/html/test$i.html ; done

]#chkconfig --list httpd?? #centos7#systemctl start httpd.service#systemctl enable httpd.service#systemctl is-enabled httpd.service

]#/etc/init.d/httpd start

]#ss -tnl | grep :80

LISTEN???? 0?????511?????????????????????:::80????????????????????? :::*??

?

]#vim /etc/sysconfig/varnish?? #(或/etc/sysconfig/varnish不動,更改/etc/varnish/default.vcl中的backend_default {

backenddefault {

? .host = "127.0.0.1";

? .port = "80";

}

);

VARNISH_TTL=120?? #varnish連接backend servertimeout

DAEMON_OPTS="-a:6081 \

???????????? -T localhost:6082 \

????? ???????-b localhost:80 \

???????????? -u varnish -g varnish \

???????????? -sfile,/var/lib/varnish/varnish_storage.bin,1G"

#DAEMON_OPTS="-a${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \

#???????????? -f ${VARNISH_VCL_CONF} \

#???????????? -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT}\

#???????????? -t ${VARNISH_TTL} \

#???????????? -w${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \

#???????????? -u varnish -g varnish \

#???????????? -S ${VARNISH_SECRET_FILE} \

#???????????? -s ${VARNISH_STORAGE}"

?

]#/etc/init.d/varnish restart

Stoppingvarnish HTTP accelerator:???????????????????????? [? OK? ]

Startingvarnish HTTP accelerator:???????????????????????? [? OK? ]

]#ss -tnl | egrep "6081|6082"

LISTEN???? 0?????1024???????????????????? :::6081??????????????????? :::*????

LISTEN???? 0?????1024?????????????????????*:6081???????????????????? *:*????

LISTEN???? 0?????10???????????????127.0.0.1:6082????????????????????*:*????

LISTEN???? 0?????10??????????? ??????????::1:6082??????????????????? :::*??

?

?

]#varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082?? #(管理接口)

help

200377????

help[command]

ping[timestamp]?? #(查看主機(jī)狀態(tài))

authresponse

quit

banner

status?? #(查看child進(jìn)程狀態(tài))

start?? #start,stop用于啟停child進(jìn)程)

stop

stats

vcl.load <configname> <filename>?? #(裝載vcl文件并編譯,configname是自定義的)

vcl.inline <configname> <quoted_VCLstring>

vcl.use <configname>

vcl.discard <configname>

vcl.list

vcl.show <configname>

param.show [-l] [<param>]

param.set <param> <value>

purge.url <regexp>

purge<field> <operator> <arg> [&& <field><oper> <arg>]...

purge.list

?

ping

20019?????

PONG1497921153 1.0

?

status

20022?????

Childin state running

?

vcl.list?? #active為當(dāng)前在用)

20023?????

active????????? 2 boot

?

vcl.load test /etc/varnish/default.vcl

20013?????

VCLcompiled.

?

vcl.use test

2000??????

?

vcl.list

20046?????

available?????? 1 boot

active????????? 1 test

?

vcl.useboot

2000??????

?

vcl.list

20046?????

active????????? 2 boot

available?????? 0 test

?

vcl.discard test

2000??????

?

vcl.list

20023?????

active????????? 2 boot

?

param.show?? #(顯示運(yùn)行時參數(shù),常用的有:thread_pool_min,thread_pool_max,thread_pools,該server的并發(fā)連接數(shù)為thread_pools*thread_pool_max;若不想讓這些運(yùn)行時參數(shù)被更改,可在啟動時用-r指明是只讀,

2002413???

acceptor_sleep_decay?????? 0.900000 []

acceptor_sleep_incr??????? 0.001000 [s]

acceptor_sleep_max???????? 0.050000 [s]

auto_restart?????????????? on [bool]

ban_lurker_sleep?????????? 0.000000 [s]

between_bytes_timeout????? 60.000000 [s]

cache_vbe_conns??????????? off [bool]

cc_command???????????????? "exec cc -fpic -shared-Wl,-x -o %o %s"

cli_buffer?????????????? ??8192 [bytes]

cli_timeout??????????????? 10 [seconds]

clock_skew???????????????? 10 [s]

connect_timeout??????????? 0.400000 [s]

critbit_cooloff??????????? 180.000000 [s]

default_grace????????????? 10 [seconds]

default_ttl??????????????? 120 [seconds]

diag_bitmap??????????????? 0x0 [bitmap]

err_ttl??????????????????? 0 [seconds]

esi_syntax???????????????? 0 [bitmap]

expiry_sleep?????????????? 1.000000 [seconds]

fetch_chunksize??????????? 128 [kilobytes]

first_byte_timeout???????? 60.000000 [s]

group??????? ??????????????varnish (498)

http_headers?????????????? 64 [header lines]

http_range_support???????? off [bool]

listen_address???????????? :6081

listen_depth?????????????? 1024 [connections]

log_hashstring???????????? off [bool]

log_local_address????????? off [bool]

lru_interval?????????????? 2 [seconds]

max_esi_includes?????????? 5 [includes]

max_restarts?????????????? 4 [restarts]

overflow_max?????????????? 100 [%]

ping_interval????????????? 3 [seconds]

pipe_timeout?????????????? 60 [seconds]

prefer_ipv6? ??????????????off [bool]

purge_dups???????????????? on [bool]

rush_exponent????????????? 3 [requests per request]

saintmode_threshold??????? 10 [objects]

send_timeout?????????????? 600 [seconds]

sess_timeout?????????????? 5 [seconds]

sess_workspace??????? ?????65536 [bytes]

session_linger???????????? 50 [ms]

session_max??????????????? 100000 [sessions]

shm_reclen???????????????? 255 [bytes]

shm_workspace????????????? 8192 [bytes]

syslog_cli_traffic???????? on [bool]

thread_pool_add_delay????? 20 [milliseconds]

thread_pool_add_threshold? 2 [requests]

thread_pool_fail_delay???? 200 [milliseconds]

thread_pool_max??????????? 1000 [threads]

thread_pool_min??????????? 1 [threads]

thread_pool_purge_delay??? 1000 [milliseconds]

thread_pool_stack????????? unlimited [bytes]

thread_pool_timeout??????? 120 [seconds]

thread_pools?????????????? 2 [pools]

thread_stats_rate????????? 10 [requests]

user?????????????????????? varnish (498)

vcl_trace????????????????? off [bool]

waiter???????????????????? default (epoll, poll)

?

param.show -l?? #(顯示更詳細(xì)的信息)

……

?

param.show thread_pools

2001111???

thread_pools?????????????? 2 [pools]

?????????????????????????? Default is 2

?????????????????????????? Number of workerthread pools.

??????????????????????????

?????????????????????????? Increasing number ofworker pools decreases lock

?????????????????????????? contention.

??????????????????????????

?????????????????????????? Too many pools wasteCPU and RAM resources, and

?????????????????????????? more than one poolfor each CPU is probably

??? ???????????????????????detrimal to performance.

??????????????????????????

?????????????????????????? Can be increased onthe fly, but decreases require

?????????????????????????? a restart to takeeffect.

??????????????????????????

???????????????????? ??????NB: This parameter may take quite sometime to

?????????????????????????? take (full) effect.

??????????????????????????

?????????????????????????? NB: We do not knowyet if it is a good idea to

?????????????????????????? change thisparameter, or if the default value is

?????????????????????????? even sensible.? Caution is advised, and feedback

?????????????????????????? is most welcome.

?

vcl.show boot?? #(顯示vcl文件編譯前的內(nèi)容)

?

注:

4版本的管理命令行下還有:

panic.show

storage.list

backend.list

backend.set_healthbackend server從離線-->上線);

ban.list(清理緩存中的緩存對象,根據(jù)表達(dá)式清理某一類緩存對象,默認(rèn)緩存對象過期則會清理);

?

?

]#varnishlog?? #log有關(guān),在宿主機(jī)上訪問http://10.230.32.208:6081/test6.html[-i tag] [-I regexp] (include regular express); [-X regexp](exclude regular express) [-x tag]

?? 13 SessionOpen? c 192.168.2.14 2665 :6081

?? 13 ReqStart???? c 192.168.2.14 2665 1994176375

?? 13 RxRequest??? c GET

?? 13 RxURL??????? c /test6.html

?? 13 RxProtocol?? c HTTP/1.1

?? 13 RxHeader???? c Host: 10.230.32.208:6081

?? 13 RxHeader???? c Connection: keep-alive

?? 13 RxHeader???? c Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

?? 13 RxHeader???? c User-Agent: Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

?? 13 RxHeader???? c Accept-Encoding: gzip,deflate,sdch

?? 13 RxHeader???? c Accept-Language: zh-CN,zh;q=0.8

?? 13 VCL_call???? c recv

?? 13 VCL_return?? c lookup

?? 13 VCL_call???? c hash

?? 13 VCL_return?? c hash

?? 13 VCL_call???? c miss

?? 13 VCL_return?? c fetch

?? 14 BackendOpen? b default 127.0.0.1 45242 127.0.0.1 80

?? 13 Backend????? c 14 default default

?? 14 TxRequest??? b GET

?? 14 TxURL??????? b /test6.html

?? 14 TxProtocol?? b HTTP/1.1

?? 14 TxHeader???? b Host: 10.230.32.208:6081

?? 14 TxHeader???? b Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

?? 14 TxHeader???? b User-Agent: Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

……

?

]#varnishncsa?? #log有關(guān),與combined接近,訪問http://10.230.32.208:6081/test8.html

192.168.2.14- - [07/Jul/2017:10:01:19 +0800] "GEThttp://10.230.32.208:6081/favicon.ico HTTP/1.1" 404 290 "-""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/28.0.1500.72 Safari/537.36"

192.168.2.14- - [07/Jul/2017:10:01:19 +0800] "GEThttp://10.230.32.208:6081/favicon.ico HTTP/1.1" 404 290 "-""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/28.0.1500.72 Safari/537.36"

?

]#varnishtop?? #top

?

]#varnishstat?? #statistics,)

]#varnishstat -l?? #-l ?# Lists the available fields to use with the-f option

Varnishstat-f option fields:

Fieldname?????????? Description

----------?????????? -----------

client_conn????????? Client connections accepted

client_drop????????? Connection dropped, no sess/wrk

client_req?????????? Client requests received

cache_hit??????????? Cachehits

cache_hitpass??????? Cache hits for pass

cache_miss?????????? Cache misses

backend_conn???????? Backend conn. success

backend_unhealthy??? Backend conn. not attempted

backend_busy???????? Backend conn. too many

backend_fail???????? Backend conn. failures

backend_reuse??????? Backend conn. reuses

backend_toolate????? Backend conn. was closed

backend_recycle????? Backend conn. recycles

backend_unused??????Backend conn. unused

fetch_head?????????? Fetch head

fetch_length???????? Fetch with Length

fetch_chunked??????? Fetch chunked

fetch_eof??????????? Fetch EOF

fetch_bad??????????? Fetch had bad headers

fetch_close????????? Fetch wanted close

fetch_oldhttp??????? Fetch pre HTTP/1.1 closed

fetch_zero?????????? Fetch zero len

fetch_failed???????? Fetch failed

n_sess_mem?????????? N struct sess_mem

n_sess?????????????? N struct sess

n_object???????????? N struct object

n_vampireobject????? N unresurrected objects

n_objectcore???????? N struct objectcore

n_objecthead???????? N struct objecthead

n_smf??????????????? N struct smf

n_smf_frag?????????? N small free smf

n_smf_large????????? N large free smf

n_vbe_conn?????????? N struct vbe_conn

n_wrk?? ?????????????N worker threads

n_wrk_create???????? N worker threads created

n_wrk_failed???????? N worker threads not created

n_wrk_max??????????? N worker threads limited

n_wrk_queue????????? N queued work requests

n_wrk_overflow?????? N overflowed work requests

n_wrk_drop?????????? N dropped work requests

n_backend??????????? N backends

n_expired??????????? N expired objects

n_lru_nuked????????? N LRU nuked objects

n_lru_saved????????? N LRU saved objects

n_lru_moved????????? N LRU moved objects

n_deathrow?????????? N objects on deathrow

losthdr????????????? HTTP header overflows

n_objsendfile??????? Objects sent with sendfile

n_objwrite?????????? Objects sent with write

n_objoverflow??????? Objects overflowing workspace

s_sess?????????????? Total Sessions

s_req??????????????? Total Requests

s_pipe?????????????? Total pipe

s_pass?????????????? Total pass

s_fetch????????????? Total fetch

s_hdrbytes?????????? Total header bytes

s_bodybytes????????? Total body bytes

sess_closed????????? Session Closed

sess_pipeline??????? Session Pipeline

sess_readahead?????? Session Read Ahead

sess_linger????????? Session Linger

sess_herd??????????? Session herd

shm_records????????? SHM records

shm_writes?????????? SHM writes

shm_flushes???? ?????SHM flushes due to overflow

shm_cont???????????? SHM MTX contention

shm_cycles?????????? SHM cycles through buffer

sm_nreq????????????? allocator requests

sm_nobj????????????? outstanding allocations

sm_balloc??????????? bytes allocated

sm_bfree????? ???????bytes free

sma_nreq???????????? SMA allocator requests

sma_nobj???????????? SMA outstanding allocations

sma_nbytes?????????? SMA outstanding bytes

sma_balloc?????????? SMA bytes allocated

sma_bfree??????????? SMA bytes free

sms_nreq???????????? SMS allocator requests

sms_nobj???????????? SMS outstanding allocations

sms_nbytes?????????? SMS outstanding bytes

sms_balloc?????????? SMS bytes allocated

sms_bfree??????????? SMS bytes freed

backend_req????????? Backend requests made

n_vcl??????????????? N vcl total

n_vcl_avail????????? N vcl available

n_vcl_discard??????? N vcl discarded

n_purge????????????? N total active purges

n_purge_add????????? N new purges added

n_purge_retire?????? N old purges deleted

n_purge_obj_test???? N objects tested

n_purge_re_test????? N regexps tested against

n_purge_dups???????? N duplicate purges removed

hcb_nolock?????????? HCB Lookups without lock

hcb_lock???????????? HCB Lookups with lock

hcb_insert?????????? HCB Inserts

esi_parse??????????? Objects ESI parsed (unlock)

esi_errors?????????? ESI parse errors (unlock)

accept_fail????????? Accept failures

client_drop_late???? Connection dropped late

uptime?????????????? Client uptime

backend_retry??????? Backend conn. retry

dir_dns_lookups????? DNS director lookups

dir_dns_failed?????? DNS director failed lookups

dir_dns_hit????????? DNS director cached lookups hit

dir_dns_cache_full?? DNS director full dnscache

fetch_1xx??????????? Fetch no body (1xx)

fetch_204??????????? Fetch no body (204)

fetch_304??????????? Fetch no body (304)

]#varnishstat -f cache_hit?? #-f field_list # Comma separatedlist of fields to display.

?

?

vcl state engine

?

vcl_recv

vcl_hash

vcl_hit,vcl_miss

vcl_fetch

vcl_deliver

vcl_pipe?? #當(dāng)檢測到client請求不是get、head時,也不是正常http的方法,用vcl_pipe直接扔給backend server,一手托兩家;

vcl_pass

vcl_error?? # varnish在前端生成錯誤頁面信息,用于refuse request或其它異常狀態(tài)由varnish合成錯誤頁面);

Verion4還有:

vcl_purge

vcl_backend_fetch

vcl_backend_response

vcl_synth

vcl_backend_error

?

注:

iptables

prerouting-->input-->forwar-->postrouting

output-->postrouting

?

各引擎間有一定程度的相關(guān)性,前一個engine若有多個下游engine,則上游engine需用return指明要轉(zhuǎn)移的下游engine

?

the vcl finite state machine

1comment//,#,/*……*/,這些注釋信息可被編譯器忽略;

2sub $NAME { },用于定義子例程;

3、不支持循環(huán);

4、有眾多內(nèi)置的變量,變量的可調(diào)用位置與state engine有密切相關(guān)性;

5、支持終止語句,return (action),沒有返回值;

6、“域”專用;

7、操作符,=,==,~,!,&&,||

?

條件判斷語句:

if (CONDITION) {

} else {

}

?

變量賦值:

set name=value

unset name=value

?

?

if (req.restarts == 0) {

???????? if (req.http.x-forwarded-for) {

?????????????????? set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;

???????? } else {

?????????????????? set req.http.X-Forwarded-For = client.ip;

???????? }

}

if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") {

???????? return (pipe);

}

if (req.request != "GET" && req.request != "HEAD") {

???????? return (pass);

}

if (req.http.Authorization || req.http.Cookie) {

???????? return (pass);

}

return (lookup);

?

hash_data (req.url);

if (req.http.host) {

???????? hash_data(req.http.host);

} else {

???????? hash_data(server.ip);

}

return (hash);

?

return (deliver);

?

return (fetch);

?

if (beresp.ttl <= 0s || beresp.http.Set-Cookie || beresp.http.Vary == "*") {

???????? set beresp.ttl = 120 s;

???????? return (hit_for_pass);

}

return (deliver);

?

state engine workflow(V3)

workflow1:

vcl_recv-->vcl_hash-->vcl_hit->vcl_deliver

?

workflow2:

vcl_recv-->vcl_hash-->vcl_miss-->vcl_fetch-->vcl_deliver

?

workflow3:

vcl_recv-->vcl_pass-->vcl_fetch-->vcl_deliver

?

workflow4:

vcl_recv-->vcl_pipe

?

variable availability in VCL:

varnish中的內(nèi)置變量:

req?? #req.http.HEADERreq.methodreq.protoreq.urlreq.ttl

resp?? #resp.http.HEADERresp.protoresp.reasonresp.status

bereq?? #backendbereq.http.HEADERSvarnish發(fā)往backend server請求報文的指定首部;bereq.request請求方法;bereq.urlbereq.protobereq.backend指明要調(diào)用的后端主機(jī);

beresp?? #beresp.protbackendserver響應(yīng)時的協(xié)議版本;beresp.status響應(yīng)狀態(tài)碼;beresp.reason原因短語;beresp.backend.ipberesp.backend.nameberesp.http.HEADERbackend server響應(yīng)的報文首部;beresp.ttlbackend server響應(yīng)的內(nèi)容余下的生存時長;

client

now

obj?? #obj.ttl,對象的ttl值;obj.hits,此對象從緩存中命中的次數(shù);

server?? #server.hostnameserver.ip

storage?? #storage.<name>.free_spacestorage.<name>.used_spacestorage.<name>.happyhealth status);

functions

?

?

default.vclbackend server定義:

backend NAME {

???????? .ATTRIBUTE = "VALUE";

???????? .host = "IP_ADDRESS";

???????? .port = "PORT";

???????? .probe = {

?????????????????? .url ="/test1.html";

???????? }

}

?

注:

.probebe作健康狀態(tài)檢測:

probe NAME {

???????? .ATTRIBUTE = "VALUE";

???????? .url = "/test.html";

???????? .expected_response = 200;?? #期望的響應(yīng)狀態(tài)碼,默認(rèn)200

}

舉例:

backend websrv1 {

???????? .host = "192.168.239.20";

???????? .port = "80";

???????? .probe = {

?????????????????? .url = "/test.html";

???????? }

}

backend websrv2 {

???????? .host = "192.168.239.21";

???????? .port = "80";

???????? .probe = {

?????????????????? .url = "/test.html";

???????? }

}

sub vcl_recv{

???????? if (req.url ~ "(?i)\.(jpg|png|gif)$") {

?????????????????? set req.backend_hint = websrv1;

???????? } else {

?????????????????? set req.backend_hint = websrv2;

???????? }

}

?

LB算法:

fallback

random

round_robin?? #是對整個資源輪循,如依次請求/test1.html,/test2.html,/test3.html,若始終訪問/test1.html,則始終從一個backend server返回;

hash;

舉例:

backend websrv1 {

……

}

backend websrv2 {

……

}

import directors;

sub vcl_init {

???????? new mycluster = directors.round_robin();

???????? mycluster.add_backend(websrv1);

???????? mycluster.add_backend(websrv2);

}

subvcl_recv {

???????? set req.backend_hint = mycluster.backend();

}

?

注:

#man vmod_directors

#curl http://VARNISH_SERVER:6082/test{1,2,3}.html

?

?

?

例:

給響應(yīng)給client的報文添加自定義首部X-Cache,在vcl_deliver中定義:

subvcl_deliver {

??????? if (obj.hits > 0) {

??????????????? set resp.http.X-Cache = "HIT from + server.ip";

??????? } else {

??????????????? set resp.http.X-Cache = "MISS";

??????? }

}

?

vcl.list

20023?????

active????????? 1 boot

?

vcl.load test /etc/varnish/test.vcl

20013?????

VCLcompiled.

vcl.usetest

2000??????

?

?

例:

varnish支持后端多個虛擬主機(jī):

sub vcl_recv {

???????? if (req.http.host ~ "www.magedu.com" {

???????? }

}

?

例:

強(qiáng)制對某資源(或后臺登錄)的請求,不檢查緩存,直接找backend server

sub vcl_recv {

???????? if (req.url ~ "^/test2.html$"{

?????????????????? return (pass);

???????? if (req.url ~ "(?i)^/login" || req.url ~ "(?i)^/admin") {

?????????????????? return (pass);

}

?

例:

對特定類型的資源取消其私有的cookie標(biāo)識,并強(qiáng)行設(shè)定其可以varnish緩存時長:

sub vcl_babckend_response {

???????? if (beresp.http.cache-control !~ "s-maxage") {

?????????????????? if (bereq.url ~ "(?i)\.jpg$") {

??????????????????????????? set beresp.ttl = 3600s;

???????? ?????????????????? unset beresp.http.Set-Cookie;

?????????????????? }

???????? if (bereq.url ~ "(?i)\.css$"){

?????????????????? set beresp.ttl = 600s;

?????????????????? unset beresp.http.Set-Cookie;

???????? }

}

?

?

?

?



一、相關(guān)概念:

http/1.0-->http/1.1(重大改進(jìn):對緩存功能實現(xiàn)了更精細(xì)化的設(shè)計)

RFCrequest file comment,每一種協(xié)議都有請求注解文檔,講協(xié)議規(guī)范)

http頁面由眾多的web object組成,有些是靜態(tài),有些是通過程序執(zhí)行后生成的;為加速web的訪問,browser中引入了緩存機(jī)制,能將訪問的靜態(tài)內(nèi)容或可緩存的動態(tài)內(nèi)容緩存到本地,而后client再次到原始server上請求之前相同的內(nèi)容時,如果原始server上的內(nèi)容沒發(fā)生改變,就直接使用本地已緩存的數(shù)據(jù),而非從原始server上再次下載,這整個過程是如何完成的,http是如何支持緩存機(jī)制的(server上的緩存,并非所有內(nèi)容都能緩存,如登錄時的賬號密碼、向用戶返回的cookie,緩存有失效時間)

?

緩存的類型:

public cache(如nginxvarnish

private cache(用戶browser的本地緩存,一般用戶本地的緩存是安全的,但若這個電腦是公共部門的,很多人使用,相對來說也不安全)

?

一般能緩存的前提是原始server上的內(nèi)容沒發(fā)生改變的,client怎么知道他請求的內(nèi)容在自己本地緩存中有沒失效,從而不用去原始server上獲取數(shù)據(jù),解決方案:

1)服務(wù)器在第一次響應(yīng)用戶的請求時,在http首部中明確告訴client此資源可以緩存的有效時長為10min,使用expires指明過期時間,如Expires: Fri , 12 May 2006 18:53:33 GMT

2server將數(shù)據(jù)響應(yīng)給client時沒設(shè)置緩存期限,但client覺得這是個靜態(tài)內(nèi)容可以緩存(client自己設(shè)置了一些緩存策略,如只要是靜態(tài)內(nèi)容我就緩存),緩存下來之后并不知道遠(yuǎn)程server中是否改變,當(dāng)再次請求之前請求的內(nèi)容時,告訴server我這存的有一份它的上一次修改時間是什么時候,server一對比發(fā)現(xiàn)同一對象的修改時間一致,由此可知server上的內(nèi)容沒改變,于是serverclient響應(yīng)碼304Not Modified),告訴client此前內(nèi)容沒改變你可以繼續(xù)使用,于是clientbrowser直接整合本地緩存的資源得以顯示

?

以上是基于時間來實現(xiàn)緩存機(jī)制控制的(http/1.0的緩存機(jī)制是靠prog來標(biāo)記能否緩存,并使用Expires定義某資源到什么時候過期);http/1.1?對緩存機(jī)制引入了很多首部,有些首部專用于client,有些首部專用于server,讓雙方基于某種功能進(jìn)行協(xié)商,判定緩存對象是否能進(jìn)一步使用的機(jī)制)

?

緩存相關(guān)的http首部:

1Expires(絕對時間計時法,絕對日期時間,GMT格式,如Expires: Fri , 12 May 2006 18:53:33 GMT,它返回給client的時間是明確的時間,clientbrowser緩存了這個資源后,若再次發(fā)起請求同樣內(nèi)容時,只要在這個時間內(nèi)就不去server請求了直接從本地取,Expires的缺陷(若clientserver上的時間不一致就無法比較了),這種機(jī)制在http/1.0上常用,而在http/1.1上使用時長來定義max-age

2cache-control中的max-agemax-agehttp/1.1中使用,用于定義時長,明確告訴client某個資源可緩存多長時間,從server發(fā)送這個資源開始倒計時,只要倒計時結(jié)束,緩存資源立即失效,如Cache-Control:max-age=600

注:如果既指定Expires又在cache-control中指定max-age,那Expires的設(shè)定將被忽略

注:cache-controlhttp中重要的首部,用于定義所有的緩存機(jī)制都必須遵循緩存指示,無論時間有無過期或有沒有給最長緩存時間都要接受cache-control的控制,就算某個資源定義可緩存兩天,但同時又使用了cache-control指令告訴你不能進(jìn)行緩存,那結(jié)果就是不能緩存,指令包括有:public、private、no-cache、no-store、max-age、s-maxage、must-reval-idate

public(放在public cache上,所有人都能獲取,不涉及隱私泄露)

private(只能緩存在用戶的私有緩存區(qū)域,像nginxvarnish這樣的public cache server是不能緩存的)

no-cache(表示可以緩存,但每次都要向server發(fā)起原始資源驗證,沒有標(biāo)記no-cache時只要在過期時間內(nèi),直接從本地獲取不用向server驗證這個資源能否用,而標(biāo)記了no-cache不論在不在過期時間內(nèi)都要向server驗證)

s-maxage(主要控制私有緩存的過期期限)

3Etag(響應(yīng)首部,某些站點,數(shù)據(jù)變化頻率很高,如client1s里發(fā)起好幾次請求index.html這個資源(Expires: Fri , 12 May2006 18:53:33 GMT),但在server1s內(nèi)更新了好幾次頁面(主頁動態(tài)生成),對于這個對象clientserver時間的比較結(jié)果還是之前的時間,但實際server上的資源已經(jīng)改變了,所以時間戳這種方法過于粗糙,這種按秒計時不足以描述頁面文件的變化頻率,有可能讓已失效的緩存繼續(xù)使用,因此引入Etagextended tag擴(kuò)展標(biāo)記,給頁面定義版本號(版本號是隨機(jī)生成的,每次生成一個頁面都會自動加版本號),Etag是個響應(yīng)首部,用于在響應(yīng)報文中為某web資源定義版本標(biāo)識符,這樣client過來驗證不是基于時間戳而是對比Etag,就算更新頻率在秒級以下也能驗證資源是否發(fā)生改變)

注:(1)(2)都是絕對判定法,http/1.1引入條件判斷,每次驗證資源時是向server發(fā)起詢問條件,如Last-ModifiedIf-Modified-Since

4Last-Modified(響應(yīng)首部,某資源在server上最后修改的時間,當(dāng)client第一次請求某資源時,server返回狀態(tài)200,內(nèi)容是client請求的內(nèi)容,同時有Last-Modified屬性標(biāo)記此文件在server上最后被修改的時間,如Last-Modified : Fri , 12 May 2006 18:53:33 GMT

5If-Modified-Since(條件式請求首部,當(dāng)client第二次請求相同的內(nèi)容時詢問server此對象Last-Modified是否發(fā)生了改變,若沒改變server響應(yīng)給client304Not Modified),若改變了則響應(yīng)改變的內(nèi)容與第一次請求類似,從而保證不向client重復(fù)發(fā)出資源,也保證當(dāng)server有變化時client能得到最新的資源)

6If-None-Match(條件式請求首部,這是個否定請求,clinet第二次請求相同內(nèi)容時會詢問server之前發(fā)的某個資源的Etag是否不匹配,server若回答是則不匹配,響應(yīng)新資源,若server回答否則client使用之前的緩存)

注:If-Modified-SinceLast-Modified有關(guān),If-None-MatchEtag有關(guān),這整個過程:

client請求一個頁面A

server返回頁面A,并給A加上Last-Modified、Etag

client展示頁面A,并將頁面和Last-Modified、Etag一同緩存;

client再次請求頁面A,將Last-Modified、Etag一同傳給server(在首部使用If-Modified-Since、If-None-Match分別詢問Last-ModifiedEtag是否修改);

server檢查Last-Modified、Etag判斷出是否修改,若未修改則響應(yīng)304和一個空的響應(yīng)體

7Vary(響應(yīng)首部,原始server根據(jù)請求來源的不同響應(yīng)不同的首部,Vary通知緩存機(jī)制client獲取頁面是如何得到頁面的,常用的有:Vary:Accept-Encodingclient若支持壓縮功能在請求時將請求報文壓縮,那server在響應(yīng)時也使用壓縮返回,Vary根據(jù)client的編碼機(jī)制(文本或gzip壓縮或deflate壓縮)server采用相應(yīng)的機(jī)制返回)

8Age(緩存server可發(fā)送一個額外的響應(yīng)首部,用于指定響應(yīng)的有效期限,browser通常根據(jù)此首部決定內(nèi)容的緩存時長,如果響應(yīng)報文首部還使用了max-age指令,那緩存的有效時長為max-age減去Age的結(jié)果)

?

假設(shè)我們的reverse proxy上提供緩存,后端是RS(原始server),clientreverse proxy請求某頁面,reverse proxy中有該頁面的緩存則直接響應(yīng)給clientclient于是在本地緩存),若reverse proxy中沒該頁面的緩存,則reverse proxy向原始server發(fā)起請求,原始server響應(yīng)資源給reverse proxy,同時一并給一個首部,如Cache-Control:max-age=600reverse proxy將資源緩存下來在600s內(nèi)都有效,reverse proxy于是重新構(gòu)建首部并響應(yīng)給clientreverse proxy構(gòu)建首部時可以自定義告訴client什么時候過期,如告訴client可以緩存1年,也可告訴client緩存1min),假設(shè)reverse proxyclient的過期時長是1min,當(dāng)同一client再次請求同樣內(nèi)容時(若在緩存過期時間內(nèi)(1min內(nèi))則從本地緩存中直接取;若過了過期時間(1minclient不會立即清除緩存,而是使用條件式請求首部請求,reverse proxy比較兩次時間,若時間一樣則向client返回304reverse proxy于是再給client一個緩存過期時間(1min),所以就算過了過期時間也不一定從reverse proxy上重復(fù)獲取數(shù)據(jù);若是強(qiáng)制刷新ctrl+F5則仍會到reverse proxy上請求)

client在第11min時reverse proxy請求同一頁面,reverse proxy發(fā)現(xiàn)本地緩存已失效(reverse proxy不會使用已失效內(nèi)容響應(yīng)的),它向原始server發(fā)起條件式請求(If-Modified-Since、If-None-Match),若原始server發(fā)現(xiàn)沒修改則返回304Not Modified),這樣reverse proxy的本地緩存時間就更新了,于是使用本地緩存響應(yīng)給client

?

舉例:

第一次請求時:

再次刷新后:

?

?

cache server并不是緩存任意數(shù)據(jù)(不允許緩存某些數(shù)據(jù)),如不能緩存用戶的cookie信息,如果用戶請求的內(nèi)容中有變化的cookie信息的話,緩存是命中不了的,緩存中是key:value,若key中包含經(jīng)常變化的內(nèi)容,命中率是很低的,很多時候緩存時都把cookie信息去掉,以提高命中率;不能緩存某些動態(tài)生成的資源,如表單中填入的賬號密碼;若請求方法是PUTPOST寫操作,也不能緩存,一般緩存的都是GET操作的數(shù)據(jù)(就算是GET操作若包含用戶的認(rèn)證授權(quán)類信息也不能緩存)

?

可在cache server上自定義緩存策略(把某些資源根據(jù)我們自己的理解從原始server上剝離出來自己定義這些資源的緩存時間),如cache server到原始server上請求數(shù)據(jù),若請求的是站點的LOGO圖片,雖原始server告訴cache server可緩存10min,但cache server(管理者)覺得該內(nèi)容是靜態(tài)的而且很長時間都不會變,于是cache server響應(yīng)時告訴client可緩存半年,client在自己本地私有緩存中保存的內(nèi)容越多,那向server發(fā)起請求的或獲取的數(shù)據(jù)就越少,資源發(fā)送少了,帶寬占用率就小了,client從本地緩存直接拿數(shù)據(jù)會很快,這樣用戶體驗度就好

?

?cache server放到離client越近越好(最好放在家門口),盡量將資源丟到用戶的緩存中,我們電腦上或手機(jī)上使用時間長了會緩存一些數(shù)據(jù),這樣使得上網(wǎng)速度更快并節(jié)省流量,某些軟件會提示清理垃圾,若清理了下次請求將占用帶寬重新獲取

?

緩存擴(kuò)展結(jié)構(gòu):CDNcache delivery network,內(nèi)容分發(fā)網(wǎng)絡(luò)),如圖:

clientserver這之間可定義N層緩存(ncache servercache server之間是分層次的),client請求到cache server11號發(fā)現(xiàn)自己沒有要響應(yīng)的內(nèi)容時它不會去找原始server,它會先找它的兄弟服務(wù)器(cache server22若沒有再去找它的父cache server33沒有找它的父cache server4,父cache server中沒有,由父緩存找原始server12是兄弟服務(wù)器(sibling),31的父(parent),43的父),這些cache server之間通過內(nèi)容緩存協(xié)議且能共享緩存對象共同組成的網(wǎng)絡(luò)叫CDN,由此client請求時在中間這個網(wǎng)絡(luò)上就可取得所有內(nèi)容,同時這些cache server可定義一些策略,如定期到原始server上獲取數(shù)據(jù)無論client有無請求

為使用戶體驗好同時又減輕server壓力使用CDN,如下圖四個區(qū)域組成的CDN

未用CDN前,DNS解析:www.magedu.com? in?A? 1.1.1.1

使用CDNDNS要解析成別名,指向cache server上的某一個,如指向杭州CDN節(jié)點(www.magedu.com? in?CNAME? hz.cdn.com),這樣杭州用戶訪問會很快,其它區(qū)域的用戶訪問還是很慢,用智能DNS解決(根據(jù)client來源判定它屬于哪個區(qū)域網(wǎng)絡(luò),于是DNS解析時不是四個都返回,而是僅返回離它最近最快的那個cache server的域名)

智能DNS+CDN這才是真正意義的CDN,當(dāng)client請求時由該區(qū)域的CDN節(jié)點響應(yīng)內(nèi)容,若該節(jié)點沒相應(yīng)內(nèi)容,它不去找源站而是找離它近的節(jié)點,兄弟服務(wù)器和父服務(wù)器都沒有才找源站

?

這些cache server能根據(jù)內(nèi)容緩存協(xié)議來實現(xiàn)緩存對象共享,高級CDN還能實現(xiàn)內(nèi)容路由(某個cache server上沒有內(nèi)容時自動找有內(nèi)容的cache server),使得盡可能不去找原始server,這并不能完全避免找原始server(如動態(tài)內(nèi)容),就算緩存的內(nèi)容是靜態(tài)的,也不會把整站的內(nèi)容都緩存上去,只能緩存一部分,若緩存策略定義的好,將站點的熱區(qū)數(shù)據(jù)都拉到cache server上實現(xiàn)盡可能多的在cache server上緩存

CDN通常是按流量收費(fèi),視頻站點和圖片站點都要用CDN否則流量大了很容易垮掉

對于中小型電子商務(wù)站點可自建CDN,前提要使用智能DNS(可自建智能DNS,也可使用公共的智能DNS serverdnspod

注:dnspod在防DDOS方面很強(qiáng),每秒解析達(dá)到數(shù)百萬,還可達(dá)到秒級的更新,更新后隨時生效,還有監(jiān)控原始server的功能,原始server還可通過它做LB完成health check

DNS本身也要分區(qū)域(如北方電信、南方聯(lián)通等),訪問網(wǎng)站不只是獲取網(wǎng)頁的時間還有DNS解析返回,再請求資源,若DNS很慢也影響用戶體驗

bind dlz+{mysql,pgsql,oracke,DB4}http://bind-dlz.sourceforge.net/,將用戶的資源放到數(shù)據(jù)庫中會很慢,如果不是做公共dns server僅為自己公司解析可放在file中,dns啟動時會直接加載至內(nèi)存中;一般使用bind即可(bind本身就提供了智能解析(view)

注:DB4,基于hash編碼的數(shù)據(jù)庫

?

varnishhttps://www.varnish-cache.org/):

互聯(lián)網(wǎng)早期的cache serversquid(烏賊,章魚,八爪魚)

varnish本身是reverse proxy server同時又提供cache功能,配置簡單、接口簡單、監(jiān)控接口豐富,由于采用新架構(gòu)設(shè)計,之后擴(kuò)展要比squid容易,功能與nginx近似,但varnish在創(chuàng)建連接、維持連接的能力比nginx差遠(yuǎn)了,通常使用nginx+varnishnginx處理連接,varnish專門負(fù)責(zé)緩存),也可nginx+squidsquid功能很強(qiáng)大,支持正向代理、反向代理、ACL、支持內(nèi)容分發(fā)協(xié)議,特性非常豐富,配置復(fù)雜)

varnish盡可能利用時下最新的技術(shù),時下最好的軟件設(shè)計結(jié)構(gòu),時下安全體系的諸多經(jīng)驗,站在前人的基礎(chǔ)上設(shè)計的,但squid也寶刀未老,早期淘寶在前端的cache server就使用100多臺server創(chuàng)建的squid cache cluster,優(yōu)化后的命中率達(dá)到97%(純靜態(tài)內(nèi)容),做到這地步要對站點的靜態(tài)資源做好篩選(要將哪些內(nèi)容放到cache server上)

squid?VS? varnish(同httpd? VS?nginx

?

?

varnish architecture(與nginx類似,是master/slave架構(gòu)):

主進(jìn)程(管理進(jìn)程management,負(fù)責(zé)配置文件分析、裝載新配置文件、啟動子進(jìn)程;Management進(jìn)程主要實現(xiàn)應(yīng)用新的配置(若檢測到VCL配置文件有語法錯誤則拒絕編譯,避免子進(jìn)程加載錯誤配置導(dǎo)致緩存崩潰)、編譯VCL、監(jiān)控varnish、初始化varnish以及提供一個命令行接口等。Management進(jìn)程會每隔幾秒鐘探測一下Child進(jìn)程以判斷其是否正常運(yùn)行,如果在指定的時長內(nèi)未得到Child進(jìn)程的回應(yīng),Management將會重啟此Child進(jìn)程):

CLI interface(通過命令行接口與命令行的控制指令進(jìn)行交互)

telnet interface(為安全這種方式已很少用,可用專用的client工具varnishadm連到管理進(jìn)程完成啟動停止等)

web interfaceGUI接口)

?

子進(jìn)程(child|cache進(jìn)程,child提供服務(wù)、發(fā)送至后端并響應(yīng)用戶請求;cache緩存管理的進(jìn)程,緩存清理、緩存有效期限檢查等):

command line

storage/hashing(存儲緩存,用key定義查找標(biāo)準(zhǔn),將key放在某個backet中實現(xiàn)O(1)的查找,查找到的內(nèi)容即是value

log/statsvarnish的日志不是保存在file中,有磁盤IO,而是在內(nèi)存中,啟動服務(wù)時就明確說明用多大空間保存日志,空間占完后將覆蓋之前的文件繼續(xù)使用,一圈圈輪著使用,日志記錄有client的請求數(shù)、client請求命中數(shù)、沒命中數(shù)、server運(yùn)行多長時間等;可用工具將日志導(dǎo)出查看,如varnishlog等)

accept(接收用戶請求并將請求轉(zhuǎn)至workerthreads上)

backend communication(后端主機(jī)通信)

worker threads(一個線程響應(yīng)多個請求,child進(jìn)程會為每個會話啟動一個worker線程,因此,在高并發(fā)的場景中可能會出現(xiàn)數(shù)百個worker線程甚至更多)

object expiry(從緩存中清理過期內(nèi)容)

?

varnish的主進(jìn)程management只有一個,child進(jìn)程由多個不同的線程組成,varnish總體連接數(shù)在大于5000時性能會下降,一般不會讓工作線程接受太多連接,性能有上限,假設(shè)有10varnish server每個平均接受5000個連接,那10個就能接受5W個了,前端nignx已處理一些請求再將多個請求轉(zhuǎn)到varnish server上,這種架構(gòu)已達(dá)到億級或十億級PV

?

VCLvarnish configuration language),底層用C開發(fā),完全兼容C語言,提供編程接口,要寫程序提供配置文件,用VCL開發(fā)程序時指明varnish怎么工作(哪些內(nèi)容緩存、哪些內(nèi)容不緩存、哪些內(nèi)容不通過緩存來取等),為使VCL開發(fā)出的程序更加高效,要將其編譯為二進(jìn)制格式(使用VCL編寫好配置文件后,使用gcc編譯)

配置文件編譯完后生成共享模塊,child/cache如何工作就取決于共享模塊中的定義,二進(jìn)制格式的配置文件被子進(jìn)程child/cache讀取,child從后端server取得內(nèi)容后要緩存在本地,由storage/hashing子模塊將緩存內(nèi)容存下來

?

VCL工作在varnish的狀態(tài)引擎state engine上,在varnish內(nèi)部有多個state engine(同iptablesnetfilter框架中的幾個接口類似(勾子函數(shù)),若某個報文不經(jīng)過這幾個勾子函數(shù)將檢測不到,所以這幾個勾子要放在報文必經(jīng)的路口,使得報文必須要經(jīng)過這其中1個或幾個勾子,在這些勾子上就能實現(xiàn)管理)

如圖:橢圓表示state engine(又叫domain),菱形表示檢查機(jī)制(條件判斷)

vcl_recv(第一個入口的state engine,請求報文接進(jìn)來)

vcl_recv-->vcl_pass(例如是動態(tài)內(nèi)容或用戶的私有內(nèi)容直接到后端去取)

vcl_recv-->vcl_hash(根據(jù)key來查找本地緩存)

vcl_recv-->vcl_pipe(不對client進(jìn)行檢查或做出任何操作,而是在client和后端server之間建立專用pipe,并直接將數(shù)據(jù)在二者之間傳送;keep-alive連接中后續(xù)傳送的數(shù)據(jù)也都通過此管道進(jìn)行直接傳送,并不會出現(xiàn)在任何日志中)

vcl_hit-->vcl_deliver(命中后交給vcl_deliver再投遞給client

vcl_hit-->vcl_pass(在管理的CLI下,命中后將緩存清除)

vcl_pass(可對三個state enginedomain)過來的報文統(tǒng)一處理(vcl_recvvcl_hit、vcl_miss),統(tǒng)一到一個反向操作上(例如命中后不去找緩存而是找vcl_fetch繼而找后端server))

vcl_fetch(到這個domain上就要聯(lián)系后端server,這個域上會定義一些語句來判定哪些內(nèi)容緩存哪些不緩存(如authcookie有關(guān)的字串就不緩存))

路線:

vcl_recv-->vcl_hash-->vcl_hit-->vcl_deliver

vcl_recv-->vcl_hash-->vcl_miss-->vcl_fetch-->vcl_deliver

vcl_recv-->vcl_pass-->vcl_fetch-->vcl_vcl_deliver

?

每個state engine中定義一堆條件判斷(如定義vcl_recv在什么情況下去找vcl_hash,在什么情況下找vcl_pass,例如某些client不允許訪問、某些client查找哪些資源、哪些資源不允許緩存等,通過定義各種條件判斷指揮著到下一個數(shù)據(jù)流或state engine

每個state engine又被叫作domain,每個domain都有可執(zhí)行的指令(如netfilter上各種鏈上的規(guī)則,每個鏈所接受的規(guī)則是不一樣的,處理完成有可能還要經(jīng)過下個鏈,有可能直接返回),而對varnish的每個state engine都要走向下一步(除vcl_deliver

VCL編程,所寫的代碼,只對當(dāng)前state engine生效(可理解為函數(shù),函數(shù)執(zhí)行完有返回值),返回的是什么就決定下一步怎么走,若return返回hash就找vcl_hash,若return pass則找vcl_pass,到底返回哪個要做寫一大堆的if語句做出判斷

以上涉及到編程,程序中策略寫的好,緩存命中率就高

?

VCL語法:

1)注釋:///*(單選注釋);*/(多行注釋)

2sub $name(定義函數(shù),subroutine子例程)

3)不支持循環(huán),有內(nèi)置變量(內(nèi)置變量應(yīng)用位置獨特,有的變量應(yīng)用在前半段(請求報文首部),有的變量應(yīng)用在后半段(響應(yīng)報文首部))

4)使用終止語句,沒有返回值

5)域?qū)S?#xff08;每個state engine定義自己的程序)

6)操作符(=賦值、==等值比較、~模式匹配、!&&||

VCL的函數(shù)不接受參數(shù)且沒有返回值,因此并非真正意義的函數(shù),這也限定了VCL內(nèi)部的數(shù)據(jù)傳遞只能隱藏在http首部內(nèi)部進(jìn)行,VCLreturn語句用于將控制權(quán)從VCL狀態(tài)引擎返回給varnish,而非默認(rèn)函數(shù),這就是VCL只有終止語句沒有返回值的原因;同時對于每個域來說,可定義一個或多個終止語句,告訴varnish下一步采取何種操作(如查詢緩存或不查詢緩存等)

?

VCL的內(nèi)置函數(shù):

regsub(str,regex,sub)

regsuball(str,regex,sub)

以上兩項實現(xiàn)替換(substituend,用于將regexp匹配到的str替換為sub,相當(dāng)于nginxrewrite,而regsuball相當(dāng)于加了修飾符/g的替換)

ban(expression)

ban_url(regex)

purge

以上三項實現(xiàn)緩存清理,給某個緩存對象設(shè)置柵欄,阻止對其使用,先放到禁止列表中再禁止使用,purge僅允許有權(quán)限經(jīng)過認(rèn)證的管理員使用

hash_data(str)(取得一個字符串的hash值,若這個字符串是緩存中的某個key,則可判定緩存中是否有)

return()(當(dāng)某個域運(yùn)行結(jié)束時將控制權(quán)返回給varnish,并指示下一步的動作,可以返回的指令有:lookup,pass,pipe,hit_for_pass,fetch,deliver,hash等),特定域只能返回特定的指令)

return(restart)(重新運(yùn)行整個VCL,即從vcl_recv開始進(jìn)行處理,每一次重啟都會增加req.restarts變量中的值,而max_restarts參數(shù)則用于限定最大重啟次數(shù),例如vcl_recv-->vcl_hash-->vcl_miss-->vcl_pass-->restart-->vcl_recv……,未命中可不讓去vcl_fetch,讓重啟,在vcl_pass中寫入regsub(……)url重寫rewrite,再在vcl_recv上跑一遍,有可能就命中了,若寫了錯誤的rewrite將導(dǎo)致死循環(huán),restart判定若超過5次就退出直接向client返回error

注:vcl_deliver要能在client請求內(nèi)容不存在時或restart超過5次退出時,返回錯誤頁面,varnish-server要能生成錯誤響應(yīng)頁(如404,502等)

?

?

?

?

?

以上是學(xué)習(xí)《馬哥運(yùn)維課程》做的筆記。


轉(zhuǎn)載于:https://blog.51cto.com/jowin/1739282

總結(jié)

以上是生活随笔為你收集整理的Linux运维 第三阶段 (十八) varnish的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

99热官网| 日韩国产精品久久久久久亚洲 | 国产aaa免费视频 | 五月天综合网站 | 在线观看视频一区二区 | 黄色精品一区 | 激情婷婷在线 | 中文字幕 在线看 | 精品96久久久久久中文字幕无 | 亚洲精选视频免费看 | 五月激情六月丁香 | 色综合久久88色综合天天人守婷 | 精品在线一区二区 | 国产精品 日韩 欧美 | 麻豆传媒视频在线免费观看 | 91麻豆精品国产91 | 欧美福利片在线观看 | 国产精品美乳一区二区免费 | 日日操狠狠干 | 久久伊人综合 | 午夜av电影院 | 成人a级网站 | 免费久久网站 | 精品国产欧美一区二区 | 亚洲一区二区高潮无套美女 | 国产在线更新 | 国产在线免费观看 | 久久久久久久久久久久久9999 | 国产视频在线观看一区 | 国产一区二区三区免费观看视频 | 国产成人一区二区三区 | 九九免费在线观看视频 | 精品国产一区二区三区久久久蜜臀 | 亚洲精品久久激情国产片 | 香蕉视频网站在线观看 | 国产日韩欧美在线观看视频 | 综合影视 | 97精品国产97久久久久久免费 | 国产精品免费成人 | 午夜精品一区二区三区可下载 | 成人禁用看黄a在线 | 91成熟丰满女人少妇 | 欧美一级性生活 | 久久狠狠婷婷 | 一区二区三区影院 | 最近中文字幕高清字幕免费mv | 国产中文字幕精品 | 久久综合九色综合欧美就去吻 | 四虎成人精品永久免费av九九 | 日韩一二三区不卡 | 99国产在线视频 | 久久99精品久久久久久三级 | 久久成人国产精品 | 最新国产在线视频 | 91精品第一页 | 97国产精品亚洲精品 | 免费视频网| 在线精品亚洲一区二区 | 久久九九久久九九 | 97精品在线观看 | 91精品国产91热久久久做人人 | 黄色a三级| 99精品国自产在线 | 99在线观看| 99这里都是精品 | 国产免费人成xvideos视频 | 成人亚洲免费 | 五月天综合色 | 日p视频 | 天天干天天搞天天射 | 美女黄频在线观看 | 九九九九九精品 | 亚洲成人黄色在线观看 | 香蕉在线视频观看 | 精品中文字幕在线播放 | 日韩久久精品一区二区 | 精品国产区在线 | www五月天婷婷 | 亚洲国产成人精品在线 | 精品一区二区三区四区在线 | 日韩免费av网址 | 91视频这里只有精品 | 在线午夜av | 精品视频在线免费 | 国产99在线播放 | 久久久亚洲影院 | 特级免费毛片 | 国产精品正在播放 | 国产日韩在线一区 | 久久综合九色九九 | 久草网视频 | 992tv在线观看网站 | 中文字幕精品三级久久久 | 日本最新中文字幕 | 亚洲免费成人av电影 | 日韩天天操 | 最近av在线| 激情五月婷婷丁香 | 精品一区av | 亚洲第一久久久 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 91视频在线免费看 | 久久久久久久国产精品视频 | 免费一级片在线观看 | 一区二区三区动漫 | 国产成人av综合色 | 97超碰在线免费 | 国产网红在线观看 | 日韩精品视频一二三 | 美女免费黄视频网站 | 久久精品一区二区三 | 综合国产在线 | 亚洲精品国产精品国自 | 欧美日韩国产二区三区 | 99精品国产99久久久久久97 | 黄色av一区二区三区 | 麻豆视频免费入口 | 麻豆一二 | 天天干天天拍 | 欧美一级性 | 日韩久久精品一区二区 | 欧美激情h | 天天天天射 | 精品国产欧美 | 国产色视频网站2 | 一区二区三区在线影院 | 在线视频你懂得 | 玖玖在线观看视频 | 444av| 久久五月网 | 久99久精品视频免费观看 | 日韩在线播放视频 | 国产精品视频全国免费观看 | 亚洲欧美日韩中文在线 | 黄色小说免费在线观看 | 亚洲最大av网站 | 亚洲日本精品视频 | av最新资源| 久久在线免费观看 | 99在线视频精品 | 久草视频免费看 | 国产一级精品绿帽视频 | 国产在线播放一区 | 视频国产 | 最近更新的中文字幕 | 综合久久五月天 | 日韩在线观看免费 | 五月天婷婷丁香花 | 搡bbbb搡bbb视频 | 久久激情五月婷婷 | 黄网av在线 | 亚洲精品美女久久17c | 国产精品一区二区三区免费看 | 久久免费公开视频 | 欧美韩日精品 | 在线播放 日韩专区 | 欧美一级电影 | 丁香花中文在线免费观看 | 欧美一级片在线观看视频 | 色婷婷在线播放 | 91精品免费在线观看 | 天堂久久电影网 | 国产免费视频一区二区裸体 | 色香com. | 亚洲精品在线观看av | 91久久国产综合精品女同国语 | 四虎永久视频 | 日韩伦理片一区二区三区 | 91av视频网站| 久久不卡日韩美女 | www.一区二区三区 | 亚洲精品资源 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 亚洲国产精品电影 | 国产日韩中文在线 | 国产精品久久久久久a | 亚洲欧洲在线视频 | 在线 高清 中文字幕 | 91九色网址 | 久久99精品久久久久久清纯直播 | 91福利视频免费观看 | 在线观看视频精品 | 亚洲电影影音先锋 | 国产精品久久综合 | 中文字幕一区二区三区精华液 | 国产自在线 | 91豆花在线观看 | 国产精品系列在线观看 | 色就是色综合 | 97超碰福利久久精品 | 日韩精品久久一区二区 | 亚洲aⅴ乱码精品成人区 | 久久精品一区二区三区视频 | 开心综合网 | 国产亚洲精品久久久久久移动网络 | 天天天干夜夜夜操 | 欧美在线视频一区二区三区 | 久久视频一区二区 | 91精品系列 | 国产精品久久久久久久久久不蜜月 | 色综合天天视频在线观看 | 超碰97中文 | 久久成 | 国内免费久久久久久久久久久 | 天天做天天射 | 99久久综合国产精品二区 | 涩涩网站免费 | 国产黄色网 | 久久精品一区二区三区中文字幕 | 一本色道久久综合亚洲二区三区 | 中文字幕中文字幕在线中文字幕三区 | 久久久香蕉视频 | 天天爱天天草 | 激情伊人五月天久久综合 | 2019中文字幕第一页 | 福利电影一区二区 | 五月激情视频 | 99精品国产免费久久久久久下载 | 日韩在线观看网站 | 亚洲一区视频在线播放 | 亚洲黄色在线观看 | 麻豆免费精品视频 | 韩国在线视频一区 | 欧美日韩亚洲在线 | 天天操天天操天天爽 | 超碰av在线 | 精品国产午夜 | 九九热有精品 | 在线看不卡av | 美女网站在线 | 狠狠色狠狠色终合网 | 成人黄性视频 | 一区二区激情视频 | 九九一级片 | 超碰人人乐 | 成年人免费观看在线视频 | 亚州av网站| 国产成人精品免高潮在线观看 | 日韩在线视频不卡 | 香蕉视频网站在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 欧美性色网站 | 亚洲毛片一区二区三区 | 亚洲四虎在线 | 日韩精品在线免费观看 | 国产一级特黄电影 | 色婷婷激情五月 | 色婷婷综合成人av | 免费成人在线观看 | 丁香激情网 | 中文字幕第一页av | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产精品麻豆欧美日韩ww | 精品国产伦一区二区三区观看方式 | www国产亚洲精品久久麻豆 | 午夜精品一区二区三区免费视频 | 国产在线91精品 | 成人午夜电影网 | 天天插综合 | 视色网站| 欧美日韩视频在线观看一区二区 | 日本aaa在线观看 | 国产一级免费播放 | 激情婷婷久久 | 国产成人精品久久二区二区 | 国产午夜一级毛片 | 97电影在线 | 国产精品久久久久久久久久ktv | 国产精品一区二区久久精品爱涩 | 91av网址 | 中文国产字幕在线观看 | 91看片淫黄大片91 | 五月婷婷深开心 | 成人免费一区二区三区在线观看 | 久久伊人精品一区二区三区 | 国产精品videossex国产高清 | www免费网站在线观看 | 黄色中文字幕在线 | www.五月婷 | 在线免费观看国产 | 免费a视频| 九九九九九九精品任你躁 | 中文av网站 | 天天操天天草 | 国产v在线观看 | 最新av免费在线观看 | 亚洲97在线 | 中文字幕av全部资源www中文字幕在线观看 | 四虎免费在线观看视频 | 久久天天躁狠狠躁亚洲综合公司 | 色a综合| 一区二区三区 中文字幕 | 99久久精品一区二区成人 | 国产亚洲免费的视频看 | 精品一区二三区 | 欧美日韩在线免费视频 | 天天色天天射天天干 | 97超碰在线视 | 欧美国产不卡 | 久久99在线观看 | 国际精品久久久久 | 免费看搞黄视频网站 | 国产精品一区免费在线观看 | 激情久久久久久久久久久久久久久久 | 亚洲不卡123| 成人精品电影 | 91av视频免费观看 | 国产精品24小时在线观看 | 一区二区中文字幕在线 | 爱射综合| 高清中文字幕 | 欧美另类重口 | 99热在 | 麻豆国产露脸在线观看 | 狠狠色狠狠色合久久伊人 | 国产超碰97| 韩日电影在线免费看 | 免费观看的av网站 | 精品国产一区二区三区久久久 | 91香蕉视频黄色 | 在线观看完整版免费 | 日韩欧美高清一区二区 | 精品成人a区在线观看 | 精品视频久久久 | 人人澡超碰碰 | 久草综合视频 | 色资源中文字幕 | 精品99在线 | 久久久久久欧美二区电影网 | 最近中文字幕大全 | av片中文字幕 | 亚洲最大av | av久久在线 | 国产又黄又硬又爽 | 久久99精品久久只有精品 | 免费在线观看中文字幕 | 免费在线观看不卡av | 国产无套精品久久久久久 | a一片一级 | 18国产精品福利片久久婷 | av天天色 | 婷婷在线网 | 免费观看性生活大片3 | 久久久久久久久久免费视频 | 国产精品日韩久久久久 | 久久国产精品视频观看 | 中文字幕色综合网 | 天天色天天色 | 免费午夜av | 99婷婷狠狠成为人免费视频 | 色婷婷在线播放 | 中文字幕一区二区在线观看 | 最近免费中文字幕大全高清10 | 91精品久久久久 | 婷婷精品国产欧美精品亚洲人人爽 | 欧美日韩久 | 高清精品在线 | 日韩色视频在线观看 | 九月婷婷综合网 | 亚洲免费视频在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 成人在线观看日韩 | 黄色aa久久| 国产精品无 | 欧美色综合久久 | 国产香蕉97碰碰碰视频在线观看 | 日韩在线 一区二区 | 国产午夜在线 | 911国产精品 | 亚洲在线视频播放 | 97福利社| 狠狠色狠狠色综合日日小说 | 成人激情开心网 | 中文字幕久久亚洲 | 国产 日韩 欧美 在线 | 成人在线观看资源 | 久久深夜福利免费观看 | 美州a亚洲一视本频v色道 | 国产在线观看一区 | 国产精品美女久久久久久久久 | 色综合久久精品 | www欧美xxxx| 国产 日韩 在线 亚洲 字幕 中文 | 精品国产亚洲一区二区麻豆 | 国产福利精品在线观看 | 97视频网址 | 九九免费在线看完整版 | 伊人天堂久久 | 日韩精选在线观看 | 日韩综合色 | 天天摸夜夜添 | 在线观看日韩精品 | 国产黄在线 | 国产69精品久久久久久久久久 | 日韩免费在线一区 | 看片的网址 | 91精品天码美女少妇 | 免费h在线观看 | 五月天综合色 | av中文字幕在线播放 | 五月综合色 | av看片网 | 日韩一区二区三区在线看 | 蜜臀av性久久久久av蜜臀妖精 | 国产日产精品一区二区三区四区 | 成人av高清在线观看 | 香蕉视频在线网站 | 国产乱码精品一区二区蜜臀 | 高清av中文在线字幕观看1 | 人人干人人做 | 亚洲女人天堂成人av在线 | 久久国产精品久久精品 | 久久这里只有精品9 | 亚洲黄色在线免费观看 | 午夜精品福利影院 | 色婷婷av一区二 | 精品国产免费一区二区三区五区 | 免费精品视频在线观看 | 欧美一级片 | 视频一区二区三区视频 | 久99久视频| 国产精品美女视频 | 免费在线观看一区 | 中文字幕 国产视频 | 天天操人人干 | 国产成人一区二区三区久久精品 | 天天天天色综合 | 美女网站视频色 | 深夜国产福利 | 99综合电影在线视频 | 免费a视频在线观看 | 久久免费视频3 | 在线免费国产 | 97精品欧美91久久久久久 | 99热这里只有精品1 av中文字幕日韩 | 玖玖在线免费视频 | 992tv在线观看网站 | 少妇bbb| 国产精品色 | 国产日产欧美在线观看 | 伊人夜夜 | 久久精品视频99 | 婷婷色影院 | 日韩欧美一区二区在线观看 | 深夜免费福利网站 | 噜噜色官网 | 欧美9999| 在线视频 精品 | 国产一区二区影院 | 亚洲精品网页 | 国产成人精品免高潮在线观看 | 十八岁以下禁止观看的1000个网站 | 午夜精品久久久久99热app | 久久99久国产精品黄毛片入口 | 日本夜夜草视频网站 | 欧美午夜a | 日本精品一 | 九九九热精品免费视频观看 | 久久99电影| 人人爽人人爽av | 亚洲精品国产日韩 | 国产精品久久艹 | 色播五月婷婷 | 国产在线v| 狠狠色伊人亚洲综合网站色 | 人人爽影院 | 成人性生交视频 | 啪啪小视频网站 | 亚洲精品乱码白浆高清久久久久久 | 欧美成人精品欧美一级乱黄 | 欧美精品乱码久久久久久 | 亚洲精品成人网 | 国产精品久久久久三级 | 日日夜夜噜噜噜 | 国产精品一区二区三区电影 | 激情婷婷久久 | 久久99精品波多结衣一区 | 亚洲精品xxxx | 精品久久久久国产免费第一页 | 国产精品免费视频一区二区 | 高潮毛片无遮挡高清免费 | 99久久婷婷国产一区二区三区 | 国产超碰97| 69国产成人综合久久精品欧美 | 国产经典av | 亚洲女欲精品久久久久久久18 | 久久久久久久久久免费 | 最新日韩中文字幕 | 国产精品h在线观看 | 免费看91的网站 | 欧美俄罗斯性视频 | www.国产在线观看 | 天天爱天天操 | 伊人婷婷色 | 在线日韩视频 | 亚洲最新av网站 | 丁香婷婷激情国产高清秒播 | 69中文字幕 | 天天天操操操 | 在线观看自拍 | 国产免费成人av | 视频一区二区国产 | 最近中文字幕国语免费av | 99精品国产一区二区三区麻豆 | 亚洲午夜久久久综合37日本 | 国产日韩精品一区二区在线观看播放 | 亚洲午夜久久久影院 | www.狠狠色 | 99热这里有精品 | www五月天婷婷 | 国产r级在线观看 | 日本三级不卡视频 | 丝袜美腿亚洲综合 | 亚洲激情在线播放 | 成人亚洲免费 | 日日夜夜狠狠操 | 精品日本视频 | 亚洲天堂精品视频 | 激情影院在线 | 69精品在线 | 久久综合福利 | 91麻豆高清视频 | 欧美国产日韩一区 | 99免在线观看免费视频高清 | 午夜美女视频 | 欧美国产一区二区 | 狠狠色丁香久久婷婷综合_中 | 免费观看www小视频的软件 | 欧美日韩在线观看视频 | 天堂av在线网址 | 91麻豆精品 | 免费国产在线观看 | 黄色软件在线观看 | 国产无遮挡又黄又爽馒头漫画 | 一区二区精品在线视频 | 久久视频在线观看免费 | 成人香蕉视频 | 免费看国产精品 | 免费一级特黄毛大片 | 中文字幕视频观看 | 久久精品久久精品久久 | 国产一区二区久久精品 | 五月天婷婷免费视频 | 欧美作爱视频 | 中文字幕在线一区观看 | 成人亚洲精品久久久久 | 亚洲自拍偷拍色图 | 精品96久久久久久中文字幕无 | 国产黄色资源 | 欧美性色19p| 天天色中文 | 久久久五月婷婷 | 日韩在线观看视频一区二区三区 | 夜夜操天天摸 | 久久综合色综合88 | 激情五月婷婷综合网 | 久久国产午夜精品理论片最新版本 | 亚洲无吗av | 成人aaa毛片 | 久草视频在线新免费 | 成人免费av电影 | 天天色天天干天天色 | 米奇狠狠狠888 | www.色的| 在线91观看 | 午夜视频在线观看一区二区三区 | 六月丁香激情网 | 国产在线一区二区三区播放 | a在线观看国产 | 天天天干天天天操 | a级片网站 | 在线成人欧美 | 国产精品原创av片国产免费 | 在线国产福利 | 水蜜桃亚洲一二三四在线 | 久久av在线播放 | 亚洲成人黄色av | 精品福利网| 国产黄色a | 精品视频在线免费 | 激情伊人五月天久久综合 | 免费福利在线观看 | 天天综合成人网 | 午夜精品一区二区三区在线观看 | 又爽又黄又刺激的视频 | 国产裸体永久免费视频网站 | 免费av看片 | 久久资源在线 | 成人久久亚洲 | av在线网站大全 | 最新国产精品久久精品 | av电影中文字幕在线观看 | 国产手机在线观看视频 | 日日夜夜国产 | 91爱爱免费观看 | 欧美日韩中 | 久久精品国产免费看久久精品 | 在线视频观看你懂的 | 99精品国产免费久久 | 国产精品免费久久久久久 | 日韩欧美网址 | 久久y| 日韩一级精品 | 亚洲欧美偷拍另类 | 久久久国产在线视频 | 中文国产字幕在线观看 | 99精品偷拍视频一区二区三区 | 婷婷国产一区二区三区 | 久久国产精品影片 | 首页av在线| 欧美国产一区在线 | 最新中文在线视频 | 97超碰人人澡人人爱学生 | 日韩欧美精品在线观看视频 | 国产精品视频最多的网站 | 国产成人一区二区在线观看 | 免费观看av | 国产视频精品视频 | 国产成人黄色在线 | 欧美日韩国产精品一区二区 | 99精品免费久久久久久久久 | 成人午夜精品福利免费 | 菠萝菠萝在线精品视频 | 九九九九九九精品任你躁 | 亚洲一区美女视频在线观看免费 | 黄色三级网站在线观看 | 超碰在线人 | 国产破处精品 | av电影免费观看 | 日韩激情视频在线 | 中文字幕一区二区三区在线视频 | 99爱视频 | 日本精品视频网站 | 欧美日韩国产一区二区在线观看 | 五月激情综合婷婷 | 亚洲精品白浆高清久久久久久 | 久草资源在线观看 | 欧美日韩在线播放 | 黄色片免费电影 | 精品久久久久免费极品大片 | 日韩免费一区二区三区 | www.97视频| 欧美日韩视频在线 | 欧美日韩一区二区在线 | 永久免费观看视频 | 成人av资源| 精品国产一区二区三区久久久久久 | 探花视频在线观看+在线播放 | 久久99精品久久只有精品 | 久精品一区| 国产高清在线a视频大全 | 欧美一二区在线 | 天天爽天天碰狠狠添 | 怡红院成人在线 | 国产视| 天天爱天天插 | 99久久婷婷| 亚洲人人射 | 日本激情视频中文字幕 | 中文字幕亚洲国产 | 天天性天天草 | 亚洲黄色软件 | 国产精品久久99综合免费观看尤物 | 亚洲精品一区二区三区四区高清 | 五月婷婷另类国产 | 日韩久久精品一区二区三区 | www.com黄 | 黄色毛片在线观看 | 久久理论影院 | 国产成人一二三 | 日本久久精 | 丁香婷婷射 | 99热免费在线 | 91成人在线网站 | 超碰人人国产 | 久久天堂亚洲 | 精品国产综合区久久久久久 | 久久精品视频中文字幕 | 国产手机视频精品 | 国产男女爽爽爽免费视频 | 日本精品中文字幕在线观看 | www色综合| 五月天亚洲婷婷 | 亚洲一区二区高潮无套美女 | 欧美午夜精品久久久久久浪潮 | 日本在线观看视频一区 | 九九免费观看视频 | 亚洲视频免费视频 | 国产精品久久久av | 91三级视频 | 成年人免费观看在线视频 | 久久1电影院| 国产另类av | 久草影视在线观看 | 在线免费黄色av | 免费高清在线观看成人 | 人成午夜视频 | 日本三级在线观看中文字 | 国产免费一区二区三区最新 | 欧美日韩高清国产 | 国产一区在线视频 | 久久不色 | 91在线入口 | 91亚洲视频在线观看 | 在线视频18在线视频4k | 久久婷婷色综合 | 天天爱综合 | 小草av在线播放 | 久久精品亚洲综合专区 | 国产在线一区二区 | 97成人免费视频 | 精品av网站 | 六月激情 | 97国产大学生情侣酒店的特点 | 欧美巨乳波霸 | av成人在线网站 | 中文字幕色站 | 伊人五月 | 干干操操 | 日韩精品欧美专区 | bbbb操bbbb| 亚洲一二三区精品 | 中文字幕一区二区三区四区久久 | 久久在线观看视频 | 国产一区二区综合 | 色综合婷婷久久 | 欧美爽爽爽| 日韩欧美电影在线观看 | 一级特黄aaa大片在线观看 | 日韩网站在线看片你懂的 | 中文字幕亚洲五码 | 日韩av片在线 | 高清久久久久久 | 中文字幕黄色av | 日韩特黄一级欧美毛片特黄 | 国产视频亚洲精品 | 久久三级毛片 | 99热在线免费观看 | 韩国视频一区二区三区 | 久草网在线视频 | 国产一区二区在线观看视频 | 国产中文字幕视频在线 | 成人在线视频在线观看 | 久久久久免费网 | 91免费高清观看 | 国产成人一区二区三区久久精品 | 美女av电影 | 天天伊人网 | 中文字幕免费国产精品 | 少妇性aaaaaaaaa视频 | 亚洲黄色在线观看 | 特级西西人体444是什么意思 | 天天干,夜夜操 | 成人a级网站 | 欧美国产高清 | 国产在线视频一区二区三区 | 97网在线观看 | 成人午夜剧场在线观看 | 久久久久国产a免费观看rela | 在线成人欧美 | 精品免费国产一区二区三区四区 | 午夜精品一区二区三区视频免费看 | 在线视频在线观看 | 免费福利片2019潦草影视午夜 | 久久香蕉电影网 | 国产一级二级三级视频 | 81国产精品久久久久久久久久 | 夜夜躁天天躁很躁波 | 天天综合天天做 | 中文字幕在线观看91 | 一区二区精品久久 | 国产精品午夜在线 | 99久热在线精品视频观看 | 国产精品久久网 | 成人a级网站| 五月天婷婷综合 | 超碰在线成人 | 精品人人爽 | 久久99精品国产91久久来源 | 青青看片 | 91亚洲网站 | 成人 国产 在线 | 免费在线国产精品 | 国产视频91在线 | 亚洲h视频在线 | 亚洲国产av精品毛片鲁大师 | 色多多在线观看 | 欧美一区二视频在线免费观看 | 中文字幕亚洲综合久久五月天色无吗'' | 成人影片在线免费观看 | 99精品视频免费观看 | 99久久99久久| 91爱爱免费观看 | 亚洲精品综合在线 | 国产一区黄色 | 免费国产一区二区视频 | 成人四虎 | 日本夜夜草视频网站 | 婷婷精品国产欧美精品亚洲人人爽 | 亚洲女在线| 97碰在线 | 精品久久国产 | 色亚洲网 | 91探花在线视频 | 久久久wwww | 91人人澡人人爽人人精品 | 国产精品麻豆果冻传媒在线播放 | 中文字幕美女免费在线 | 免费特级黄毛片 | 1024手机基地在线观看 | 日韩免费一区二区三区 | 波多野结衣综合网 | 黄色一级动作片 | 超碰在线天天 | 久久夜色精品国产欧美乱极品 | 日本丰满少妇免费一区 | 97国产精品亚洲精品 | 91亚洲精品乱码久久久久久蜜桃 | 日本在线中文 | 免费视频成人 | 天天天天色综合 | 日韩电影在线看 | 天天草天天 | 色综合天天综合网国产成人网 | 黄色精品久久 | 国产在线观看,日本 | 免费看色网站 | 国产婷婷 | 四虎影视精品成人 | 亚洲第二色 | 国产麻豆精品免费视频 | 国产综合在线视频 | 久久综合中文字幕 | 最新真实国产在线视频 | 亚洲乱码久久 | 国产精品久久久久影院日本 | 九九热有精品 | 欧美日韩性 | 日日爱夜夜爱 | a级免费观看 | 国产一区二区精品 | 成人在线视频你懂的 | 国产999精品久久久影片官网 | 成年人免费观看国产 | 欧美小视频在线观看 | 欧美性色xo影院 | 免费看片日韩 | 97在线观看免费观看 | 91麻豆文化传媒在线观看 | 成人午夜精品福利免费 | 国产成人综| 欧美成人999| 区一区二区三区中文字幕 | 美国三级黄色大片 | 美女视频黄是免费的 | 亚州欧美视频 | 国产成人av电影 | 午夜精品一区二区三区免费 | 午夜aaaa| 2021国产在线视频 | 色多多视频在线 | 国产69久久 | 国产99久久久精品视频 | 国产色视频网站 | 在线观看mv的中文字幕网站 | 亚洲自拍av在线 | 97电院网手机版 | 免费福利在线观看 | 黄视频网站大全 | 久久国产精品99国产 | 天天干天天干天天操 | 亚洲综合成人在线 | 一级片免费观看视频 | 精品国产一区二区三区日日嗨 | 日韩精品 在线视频 | 午夜精品久久久久久久99水蜜桃 | 亚洲精品影院在线观看 | 天天干天天怕 | 久久国产免 | 中文字幕 国产 一区 | 在线久草视频 | 中文字幕一区av | 成人影片在线免费观看 | 九九久久成人 | 91av电影在线观看 | 日韩理论影院 | 久久久久国产一区二区三区四区 | 国产精品美女久久久久久久久久久 | 狠狠操天天射 | 国产精品久久久久久久婷婷 | 精品999久久久 | 国产成人一区二区三区 | 黄色aaaaa | 日韩激情免费视频 | 亚洲最大免费成人网 | 色综合天天色综合 | 丁香六月婷婷综合 | 狠狠操91| 成人av在线直播 | 亚洲激精日韩激精欧美精品 | 日本精品久久久一区二区三区 | 国产福利中文字幕 | 国产 日韩 欧美 中文 在线播放 | 国产色影院 | 黄色电影在线免费观看 | 亚洲精品videossex少妇 | 色综合久久久久网 | 亚洲精品视频在线观看免费视频 | 黄色视屏免费在线观看 | 日韩欧美高清不卡 | 最新国产精品久久精品 | www国产亚洲精品久久麻豆 | 中文字幕高清在线 | 中文字幕91视频 | 欧洲色吧 | 亚洲三级国产 | 精品国产资源 | 亚洲在线a | 久久国产亚洲 | 欧美日韩精品在线免费观看 | 91理论片午午伦夜理片久久 | av免费电影网站 | 亚洲黄色免费在线 | 中文字幕一区二区三区精华液 | 99精品在线免费 | 久久久福利 | 国产精品美女免费 | 亚洲精品成人在线 | 欧美日韩亚洲第一页 | 久久少妇 | 在线电影中文字幕 | 国产乱码精品一区二区蜜臀 | 日韩欧美一区视频 | 亚洲综合网 | 国产综合片 | 久久www免费人成看片高清 | 国产精品久久久久久久久久久久午夜片 | 97精品国产97久久久久久粉红 | 国产免费观看视频 | 91观看视频 | 91精品一区二区三区久久久久久 | 97香蕉超级碰碰久久免费软件 | 久久成 | 麻豆视频免费入口 | 中文字幕日韩伦理 | 伊人久久影视 | 国产91精品高清一区二区三区 | 日本女人的性生活视频 | 欧美国产日韩在线观看 | 成年人网站免费观看 | 日日射天天射 | 国产乱码精品一区二区三区介绍 | 久草网站| 久久综合免费视频 | 久久精品一二三区 | 久久久久国产成人免费精品免费 | 天天干天天做天天爱 | 久久久久久久久久久网 | 91亚洲激情 | 玖玖精品在线 | 国产成人免费精品 | www.久久色 | 99产精品成人啪免费网站 | 美女视频黄在线观看 | 亚洲精品在 | 免费三及片 | 久久久久久久久久影院 | 综合国产在线 | 欧美日韩国产色综合一二三四 | 欧美污网站 | 色干干| 久久国产露脸精品国产 | 91久久黄色 | 91成人免费看 | 99精品视频免费全部在线 | 午夜精品久久久久久久99 | 久草电影网 | 午夜免费视频网站 | 国产麻豆精品传媒av国产下载 | www.久久久com | 日产乱码一二三区别免费 | 免费人成在线观看网站 | 在线观看免费视频 | 免费一级片在线 | 91在线网址 | 狠狠色丁香久久综合网 | 日日操天天爽 | 成人a级黄色片 | 国产精品18videosex性欧美 | a久久久久 | 日本中文字幕系列 | 精品国产免费人成在线观看 | 五月婷婷婷婷婷 | 日韩午夜电影 | 91看成人| 337p日本大胆噜噜噜噜 | 亚洲精品视频免费在线观看 | 美女啪啪图片 |