• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 基于反相代理的Web緩存加速(上)

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    基于反相代理的Web緩存加速(上) 內容摘要: 對于一個日訪問量達到百萬級的網站來說,速度很快就成為一個瓶頸。除了優化內容發布系統的應用本身外,如果能把不需要實時更新的動態頁面的輸出結果轉化成靜態網頁來發布,速度上的提升效果將是顯著的,因為一個動

    基于反相代理的Web緩存加速(上)

    內容摘要:

    對于一個日訪問量達到百萬級的網站來說,速度很快就成為一個瓶頸。除了優化內容發布系統的應用本身外,如果能把不需要實時更新的動態頁面的輸出結果轉化成靜態網頁來發布,速度上的提升效果將是顯著的,因為一個動態頁面的速度往往會比靜態頁面慢2-10倍,而靜態網頁的內容如果能被緩存在內存里,訪問速度甚至會比原有動態網頁有2-3個數量級的提高。

    后臺的內容管理系統的頁面輸出遵守可緩存的設計,這樣就可以把性能問題交給前臺的緩存服務器來解決了,從而大大簡化CMS系統本身的復雜程度。

    靜態緩存和動態緩存的比較

    靜態頁面的緩存可能有2種形式:其實主要區別就是CMS是否自己負責關聯內容的緩存更新管理。

  • 靜態緩存:是在新內容發布的同時就立刻生成相應內容的靜態頁面,比如:2003年3月22日,管理員通過后臺內容管理界面錄入一篇文章后,就立刻生成http://www.chedong.com/tech/2003/03/22/001.html這個靜態頁面,并同步更新相關索引頁上的鏈接。

  • 動態緩存:是在新內容發布以后,并不預先生成相應的靜態頁面,直到對相應內容發出請求時,如果前臺緩存服務器找不到相應緩存,就向后臺內容管理服務器發出請求,后臺系統會生成相應內容的靜態頁面,用戶第一次訪問頁面時可能會慢一點,但是以后就是直接訪問緩存了。

    如果去ZDNet等國外網站會發現他們使用的基于Vi.nette內容管理系統都有這樣的頁面名稱:0,22342566,300458.html。其實這里的0,22342566,300458就是用逗號分割開的多個參數:

    第一次訪問找不到頁面后,相當于會在服務器端產生一個doc_type=0&doc_id=22342566&doc_template=300458的查詢,而查詢結果會生成的緩存的靜態頁面:0,22342566,300458.html


    靜態緩存的缺點:

  • 復雜的觸發更新機制:這兩種機制在內容管理系統比較簡單的時候都是非常適用的。但對于一個關系比較復雜的網站來說,頁面之間的邏輯引用關系就成為一個非常非常復雜的問題。最典型的例子就是一條新聞要同時出現在新聞首頁和相關的3個新聞專題中,在靜態緩存模式中,每發一篇新文章,除了這篇新聞內容本身的頁面外,還需要系統通過觸發器生成多個新的相關靜態頁面,這些相關邏輯的觸發也往往就會成為內容管理系統中最復雜的部分之一。

  • 舊內容的批量更新: 通過靜態緩存發布的內容,對于以前生成的靜態頁面的內容很難修改,這樣用戶訪問舊頁面時,新的模板根本無法生效。在動態緩存模式中,每個動態頁面只需要關心,而相關的其他頁面能自動更新,從而大大減少了設計相關頁面更新觸發器的需要。

    以前做小型應用的時候也用過類似方式:應用首次訪問以后將數據庫的查詢結果在本地存成一個文件,下次請求時先檢查本地緩存目錄中是否有緩存文件,從而減少對后臺數據庫的訪問。雖然這樣做也能承載比較大的負載,但這樣的內容管理和緩存管理一體的系統是很難分離的,而且數據完整性也不是很好保存,內容更新時,應用需要把相應內容的的緩存文件刪除。但是這樣的設計在緩存文件很多的時候往往還需要將緩存目錄做一定的分布,否則一個目錄下的文件節點超過3000,rm*都會出錯。

    這時候,系統需要再次分工,把復雜的內容管理系統分解成:內容輸入和緩存這2個相對簡單的系統實現。

  • 后臺:內容管理系統,專心的將內容發布做好,比如:復雜的工作流管理,復雜的模板規則等……

  • 前臺:頁面的緩存管理則可以使用緩存系統實現

    ______________________             ___________________
    |Squid Software cache| |F5 Hardware cache|
    ---------------------- -------------------
    \ /
    \ ________________ /
    |ASP |JSP |PHP |
    Content Manage System
    ----------------


    所以分工后:內容管理和緩存管理2者,無論哪一方面可選的余地都是非常大的:軟件(比如前臺80端口使用SQUID對后臺8080的內容發布管理系

    統進行緩存),緩存硬件,甚至交給akamai這樣的專業服務商。

    面向緩存的站點規劃

    一個利用SQUID對多個站點進行做WEB加速http acceleration方案:

    原先一個站點的規劃可能是這樣的:

    200.200.200.207 www.chedong.com

    200.200.200.208 news.chedong.com

    200.200.200.209 bbs.chedong.com

    200.200.200.205 images.chedong.com

    面向緩存服務器的設計中:所有站點都通過外部DNS指向到同一個IP:200.200.200.200/201這2臺緩存服務器上(使用2臺是為了冗余備份)

                              _____________________   ________
    www.chedong.com 請求 \ | cache box | | | / 192.168.0.4 www.chedong.com
    news.chedong.com 請求 -| 200.200.200.200/201 |-|firewall| - 192.168.0.4 news.chedong.com
    bbs.chedong.com 請求 / | /etc/hosts | | box | \ 192.168.0.3 bbs.chedong.com
    --------------------- --------


    工作原理:

    外部請求過來時,設置緩存根據配置文件進行轉向解析。這樣,服務器請求就可以轉發到我們指定的內部地址上。

    在處理多虛擬主機轉向方面:mod_proxy比squid要簡單一些:可以把不同服務轉向后后臺多個IP的不同端口上。

    而squid只能通過禁用DNS解析,然后根據本地的/etc/hosts文件根據請求的域名進行地址轉發,后臺多個服務器必須使用相同的端口。

    使用反向代理加速,我們不僅可以得到性能上的提升,而且還能獲得額外的安全性和配置的靈活度:

  • 配置靈活性提高:可以自己在內部服務器上控制后臺服務器的DNS解析,當需要在服務器之間做遷移調整時,就不用大量修改外部DNS配置了,只需要修改內部DNS實現服務的調整。

  • 數據安全性增加:所有后臺服務器可以很方便的被保護在防火墻內。

  • 后臺應用設計復雜程度降低:原先為了效率常常需要建立專門的圖片服務器images.chedong.com和負載比較高的應用服務器bbs.chedong.com分離,在反向代理加速模式中,所有前臺請求都通過緩存服務器:實際上就都是靜態頁面,這樣,應用設計時就不用考慮圖片和應用本身分離了,也大大降低了后臺內容發布系統設計的復雜程度,由于數據和應用都存放在一起,也方便了文件系統的維護和管理。

    基于Apache mod_proxy的反向代理緩存加速實現

    Apache包含了mod_proxy模塊,可以用來實現代理服務器,針對后臺服務器的反向加速安裝apache 1.3.x 編譯時:

    --enable-shared=max --enable-module=most

    注:Apache2.x中mod_proxy已經被分離成mod_proxy和mod_cache:同時mod_cache有基于文件和基于內存的不同實現

    創建/var/www/proxy,設置apache服務所用戶可寫

    mod_proxy配置樣例:反相代理緩存+緩存

    架設前臺的www.example.com反向代理后臺的www.backend.com的8080端口服務。

    修改:httpd.conf

    <VirtualHost *>ServerName www.example.comServerAdmin admin@example.com# reverse proxy settingProxyPass / http://www.backend.com:8080/ProxyPassReverse / http://www.backend.com:8080/# cache dir rootCacheRoot "/var/www/proxy"# max cache storageCacheSize 50000000# hour: every 4 hour CacheGcInterval 4# max page expire time: hourCacheMaxExpire 240# Expire time = (now - last_modified) * CacheLastModifiedFactor CacheLastModifiedFactor 0.1# defalt expire tag: hourCacheDefaultExpire 1# force complete after precent of content retrived: 60-90%CacheForceCompletion 80CustomLog /usr/local/apache/logs/dev_access_log combined</VirtualHost>


    基于Squid的反向代理加速實現

    Squid是一個更專用的代理服務器,性能和效率會比Apache的mod_proxy高很多。

    如果需要combined格式日志補?。?

    http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html

    squid的編譯:

    ./configure --enable-useragent-log  --enable-referer-log --enable-default-err-language=Simplify_Chinese \ --enable-err-languages="Simplify_Chinese English" --disable-internal-dns  make#make install#cd /usr/local/squidmake dir cachechown squid.squid *vi /usr/local/squid/etc/squid.conf在/etc/hosts中:加入內部的DNS解析,比如:192.168.0.4 www.chedong.com 192.168.0.4 news.chedong.com192.168.0.3 bbs.chedong.com---------------------cut here----------------------------------# visible namevisible_hostname cache.example.com# cache config: space use 1G and memory use 256Mcache_dir ufs /usr/local/squid/cache 1024 16 256 cache_mem 256 MBcache_effective_user squidcache_effective_group squidhttp_port 80httpd_accel_host virtualhttpd_accel_single_host offhttpd_accel_port 80httpd_accel_uses_host_header onhttpd_accel_with_proxy on# accelerater my domain onlyacl acceleratedHostA dstdomain .example1.comacl acceleratedHostB dstdomain .example2.comacl acceleratedHostC dstdomain .example3.com# accelerater http protocol on port 80acl acceleratedProtocol protocol HTTPacl acceleratedPort port 80# access arcacl all src 0.0.0.0/0.0.0.0# Allow requests when they are to the accelerated machine AND to the# right port with right protocolhttp_access allow acceleratedProtocol acceleratedPort acceleratedHostAhttp_access allow acceleratedProtocol acceleratedPort acceleratedHostBhttp_access allow acceleratedProtocol acceleratedPort acceleratedHostC# loggingemulate_httpd_log oncache_store_log none# manageracl manager proto cache_objecthttp_access allow manager allcachemgr_passwd pass all----------------------cut here---------------------------------創建緩存目錄:/usr/local/squid/sbin/squid -z啟動squid/usr/local/squid/sbin/squid停止squid:/usr/local/squid/sbin/squid -k shutdown啟用新配置:/usr/local/squid/sbin/squid -k reconfig通過crontab每天0點截斷/輪循日志:0 0 * * * (/usr/local/squid/sbin/squid -k rotate)

  • 原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>