- 分布式系統(tǒng)架構(gòu):技術(shù)棧詳解與快速進(jìn)階
- 張程
- 631字
- 2020-08-13 13:45:39
5.4.2 Varnish核心指令之director
director是后端服務(wù)器控制組。前文提到通過backend可定義多個(gè)后端服務(wù)源,那么如何實(shí)現(xiàn)負(fù)載均衡呢?可以通過director來管理,Varnish提供多種算法,具體如下。
- round-robin:采用循環(huán)的方式依次選擇backend。
- random:根據(jù)所設(shè)置的權(quán)重來選擇backend。
- client:根據(jù)請(qǐng)求的客戶端屬性(IP、cookie、session)來選擇backend。
- hash:根據(jù)hash表來選擇。
- dns:根據(jù)DNS解析來選擇。
1. round-robin
round-robin是Varnish輪詢算法,其實(shí)現(xiàn)如代碼清單5-5所示。
代碼清單5-5 Varnish輪詢算法
director zachary round-robin { { .backend=zachary; // 引用已存在的backend } { .backend=resource; // 引用已存在的backend } { .backend={ // 定義新的backend } } }
Varnish輪詢的代理示意如圖5-3所示。

圖5-3 Varnish/director輪詢代理圖
注意
Nginx發(fā)送請(qǐng)求到Varnish后,Varnish會(huì)根據(jù)策略匹配,如已緩存到數(shù)據(jù),直接返回,否則會(huì)通過輪詢方式去后端服務(wù)器獲取數(shù)據(jù)。
2. random
Varnish random算法,如代碼清單5-6所示。
代碼清單5-6 Varnish random算法
director zachary random{ // 隨機(jī) .retries=5; // 查找可用后端次數(shù) { .backend=zachary; // 引用已存在的backend .weight=6; } { .backend=resource; // 引用已存在的backend .weight=2; // 類似Nginx權(quán)重 } { .backend={ // 定義新的backend } .weight=2; } }
Varnish random的代理示意如圖5-4所示。

圖5-4 Varnish/director random的代理圖
3. client
Varnish client算法如代碼清單5-7所示。
代碼清單5-7 Varnish client算法
director zachary client{ { .backend=zachary; // 引用已存在的backend } { .backend=resource; // 引用已存在的backend } { .backend={ // 定義新的backend } } }
4. hash
通過hash算法,Varnish會(huì)選擇后端服務(wù)器中壓力最小的一臺(tái)服務(wù)器來承擔(dān)消費(fèi)。Varnish hash算法如代碼清單5-8所示。
代碼清單5-8 Varnish hash算法
director zachary hash { { .backend=zachary; // 引用已存在的backend } { .backend=resource; // 引用已存在的backend } { .backend={ // 定義新的backend } } }
5. dns
Varnish會(huì)通過DNS策略引用后端服務(wù)器列表。Varnish dns算法如代碼清單5-9所示。
代碼清單5-9 Varnish DNS算法
director zachary dns { .list = { .host_header = "www.zachary.com"; .port = "80"; .connect_timeout = 0.4; "192.168.15.0"/24; # IP段 0~255 "192.168.16.128"/25; } .ttl = 5m; #查找緩存時(shí)間 .suffix = "xxx.com"; #主機(jī)名后綴 }
推薦閱讀
- Web前端開發(fā)簡明教程(HTML+CSS+JavaScript+jQuery)
- 網(wǎng)絡(luò)化聯(lián)合仿真的時(shí)間同步
- TMS320C55x DSP原理及應(yīng)用(第3版)
- 網(wǎng)絡(luò)工程設(shè)計(jì)與系統(tǒng)集成(第2版)
- ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A8版)
- 新型網(wǎng)絡(luò)體系結(jié)構(gòu)
- 計(jì)算思維的結(jié)構(gòu)
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第6版)
- TMS 320 F28x源碼解讀
- GPU高性能運(yùn)算之CUDA
- 計(jì)算機(jī)體系結(jié)構(gòu)基礎(chǔ)(第3版)
- 大模型時(shí)代的基礎(chǔ)架構(gòu):大模型算力中心建設(shè)指南
- 兼容ARM9的軟核處理器設(shè)計(jì):基于FPGA
- 嵌入式系統(tǒng)開發(fā)基礎(chǔ)與實(shí)踐教程
- 計(jì)算機(jī)組成原理(基于x86-64架構(gòu))