1. 程式人生 > >大規模網站架構之WEB加速器SQUID(二)

大規模網站架構之WEB加速器SQUID(二)

引言    大規模網站瓶頸之一就是效能問題,如何讓你的網站飛速運轉起來,一直是架構師和開發人員苦於思考的問題,隨著CMS的成熟,大多數門戶及網站都通過靜態化來提升網站的效能和安全,但隨之而來CMS管理髮布也變得越複雜,如何能使釋出的資訊快速被使用者訪問,如何方便靈活定義一種策略,使快取隨著應用的變化變化,成了我亟待解決的問題。 本文僅針對基於asp.net開發的網站互動性非實時部分進行討論,實時互動部分解決方案將在後續部分予以闡述。 一、WEB加速通常有如下方案: 1、基於asp.net技術的頁面快取 基於.net技術的頁面快取,通常有如下兩種應用方式: 一、基於資料庫觸發(設定快取依賴策略,當資料庫中資料發生變化時,觸發快取失效;但微軟提供的解決方案目前僅支援SQL Server,如果是ORACLE需要自己實現觸發介面)。 二、基於檔案依賴的策略(可以設定快取依賴於檔案中的具體鍵值,當資料更新時,更新檔案鍵值迫使快取失效)。 優點:實現比較簡單 缺點:粒度太粗,對IIS、.net Framework依賴太強,策略還不太完善,跨機器、叢集訪問方面存在瓶頸。 2、頁面靜態化 頁面靜態化有可分為全部靜態化、區域性靜態化、偽靜態化等。 優點:頁面靜態化後,減輕了資料訪問的負擔,同時由於靜態頁面不需要複雜處理過程(如ASP.NET頁面生命週期),從而提高網站的效能。 缺點:頁面靜態化增加了維護管理的複雜度,可能同一頁面在多個頁面之間被引用,需要進行觸發級連更新。當大量併發時,更新靜態頁面會發生LOCK,導致頁面訪問超時。 3、基於squid for windows下的反向代理    為了佐證本方案是經過實踐考驗的,並且是通用的行業方案,以下是我通過抓包得到的一些大規模網站實際應用: --網易 Servernginx DateWed, 10 Mar 2010 02:25:39 GMT Content-Typetext/html; charset=GBK Last-ModifiedWed, 10 Mar 2010 02:24:45 GMT VaryAccept-Encoding ExpiresWed, 10 Mar 2010 02:27:39 GMT Cache-Controlmax-age=120 Content-Encodinggzip Age49 X-CacheHIT from cache.163.com Via192.168.51.39.nginx, 1.0 cache.163.com (squid/3.0.STABLE23) Connectionclose --騰訊 Servernginx/0.6.39 DateWed, 10 Mar 2010 02:26:48 GMT Content-Typetext/html; charset=GB2312 VaryAccept-Encoding, Accept-Encoding ExpiresWed, 10 Mar 2010 02:41:48 GMT Cache-Controlmax-age=900 Content-Encodinggzip Age313 X-CacheHIT from rainny.qq.com Via1.0 rainny.qq.com:80 (squid/2.6.STABLE5)
Connectionclose ----搜狐 DateWed, 10 Mar 2010 02:41:40 GMT ServerApache/1.3.39 (Unix) mod_gzip/1.3.26.1a VaryAccept-Encoding,X-Up-Calling-Line-id,X-Source-ID,X-Up-Bearer-Type Cache-Controlmax-age=70 ExpiresWed, 10 Mar 2010 02:42:50 GMT Last-ModifiedWed, 10 Mar 2010 02:41:39 GMT Content-Typetext/html Age9 X-CacheHIT from 17376722.22226606.29245568.sohu.com Via1.0 17376722.22226606.29245568.sohu.com:80 (squid)
Connectionclose 4、其它 二、SQUID簡介 SQUID 簡單說來是基於UNIX下開發的為WEB應用加速的一個開源軟體。SQUID已經普遍在基於nix系統下的WEB應用中使用,例如:新浪、網易都使用該軟體,其中SQUID FOR WINDOWS是在WINDOWS下使用。SQUID通過雜湊演算法在磁碟上建立目錄,將第一次請求的資訊,存在指定的目錄下,供其下次存取,此外SQUID也會將請求的頁面資訊快取在記憶體中,當客戶端訪問某一頁面時,如果記憶體中存在,則直接命中CACHE;如果記憶體中不存在,則到CACHE目錄下獲取,否則到後端的WEB  SERVER獲取。 SQUID 特點: 1、SQUID沿繼了nix下配置的風格,可能用慣了WINDOWS的使用者初次使用會有些不適。 2、SQUID包括了一系列的配置策略,認證、訪問控制、快取設定、URL抓取、日誌管理、磁碟管理、群集等。 3、SQUID可以通過refresh_pattern策略設定請求的URL可快取的內容,失效時間(詳見文件)。

4、快取策略說明

SQUID使用了LM演算法,LM就是頁面Header裡時間(Date)和Last-Modified時間的差。Date一般是Squid從後面取頁面的時間,Last-Modified 一般是頁面生成時間。

refresh_pattern 的語法是

refresh_pattern [-i] regexp min percent max [options]

min, max的單位是分鐘,percent就是百分比。

refresh_pattern 的演算法如下:(當前時間定義為CURRENT_DATE)

1) If ((CURRENT_DATE-DATE(就是LM裡定義的時間)) < min),cache是新鮮的

2) else if ((CURRENT_DATE-DATE) < (min + (max-min)*percent),cache是新鮮的

3) else cache是過期的

cache過期就需要從後面server取新鮮內容。

常用的幾個引數的意思

override-expire

該選項導致squid在檢查Expires頭部之前,先檢查min值。這樣,一個非零的min時間讓squid返回一個未確認的cache命中,即使該響應準備過期。

override-lastmod

改選項導致squid在檢查LM-factor百分比之前先檢查min值。

reload-into-ims

該選項讓squid在確認請求裡,以no-cache指令傳送一個請求。換句話說,squid在轉發請求之前,對該請求增加一個If-Modified- Since頭部。注意這點僅僅在目標有Last-Modified時間戳時才能工作。外面進來的請求保留no-cache指令,以便它到達原始伺服器。

一般情況可以使用 reload-into-ims。它其實是強行控制物件的超時時間,這違反了http協議的精神,但是在頻寬較窄的場合,可以提高明顯系統相應時間。 

關於SQUID FOR WINDOWS介紹已經很多,本文就不在贅述,詳見SQUID權威手冊這本書。 在使用SQUID之前,首先要規劃或確定你現有佈署環境,如果你是Single Web Server 建議你在Web Server前增加一臺機器做為SQUID伺服器 三、SQUID FOR WINDOWS配置    本文中SQUID放在172.20.65.201的機器上,應用WEB SERVER IP為172.20.65.203,其中SQUID在201上的80埠偵聽,測試客戶端機器為172.20.65.231,在squid.conf中#代表註釋,所以開啟某項設定,需去掉前面的#。TAG標籤代表每一功能項的設定。 1、下載    下載SQUID FOR WINDOWS(我所用的版本是Squid 2.7.STABLE6,各個版本的配置可能略有不同,大家請注意) 2、安裝    將SQUID解壓到c:/squid(當然也可解壓在其它碟符下) 3、建立磁碟快取和日誌目錄    預設情況是在安裝磁碟下建立,為確保效能大幅度提升,建立選擇磁碟空間容量較大的碟符,如:建立d:/squid/var目錄,在var目錄下建立logs和cache目錄,其中logs目錄用   於存放日誌,cache目錄用於存放硬碟快取資料。 4、建立快取目操作許可權    為了使抓取的資料,能夠存放在快取目錄下,建立系統賬戶如squidApp,將其屬於普通使用者組應可,將d:/squid授予該使用者讀寫許可權即可。 5、檔案更改    c:/squid/etc是SQUID的配置資訊的存放處,為確保安全,在你修改配置檔案前,請將其備份,然後將squid.conf.default修改為squid.conf,    mime.conf.default修改為 mime.conf ,cachemgr.conf.default 修改為cachemgr.conf 6、配置SQUID    針對於SQUID來講大部分配都在squid.conf中,本文中所使用環境如下:    開啟如下訪問控制    acl all src all    acl manager proto cache_object    acl localhost src 127.0.0.1/32    acl to_localhost dst 127.0.0.0/8    acl localnet src 172.16.65.231/255.255.0.0 指定本地網路及掩碼    開啟訪問埠    acl SSL_ports port 443    acl Safe_ports port 80# http    acl Safe_ports port 21# ftp    acl Safe_ports port 443# https    acl Safe_ports port 70# gopher    acl Safe_ports port 210# wais    acl Safe_ports port 1025-65535# unregistered ports    acl Safe_ports port 280# http-mgmt    acl Safe_ports port 488# gss-http    acl Safe_ports port 591# filemaker    acl Safe_ports port 777# multiling http    acl CONNECT method CONNECT    開啟訪問控制,請一定要注意順序    http_access allow manager localhost    http_access deny manager    http_access deny !Safe_ports    http_access deny CONNECT !SSL_ports    http_access allow all    http_access allow localnet    http_access deny all    指定SQUID在80埠偵聽, vhost 指定使用加速模式    http_port 80 vhost     203後臺WEB SERVER, parent指父節點, 80 指後臺網站的埠, 0 ICP 服務埠,no-query  originserver 獲取快取時的選項    cache_peer 172.20.65.203       parent    80  0  no-query  originserver    快取設定    maximum_object_size_in_memory 1024 KB    cache_dir ufs d:/squid/var/cache 1024 16 256 注意路徑    maximum_object_size 4096 KB    cache_swap_low 90    cache_swap_high 95    日誌設定    access_log d:/squid/var/logs/access.log squid 訪問日誌    cache_log d:/squid/var/logs/cache.log    cache_store_log d:/squid/var/logs/store.log    emulate_httpd_log on    控制頁面快取內容    refresh_pattern ^ftp:144020%10080    refresh_pattern ^gopher:14400%1440    refresh_pattern -i (/cgi-bin/|/?) 00%0    refresh_pattern .020%4320    refresh_pattern -i /.css$ 20 50% 120 reload-into-ims    refresh_pattern -i /.xml$ 20 50% 120 reload-into-ims    refresh_pattern -i /.html$ 20 90% 120 reload-into-ims    refresh_pattern -i /.jpg$ 20 90% 120 reload-into-ims    refresh_pattern -i /.png$ 20 90% 120 reload-into-ims    refresh_pattern -i /.gif$ 20 90% 120 ignore-reload    refresh_pattern -i /.js$ 20 90% 120  reload-into-ims    refresh_pattern -i /.htm$ 20 90% 120 reload-into-ims    設定郵箱    cache_mgr webmaster_breeze    設定本地主機檔案    hosts_file c:/windows/system32/drivers/etc/hosts 7、安裝服務    將squid安裝為服務,命令格式:squid -i [-f configfile] [-n servicename],如c:/squid/sbin/squid -i -n Squid_Proxy 8、初始化快取目錄     c:/squid/sbin/squid -z  9、啟動Squid_Proxy服務     執行services.msc開啟服務視窗,選擇Squid_Proxy服務 ,如果啟動過程出錯90%是配置檔案出現問題。 10、squid命令     squid -k reconfigure  //啟用新的配置檔案     squid -k rotate       //截斷日誌     squid -k shutdown     //stop squid     squid -dx 當服務不能啟動時,進行除錯 更多配置請參見文件 四、SQUID測試 找一臺機器進行測試,並檢視access.log日誌,如果出現 TCP_DENY的資訊,多為配置不正確。如出現如下資訊TCP_MEM_HIT/200 表示,SQUID已經起作用,該請求是從 SQUID執行機器的記憶體中響應的。

五、效能

用LR跑了一下,1000個併發,記憶體命中率在100%。下次把測試結果貼上。 

3 1 (請您對文章做出評價) posted on 2010-03-15 14:07 design-life 閱讀(888) 評論(14)  編輯 收藏


評論:

#1樓 2010-03-15 14:21 | Ray Wu 
不錯,有機會會應用在產品伺服器上
  回覆  引用  檢視     #2樓 2010-03-15 14:23 | 風雲幻影 
寫的不錯,頂下。但是很遺憾沒看到具體的測試資料對比,還有,樓主比較過SQUID和Memcache兩者之間的效能差異嗎?
  回覆  引用  檢視     #3樓 2010-03-15 14:30 | 代震軍 
@風雲幻影
squid主要用於‘快取靜態檔案’使用的,比如JPG,GIF,JS,CSS等,與MEMCACHED不是一類東西,呵呵。

  回覆  引用  檢視     #4樓 2010-03-15 14:43 | Jon.Hong 
好文, 作個記號。。。。
另外請問博主,有更多squid的資料嗎?

  回覆  引用  檢視     #5樓 2010-03-15 14:53 | TT.Net 
squid用做的伺服器是記憶體放不下了再去訪問目錄嗎?
那就是伺服器配置要記憶體大 硬碟大。CPU一般就可以了嗎?
外網是訪問SQUID這臺的80嗎?

  回覆  引用  檢視     #6樓 2010-03-15 14:55 | Jon.Hong 
@代震軍
有個問題想請教,謝謝

用squid快取圖片,如果源圖片已經刪除或重新上傳,squid伺服器是怎麼更新的呢?

  回覆  引用  檢視     #7樓[樓主] 2010-03-15 15:01 | design-life 
@TT.Net
SQUID可以設定記憶體、磁碟大小,當記憶體不能命中時,檢索磁碟,由於使用了Hash技術,索引速度飛快,SQUID其實可以看作反向代理,可以設定在80埠偵聽。

  回覆  引用  檢視     #8樓 2010-03-15 15:02 | TT.Net 
@design-life
期待你的下一篇

  回覆  引用  檢視     #9樓[樓主] 2010-03-15 15:05 | design-life 
@Jon.Hong
網上有SQUID權威指南中文版的PDF,你可以下載看看,很全。
SQUID更新快取的策略符合W3C標準,主要用到了last-moidfy和LM演算法

  回覆  引用  檢視     #10樓 2010-03-15 15:44 | 代震軍 
@Jon.Hong
SQUID有個客戶端檔案叫:squidclient(有下載包中),你可以使用其中的purge指令來刪除快取檔案,這樣後續訪問就會重新讀取了,形如:
[[email protected] etc]# /usr/local/squid/bin/squidclient -p 80 -m PURGE http://www.abc.com/images/index/jdt/images/2.jpg


  回覆  引用  檢視     #11樓 2010-03-15 15:47 | 代震軍 
@Jon.Hong
另外,如果網站使用NGINX做的lb的話,那可以使用其原生態的外掛來做靜態檔案快取,效率也很高,下面這篇文章中有詳細描述,
http://blog.s135.com/nginx_cache/

  回覆  引用  檢視     #12樓 2010-03-15 15:52 | Jon.Hong 
@代震軍
謝謝。

  回覆  引用  檢視     #13樓 2010-03-15 16:16 | killkill 
squid 不錯,可以為快取設定策略,感覺上唯一缺陷的地方是不能支援多CPU ......
  回覆  引用  檢視     #14樓 2010-03-15 16:34 | 肥燕子 
"acl localnet src 172.16.65.231/255.255.0.0"
指定本地網路及掩碼,我感覺有誤吧,按照樓主的配置,本地的網路應該是172.16.65.0

相關推薦

大規模網站架構WEB加速器SQUID()

引言    大規模網站瓶頸之一就是效能問題,如何讓你的網站飛速運轉起來,一直是架構師和開發人員苦於思考的問題,隨著CMS的成熟,大多數門戶及網站都通過靜態化來提升網站的效能和安全,但隨之而來CMS管理髮布也變得越複雜,如何能使釋出的資訊快速被使用者訪問,如何方便靈活定義一種策

大規模網站架構的緩存機制

這樣的 實踐 未來 time 部署 star 命中率 手機瀏覽 產生 【問底】徐漢彬:大規模網站架構的緩存機制和幾何分形學 發表於16小時前|1796次閱讀| 來源CSDN|10 條評論| 作者徐漢彬 問底CDN緩存徐漢彬 摘要:緩存機制簡單總結可以說是空間換時間,被用於

大型網站架構分布式消息隊列(轉)

工作經驗 大型網站 異步處理 消費 min 實現 通知 ima 可能 以下是消息隊列以下的大綱,本文主要介紹消息隊列概述,消息隊列應用場景和消息中間件示例(電商,日誌系統)。 本次分享大綱 消息隊列概述 消息隊列應用場景 消息中間件示例 JMS消息服務 常用

大型網站架構分布式消息隊列

並且 other splay 2016年 均衡 tails lin 庫存 寫入 大型網站架構之分布式消息隊列 轉載

中大型網站架構路一

存儲 cache 查詢 動靜分離 面向服務 keepalive 網站 web 共享存儲 初期:   單臺服務器部署   web與數據庫獨立部署   動靜分離-初期   數據庫主從與查詢緩存   七層負負載均衡和共享存儲 中期:   數據庫架構擴展   soa面向服務器架構

大型網站架構百萬PV

rop 就是 priority ipaddress -s 模式 lse 故障 shutdown PV(page view)即頁面瀏覽量,通常是衡量一個網絡新聞頻道或網站甚至一條網絡新聞的主要指標。網頁瀏覽數是評價網站流量最常用的指標之一,簡稱為PV。 案例概述本案

大型網站架構百萬PV網站架構案例

nta java 解壓縮 記錄日誌 tex jsp position .tar.gz 註意 一、案例概述 本案例采用四層模式實現,主要分為前端反向代理、web層、數據庫緩存層和數據庫層。 前端反向代理采用主備模式 web層采用群集模式 數據庫緩存層采用主備模式 數據庫層采

大型網站架構千萬PVRabbitMQ

內存 col fir ebs bin vim start ofo abd 簡介 MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是

千萬PV 網站架構 RabbitMQ 消息列隊

連接 top -- blog 等等 應用程序 linu 發送 nodes RabbitMQ 簡介 : MQ全稱為Message Queue,消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接

千萬PV網站架構RabbitMQ(消息隊列)安裝、集群

-- sha bcd 直接 ssa stop The 節點 tex RabbitMQ介紹: MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消

淺析:網站製作web前端開發設計

在Web3.0熱潮下,廣州製作網頁以其相關軟體技術的開發掌握和基礎瞭解,在設計上,有其相關的天然優勢。對於網站製作學習者而言,以專業優勢和深厚的Web前段開發設計在現有的能力挖掘中,以其特色化和深度技術,實施專業深度掌握,為個人職業生涯規劃和相關的工作經驗實踐提供助力。      Web前端開發設計是網站製作

asp.net core mcroservices 架構 分散式日誌(自定義日誌開發

一   netcore日誌原理                                    &nbs

高效能網站架構快取篇—Redis叢集搭建

         看過高效能網站架構之快取篇--Redis安裝配置和高效能網站架構之快取篇--Redis使用配置埠轉發這兩篇文章的,相信你已經對redis有一定的瞭解,並能夠安裝上,進行簡單的使用了,但是在咱們的實際應用中,使用redis肯定不會使用單機版,不光是redis

Spring Boot 入門 Web 篇(

一、前言 上一篇《Spring Boot 入門之基礎篇(一)》介紹了 Spring Boot 的環境搭建以及專案啟動打包等基礎內容,本篇繼續深入介紹 Spring Boot 與 Web 開發相關的知識。 二、整合模板引擎 由於 jsp 不被 SpringBoot 推薦使用,所以模板引擎主

大型網站架構架構演變

處於這個網際網路開發時代,作為一名軟體工程師,我們經常會聽到大型網站架構這個字眼,那到底什麼是大型網站呢,這樣的網站又是一種什麼樣的架構設計呢?今天我們就開始談談大型網站架構設計系列,首先我們今天講講大型網站架構設計是如何演變的,跟著我一起出發吧。一、大型網站系統的特點高併發

大型網站架構分散式訊息佇列——RabbitMQ

Message Broker與AMQP簡介 Message Broker是一種訊息驗證、傳輸、路由的架構模式,其設計目標主要應用於下面這些場景: 訊息路由到一個或多個目的地 訊息轉化為其他的表現方式 執行訊息的聚集、訊息的分解,並將結果傳送到他們的目的地,然後重新組合

大規模網站架構的快取機制和幾何分形學

快取機制在我們的實際研發工作中,被極其廣泛地應用,通過這些快取機制來提升系統互動的效率。簡單的總結來說,就是在兩個環節或者系統之間,會引入一個cache/buffer做為提升整體效率的角色。 而 有趣的是,這種快取機制令人驚奇並且優美的遵循著“幾何分形”的規律,也就

網站架構變遷

一個網站在剛開始的時候可能就只有一個應用程式,然後網站前臺內容和後臺管理功能會分解為兩個系統,隨著網站的業務發展,需要增加的功能越來越多,這兩個系統會越來越龐大,更重要的是,在網站快速發展的過程中,為了快速的適應市場的變化,很多網站開發人員在程式碼結構的很多地方上採取簡單的權

Spring Boot 學習 Web 篇(

該系列並非完全原創,官方文件、作者一、前言上一篇《Spring Boot 入門之基礎篇(一)》介紹了 Spring Boot 的環境搭建以及專案啟動打包等基礎內容,本篇繼續深入介紹 Spring Boot 與 Web 開發相關的知識。二、整合模板引擎由於 jsp 不被 Spr

架構美第十章-好的架構

        我們曾提到,架構師玩的是折中的遊戲。對於一組給定的功能需求和品質需求,沒有唯一的正確架構和唯一的“正確答案”。我們從經驗中得知,應該對架構進行評估,確定它是否滿足其需求,然後再投入資金