CDN加速實現—varnish

CDN介紹:

1 . 對cdn的理解: CDN的全稱是(Content Delivery Network),即內容分發網絡;加速器,反向代理緩存。CDN系統能夠實時的根據網絡流量和各節點的連接,負載狀況以及到用戶的舉例和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上,其目的是使用戶可以就近取得所需內容,解決Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。

2. 基本原理: CDN的基本原理是廣泛采用各種緩存服務器,將這些緩存服務器分布到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求。

3 . 服務模式: 簡單地說,內容分發網絡(CDN)是一個經策略性部署的整體系統,包括分布式存儲、負載均衡、網絡請求的重定向和內容管理 4個要件,
內容管理和全局的網絡流量管理(Traffic Management)是CDN的核心所在。通過用戶就近性和服務器負載的判斷,CDN確保內容以一種極為高效的方式為用戶的請求提供服務 。

內容服務基于緩存服務器,也稱作代理緩存(Surrogate) ,它位于網絡的邊緣,距用戶僅有"一跳"(Single Hop)之遙。同時,代理緩存是內容提供商源服務器(通常位于CDN服務提供商的數據中心)的一個透明鏡像。這樣的架構使得CDN服務提供商能夠代表他們客戶,即內容供應商,向最終用戶提供盡可能好的體驗,而這些用戶是不能容忍請求響應時間有任何延遲的。

varnish介紹:

1 . varnish: 是一款具有高性能的開源http加速器,具有反向代理、緩存功能。
Varnish的功能與Squid服務器相似,都可以用來做HTTP緩存。Squid是從硬盤讀取緩存的數據,而Varnish把數據存放在內存中,直接從讀取內存,避免了頻繁在內存、磁盤中交換文件,所以Varnish要相對更高效,但也有缺點,內存中的緩存在服務器重啟后會丟失。
2 . varnish 如何工作: varnish主要存在兩個進程,manage進程及child進程,
manage 進程:更新配置,vcl 文件編譯,varnish 監控,初始化 varnish 及提供 varnish 管理接口。
child 進程:主要進行請求任務的處理,接受請求等。
child 進程中各線程的處理任務:
accept 線程: 監聽端口,接受連接;接受連接后組成 session 結構,查看是否有空閑線程,若有則分配給其處理,若無,則檢查等待隊列 overflow 的大小,若過大,則拋棄請求,否則加入 overflow 隊列。
work 線程: 從 overflow 隊列中獲取任務, 走 Varnish 狀態機流程處理任務,完成后通過 pipe 的線程通信,傳遞給 epoll 線程,等待下一個事件觸發。
epoll 線程:將事件發送時對應的 session , 放入 overflow 隊列,以供 work 線程從中取出繼續處理。當然,在等待事件發送時,會檢查該 session 是否過期。
expire 線程:對以二叉樹形式組織的緩存對象,進行過期檢查,對過期的對象進行處理(更新或者棄用。

cdn加速的實現:

實驗環境:
三臺主機:為了實驗方便,全部關閉防火墻,selinux設置為disabled
代理服務器(varnish服務器):172.25.5.111
后端資源服務器:172.25.5.112
客戶端物理主機:172.25.5.250
1 . 代理服務端安裝:
varnish-4.0.5-1.el7.x86_64.rpm
varnish-libs-4.0.5-1.el7.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm

	rpm -qc  軟件包     查看生成的文件

在這里插入圖片描述
2)查看varnish的服務文件:

vim /usr/lib/systemd/system/varnish.service

在這里插入圖片描述
Varnish打開的最大文件數限制為131072
Varnish鎖定的共享內存大小為82M

3)查看本機系統最大文件訪問數量

sysctl -a | grep file

在這里插入圖片描述
發現滿足Varnish打開的最大文件數限制

4)全局臨時更改共享內存及最大文件數

 ulimit -n 131072    ##臨時更改更改最大文件數ulimit -l 82        ##臨時更改更改最大共享內存ulimit -a           ##查看用戶限制

5)編輯varnish用戶的限制文件

vim /etc/security/limits.conf  ##將最大文件訪問數以及鎖定的內存大小寫入文件最后

在這里插入圖片描述
6)修改varnish服務端口

vim /etc/varnish/varnish.params       更改端口為80

在這里插入圖片描述

7)varnish主配置文件中指定后端服務器

vim /etc/varnish/default.vcl        指定后端服務和端口

在這里插入圖片描述
最后重啟vanish服務

2 . 設置后端服務器

	yum install httpd -ycd /var/www/html/vim index.htmlsystemctl start httpd

3 . 測試:使用物理主機直接訪問代理服務器,可以得到資源服務器中的內容
在這里插入圖片描述

Varnish緩存命中情況:

作為varnish代理端,在配置文件中添加了后端服務器的ip及端口,在訪問代理端的時候實際是在訪問后端服務器,則第一次訪問會產生緩存,下一次訪問的時侯則由緩存服務器直接響應客戶端需求,減少延時。

修改配置文件,在緩存數據時發送信息給客戶端(查看緩存命中情況),根據數據是來自后端服務器還是來自緩存的內容,返回不同的消息給客戶端主機。

vim /etc/varnish/default.vcl   

在緩存數據將要發送到客戶端時調用的子進程。
在這里插入圖片描述
在代理服務器上對varnish緩存進行清理:

 varnishadm ban req.url "~" /    # 清理所有的緩存varnishadm ban req.url "~" /index.html   # 對指定文件的緩存進行清理

先對varnish服務器的緩存進行清理:

varnishadm ban req.url "~" /   

使用客戶主機進行測試緩存命中情況:
在這里插入圖片描述
第一次訪問的時候不存在緩存內容,數據由后端服務器獲取

在這里插入圖片描述
再次訪問的時候已經有了緩存數據,命中緩存。

定義不同域名站點的后端服務器:

在使用不同的域名訪問同一臺代理服務器的時候,可以進行設置,將請求由發送到不同的后端服務器。

需要在代理服務器的varnish配置文件中設置多個后端服務器,并在vcl_recv 子程序中設置對不同的域名請求發送到不同的后端服務器。

vim /etc/varnish/default.vcl     在varnish端添加
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {    ##如果請求的域名為www.westos.org或者 westos.orgset req.http.host = "www.westos.org";  ##當將其賦值為 www.westos.orgset req.backend_hint = web1;       ##讓后將請求發送給為web1 后端服務器
}elsif (req.http.host ~ "^bbs.westos.org") {     ##如果請求域名為bbs.westos.orgset req.backend_hint = web2;       ##就將請求發送給web2
}else {return (synth(405));                 ##其他的域名返回一個405錯誤
}
}

在這里插入圖片描述
寫好之后重啟varnish服務

在客戶端寫好解析:
在這里插入圖片描述
解析好之后進行測試:
在這里插入圖片描述

輪詢機制實現后端服務器負載均衡:

當某臺后端服務器的訪問壓力過大的時候,可以設置多臺后端服務器,提供相同的內容服務,將客戶請求分配給多臺服務器,減緩一臺服務器的壓力。

可以把多臺 backends 聚合成一個組,這些組被叫做 directors。這樣可以增強性能和彈力.

import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";    ##導入模塊
backend web1 {.host = "172.25.5.112";       定義第一個后端服務器.port = "80";
}
backend web2 {.host = "172.25.5.113";          定義第二個后端服務器.port = "80";
}sub vcl_init {new lb = directors.round_robin();         新建一個組lb.add_backend(web1);        將web1 添加到這個組lb.add_backend(web2);        將web2 添加到這個組
}sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {set req.http.host = "www.westos.org";set req.backend_hint = lb.backend();    發送請求循環組,讓組中的后端服務器輪流處理請求return(pass);       設置直接將請求發送到后端服務器,并且不緩存返回的內容
}elsif (req.http.host ~ "^bbs.westos.org") {set req.backend_hint = web2;
}else {return (synth(405));      
}
}

在這里插入圖片描述
round_robin()這個 director 是一個循環的 director。它的含義就是 director 使用循環的方式把backends 分給請求。

測試:
在這里插入圖片描述

推送管理平臺:

為了更加快捷方便及時對代理服務器中緩存內容進行清理更新。可以在代理服務器上設置網絡推送頁面,直接在網頁上推送平臺對代理服務器緩存進行修改。

1 代理服務器上安裝php 以及http
由于推送平臺使用的是php進行編寫,需要安裝php插件識別php腳本內容。

yum install php httpd  -y
vim /etc/httpd/conf/httpd.conf     更改http端口為8080,80默認端口已經被varnish占用
systemctl restart httpd            重啟http服務

2 解壓平臺安裝包到httpd公共目錄里

unzip bansys.zip -d /var/www/html       (沒有unzip的可以先yum install unzip)
cd /var/www/html          
mv bansys/* /var/www/html  # 將解壓出目錄中的文件全部放到公共目錄中
vim config.php               修改推送平臺配置文件如下

在這里插入圖片描述
3 . 修改varnish配置文件

vim /etc/varnish/default.vcl

在這里插入圖片描述
重啟varnish服務

4 . 客戶端進行測試 :http://172.25.5.111:8080

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542072.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3dmax如何拆分模型_3dmax制作裝飾柜1

大家好,今天我來為大家講解一下如何利用3dmax制作裝飾柜。我們需要制作裝飾柜模型,當我們為它添加一個材質后,它就是這樣的效果。單擊創建,選擇圖形,對象為樣條線,選擇矩形在場景中進行創建。單擊修改&…

TODO:macOS上ThinkPHP5和Semantic-UI集成

TODO:macOS上ThinkPHP5和Semantic-UI集成1. 全局安裝 (on OSX via homebrew)Composer 是 homebrew-php 項目的一部分2. 把Xcode升級到8.1后繼續安裝Composer3. 使用composer創建TP5項目MWL-Dispatchcomposer create-project topthink/think MWL-Dispatch4. 配置apac…

np.expm1_JavaScript中帶有示例的Math.expm1()方法

np.expm1JavaScript | Math.expm1()方法 (JavaScript | Math.expm1() Method) Math operations in JavaScript are handled using functions of math library in JavaScript. In this tutorial on Math.expm1() method, we will learn about the expm1() method and its workin…

距離傳感器控制燈泡代碼_生迪全彩智能 LED 燈泡體驗評測

市面上大多數智能燈具無外乎智能控制,冷暖標準區間的簡單調光,僅僅滿足我們日常照明之外,似乎用處不多。如果有一款能在自己房間制造多彩氛圍的燈泡就好了。這次有幸體驗到了華為智能家居生態鏈產品生迪全彩智能 LED 燈泡,才發現彩…

mysql啟動與關閉(手動與自動)

手動管理mysql的啟動與關閉 [rootmysql ~]# service mysql start --手動啟動mysqlStarting MySQL. SUCCESS![rootmysql ~]# service mysql stop --手動關閉mysql Shutting down MySQL.. SUCCESS! [rootmysql ~]# mysqld --verbose --help --查看MySQL的默認參數的具體值 如果每…

JavaScript中帶有示例的Math.round()方法

JavaScript | Math.round()方法 (JavaScript | Math.round() Method) Math.round() is a function in math library of JavaScript that is used to round the given number floating-point number to the nearest integer value. Math.round()是JavaScript數學庫中的函數&…

內部導線拉力測試_珠海后環回收試驗機現金支付拉力試驗機回收和諧溫馨的環境...

珠海后環回收試驗機現金支付拉力試驗機回收和諧溫馨的環境深圳富興二手設備回收,拉力試驗機回收,恒溫恒濕箱回收,恒溫恒濕試驗箱回收,恒溫恒濕培養箱回收,高低溫試驗箱回收,高低溫沖擊試驗機回收&#xff0…

lvs負載均衡—ldirectord(DR模式的健康檢查)

作用: 健康檢查對企業而言也是由為重要,在生活中,有時候訪問網頁訪問不到,就會跳出來一些圖形告訴你訪問失敗,這就是健康檢查的作用,當服務器都掛掉的時候,告訴你暫時訪問不了。 ldirectord是后…

Reactor by Example--轉

原文地址:https://www.infoq.com/articles/reactor-by-example Key takeaways Reactor is a reactive streams library targeting Java 8 and providing an Rx-conforming APIIt uses the same approach and philosophy as RxJava despite some API differencesIt i…

springboot項目后臺運行關閉_springboot項目在服務器上部署過程(新手教程)

環境:服務器系統:ubuntu16jdkmysql工具 xshell6下載地址:https://www.netsarang.com/download/down_form.html?code622&downloadType0&licenseType1xftp6下載地址:https://www.netsarang.com/download/down_form.html?c…

如何在React Native中使用文本輸入組件?

You know, an app becomes more authentic and professional when there is the interaction between the app and the user. 您知道,當應用程序與用戶之間存在交互時,該應用程序將變得更加真實和專業。 The text input component in react-native brin…

lvs負載均衡—NAT模式

NAT模式原理圖 Virtual Server via NAT : 用地址翻譯實現虛擬服務器,地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址,外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。 優點是節省IP …

Django1.9開發博客06- 模板繼承

模板繼承就是網站的多個頁面可以共享同一個頁面布局或者是頁面的某幾個部分的內容。通過這種方式你就需要在每個頁面復制粘貼同樣的代碼了。 如果你想改變頁面某個公共部分,你不需要每個頁面的去修改,只需要修改一個模板就行了,這樣最大化復用…

樂高機器人亮劍_2500名選手大比拼 全球機器人廣州從化“亮劍”

導讀:國際機器人從化總動員學生自己編程、拼裝的機器人既能像相撲手一樣摔跤,又能像蜘蛛俠一樣爬上爬下。還有智能垃圾處理系統,瞄準城市垃圾分類下的“痛點”。在2019RoboRAVE國際教育機器人大會全球總決賽的現場,只有想不到&…

python 編碼問題_Python電源挑戰| 競爭編碼問題

python 編碼問題Question: 題: A power function is that positive number that can be expressed as x^x i.e x raises to the power of x, where x is any positive number. You will be given an integer array A and you need to print if the elements of arr…

lvs負載均衡—高可用集群(keepalived)

基本概念: 什么是Keepalived呢,keepalived觀其名可知,保持存活,在網絡里面就是保持在線了,也就是所謂的高可用或熱備,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發…

定期定量采購_企業常見的六種采購策略

注冊職業采購經理CPPM考試網?www.apscppm.com對不起,我是采購合同生效的條件是什么?怎樣制定談判方案?如何在采購時讓供應商聽你的指揮!沒做預算不能采購,應該作為企業采購管理的基本原則。編制現金預算就是要解決收入…

stringreader_Java StringReader markSupported()方法與示例

stringreaderStringReader類markSupported()方法 (StringReader Class markSupported() method) markSupported() method is available in java.io package. markSupported()方法在java.io包中可用。 markSupported() method is used to check whether this StringReader strea…

pacemaker+corosync實現集群管理

前言: 高可用集群,是指以減少服務中斷(如因服務器宕機等引起的服務中斷)時間為目的的服務器集群技術。簡單的說,集群就是一組計算機,它們作為一個整體向用戶提供一組網絡資源。這些單個的計算機系統就是集群的節點。 …

分頁導航的實現方法

這個導航是閱讀了精通css這本書后做的demo&#xff0c;感覺以前寫的真的是弱爆了 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style type"text/css">ol.n…