1. 程式人生 > >nginx ats squid varnish使用場景對比介紹

nginx ats squid varnish使用場景對比介紹

下面,我們將介紹自建CDN的具體建設規劃,主要從以下幾個方面進行考量:硬體成本、頻寬成本、架構設計、實際部署。

硬體成本

在硬體上,我們選型的需求是在1U的基礎上具有強勁的效能,同時價效比要高。

我們選擇了(強氧)雙子星伺服器,其硬體規格為:1U機身+支援雙路至強CPU+最大支援48G記憶體+雙千兆網口x2+H3C S1208八口千兆,提供三年質保服務,總價約1.5萬。

頻寬成本

單線機房的機房和頻寬資源,由於不需要經過第三方拉線撮合,直接從運營代理商購買,因此選擇餘地大,價效比高。以租用電信、聯通單線資源為例,每條線獨享100M頻寬,提供8個IP,有些機房自帶硬防,能夠防禦5G-10G流量。

平均費用,每個節點頻寬成本基本在1.6~2.5萬/年。

架構設計

CDN架構上要充分體現出抗攻擊能力和靈活應變的原則。因此,我們將CDN節點分解成反向代理+快取加速+攻擊防禦這三個不同層次的功能結構。

  • 反向代理功能(作用:路由加速,隱藏主節點,負載均衡)
  • 快取加速功能(作用:靜態推送,節省後端主節點頻寬)
  • 攻擊防禦功能(作用:快速解析,匹配過濾惡意攻擊)

開源世界裡能夠擔當反向代理及快取的軟體不少,而且各有優劣。作為架構師,要考慮如何選型,我們從效能、功能、配置上來進行比較篩選。

軟體名稱 效能 功能 過濾規則配置
Squid 不能多核是硬傷,磁碟快取容量有優勢,效能中等 多,支援ACL角色控制,也支援ICP快取協議 支援外部規則檔案讀取及熱載入,支援熱啟動
Varnish 多核支援,記憶體快取,效能強 夠用,不支援叢集,支援後端存活檢查 不支援外部檔案讀取,需要轉義,支援熱啟動
Nginx 多核支援,支援代理外掛,效能較強 多,通過外掛可以充當多角色伺服器 不支援外部檔案讀取,需要轉義,支援熱啟動
ATS 多核支援,磁碟/記憶體快取,效能強 夠用,支援外掛開發,也支援ICP協議 支援外部規則檔案讀取及熱載入,支援熱啟動,但缺乏文件
HAProxy 多核支援,無快取,HTTP頭支援語法操作,效能強 少,只專注HTTP頭部解析和轉發功能,支援ACL角色控制,支援後端存活檢查 支援外部規則檔案讀取及熱載入,支援熱啟動,支援會話粘滯和長連線

我們對這三層功能結構分別進行了測試調優及生產線的實踐檢驗,從以下方面評估:

  • HTTP防禦性能:HAProxy在應對大流量CC攻擊時,做正則匹配及頭部過濾時,CPU消耗只佔10%~20%。其它軟體均狂佔CPU資源約90%以上,容易成瓶頸導致整個系統無響應。
  • 反向代理效能:單純轉發效率以記憶體快取型的Varnish效能最強,ATS和Nginx次之,考慮大容量快取因素,ATS也是個不錯的選擇,但文件缺乏,需要持續關注。Nginx是專門針對C10K的產物,效能不錯,配合眾多外掛,改造性很強。
  • 過濾規則的可配置性:HAProxy,ATS,Squid均支援規則檔案讀取、ACL定製和熱載入、熱啟動。Nginx則不支援外部檔案正則匹配,略差一點,但可塑性強。

因此,綜合上述考慮,最終我們採用的架構是HAProxy+Varnish/ATS/Nginx的組合,即防禦型反向代理快取方案,功能角色如下:

  • 前面由HAProxy全力負責動靜資源分離,實現會話粘滯,節點負載均衡,故障轉移,遇到危急時承擔基於Http協議的CC型別攻擊防禦。
  • 後面為可插拔替換的反向代理快取引擎:根據生產線上的實際應用場景及快取物件的容量來決定使用記憶體型的varnish或者是磁碟型的ats,如果需要定製功能很強(防盜鏈)的反向代理如Nginx+plugins。

這個組合最大的特點是:

  • 支援外部過濾規則的讀取,尤其是關鍵字串無需轉義,可直接追加到檔案中。
  • 支援配置檔案熱載入生效,都支援reload,服務平滑生效。
  • 可插拔式的快取元件靈活應對各種業務需求。
  • 部署簡單,節點失效/生效切換方便。

LVS缺席:為什麼這裡沒有提及LVS,因為LVS是個重量級、高效穩定的四層轉發,不能作七層HTTP協議的識別,但完全可以架設在七層之前。所以,LVS的使用並不會影響網路結構,後續仍然可以想上就上,只是前提要兼顧到LVS的單點故障。

實際部署

最終我們在主節點周圍一共部署了8個CDN節點(節點數量根據自身公司實力及實際生產環境要求而靈活調整,此數字僅作參考),這些節點又按照地域劃分成了四個大區:北方(以山東,河北為主)、西南(以四川為主)、華東(以寧波,嘉興為主) 華南(以福建,湖南為主 )兼顧全國各個省份。

總體成本情況

8個單線加速節點,每個節點100Mx8,8臺雙子星伺服器,總共投資約30W(後續費用只考慮頻寬支出,約15W/年),我們應急撥款為10W,每個月CDN預算為2W。

專案進度安排:

1~4個月抓進度:特點是快速部點。這裡有個訣竅,前期可以先跟IDC按月或者季度簽約,然後通過監控看連續的節點質量,如果節點質量不佳,更換提供商,這樣損失不會太大,如果節點質量好,就半年付或者年付,這樣就可以保證質量和價效比最高;

5~8個月為完善期:根據預算,有節奏的加點,加頻寬,保證頻寬的冗餘度;

8個月以後為穩定期:根據實際情況保證節點的最大可用性,同時也提升了整體防禦能力。

如何做防護策略

開啟HAProxy的httplog功能,記錄日誌。

HAProxy的配置策略:

global
    nbproc 24
    pidfile /var/run/haproxy.pid
    daemon
    quiet
    user nobody
    group nobody
    chroot /opt/haproxy
    spread-checks 2

defaults
    log 127.0.0.1   local5
    mode    http
    option  forwardfor
    option  httplog
    option  dontlognull
    option  nolinger # reduce FIN_WAIT1
    option  redispatch
    retries 3
    option  http-pretend-keepalive
    option  http-server-close
    option  accept-invalid-http-request
    timeout client 15s
    timeout connect 15s
    timeout server 15s
    timeout http-keep-alive 15s
    timeout http-request 15s

    stats enable
    stats uri /stats
    stats realm 53KF\ Proxy\ Status
    stats refresh 60s
    stats auth admin:adminxxx

listen Web_FB 0.0.0.0:80
    option httpchk GET /alive.php HTTP/1.0

    acl invalid_referer hdr_sub(referer) -i -f /opt/haproxy/etc/bad_ref.conf
    acl invalid_url url_sub -i -f /opt/haproxy/etc/bad_url.conf
    acl invalid_methods method -i -f /opt/haproxy/etc/bad_method.conf
    block if invalid_referer || invalid_url || invalid_methods

    acl dyn_host hdr(host) -i -f /opt/haproxy/etc/notcache_host.conf
    acl static_req path_end -i -f /opt/haproxy/etc/allow_cache_file.conf
    use_backend img_srv if static_req !dyn_host

# acl shaohy
    acl geek hdr_dom(host) -i 17geek.com
    use_backend geek if geek

# backend shaohy
backend geek
    mode http
    balance source
    cookie SESSION_COOKIE insert indirect nocache
    option tcpka
    server geek_1 127.0.0.1:81 cookie geek_1 maxconn 10000 weight 8

backend img_srv
    mode http
    option tcpka
    server img_srv 127.0.0.1:88 maxconn 30000 weight 8

Varnish的配置策略:

backend h_17geek_com_1 {        
    .host="127.0.0.1";      
    .port="81";         
    .connect_timeout=300s;      
    .first_byte_timeout=300s;   
    .between_bytes_timeout=300s;    
 }                  

director geek srv {         
    { .backend=h_17geek_com_1; .weight=3;}
 }                  

sub vcl_recv {
    if (req.http.host~"^(www).?17geek.com$"){
        set req.backend=geek_srv;       
        if (req.request != "GET" && req.request != "HEAD") {
            return (pipe);              
        }                       
        if(req.url ~ "\.(php|jsp)($|\?)") {         
            return (pass);              
        }                       
        else {                      
            return (lookup);            
        }                   
    }                       
 }

對於CC型別的DDoS攻擊,通過第一篇當中介紹的監控異常流量的方法依然適用,而且優勢更明顯,因為:

  • 節點各自承擔相應的日誌記錄,分析日誌的系統開銷,發現異常請求後直接在haproxy前端做ACL規則 過濾,因此,攻擊壓力不會傳遞給後端伺服器,保證後端安全。
  • 節點受到的攻擊流量過大,機房可以拉黑IP或者引流,後端智慧DNS會自動把這個節點剔除,後續請求不要通過此節點。

在本系列的下一篇文章中,我們會介紹這個CDN架構的一些後續改進工作,包括智慧DNS、大規模日誌分析、利用OpenCDN改善後臺管理等。

作者簡介

邵海楊(個人頁面),來自杭州Linux使用者組。網名“海洋之心”,系統架構師,業餘撰稿人,致力於開源軟體及前沿科技的研究和探索。

張磊(微博部落格),來自杭州谷歌開發者社群。專注於資訊保安技術領域,曾主導多項銀行/證券行業網站安全測試和入侵取證分析專案,為四大銀行提供安全防護技術支援。目前創業做網際網路安全防護。  

相關閱讀


相關推薦

nginx ats squid varnish使用場景對比介紹

下面,我們將介紹自建CDN的具體建設規劃,主要從以下幾個方面進行考量:硬體成本、頻寬成本、架構設計、實際部署。 硬體成本 在硬體上,我們選型的需求是在1U的基礎上具有強勁的效能,同時價效比要高。 我們選擇了(強氧)雙子星伺服器,其硬體規格為:1U機身+支援雙路至

Ribbon 與 Nginx 區別與使用場景,效能介紹

伺服器端負載均衡 Nginx nginx 是客戶端所有請求統一交給 nginx,由 nginx 進行實現負載均衡請求轉發,屬於伺服器端負載均衡。 既請求由 nginx 伺服器端進行轉發。 客戶端負載均衡 Ribbon Ribbon 是從 eureka 註冊中心伺服器端上獲取服務註

squid,Varnish,nginx cache,ats,btw 區別

Varnish是一款高效能的開源HTTP加速器,挪威最大的線上報紙 Verdens Gang 使用3臺Varnish代替了原來的12臺Squid,效能比以前更好。 Squid是一個高效能的代理快取伺服器,Squid支援FTP、gopher、HTTPS和 HTTP協議 。和一

SpringMvc和servlet簡單對比介紹

標簽 word div ron -name ride path eight edi 引言:由於最近要開始springMVC的學習,所以現在先簡單介紹一下springMVC,自己也是一個初學者,所以也有很多不懂,主要是以討論為主。 一、servlet實現登錄。 咱們先來看

MySQL引擎各個引擎對比介紹

不同類 wps windows 用途 環境 lba 逗號 擴展 .frm 1.什麽是存儲引擎? 存儲引擎類似於錄制的視頻文件,可以轉換成不同的格式,如MP4,avi等格式,而存儲在我們的磁盤上也會存在於不同類型的文件系統中如:Windows裏常見的NTFS,fa

Nginx 之 全局配置段介紹

nginx main 配置1 概述Nginx的配置段不一樣,同一指令的用法不一樣。關於nginx更詳細的配置,可以查看官方幫助文檔http://nginx.org/en/docs/,本文將介紹全局配置段常見的配置指令2 全局配置段 Main 全局配置段常見的配置指令分類:.正常運行必備的配置.優化性能

nginx反代+varnish緩存+後端LAMP平臺集群實現

nginxvarnishlamp較為完善的集群實現方式,前端兩臺LVS主機進行調度轉發到前端的兩臺nginx反代服務器,由nginx反代服務器將請求資源轉發到後端的varnish主機中,若varnish緩存服務器中存在所請求資源的緩存,則由varnish主機向nginx反代服務器進行響應,再有nginx服務器

nginx反代varnish緩存服務器實現後端amp動靜分離架構

varnish1.前端nginx做調度器及反代服務器,將用戶的請求調度至後端的兩臺varnish,緩存調度算法使用一致性hash算法保證緩存命中率;2.兩臺varnish反向代理用戶請求至三個(組)後端主機,分別為存儲靜態資源(htm,html,css,js),應用程序服務器(可以部署wordpress或Di

Linux Operation學習------Squid/Varnish

c++ storage 請求 公網 host 代理配置 進程 vhost vim 1、代理服務器Squid1.1Squid服務器反向代理工作機制:代替公網用戶訪問組織內部的web服務器部署基於地區的CDN服務器軟件包:squid系統服務:squid主程序:/usr/sbin

nginx之epoll模型的詳細介紹

技術分享 處理 主動 模式 過程 管理 行處理 io復用 文件處理 首先我們一個問題一個問題講解,由淺入深的去探索epool 1、什麽是IO復用?        IO流請求操作系統內核,有串行處理和並行處理的兩種概念;串行處理,前面一個處理,後面的所有的需要等 待,所以

nginx 反向代理 proxy_pass 及對比nginx與haproxy反向代理服務器功能、性能的優劣

端口 mes ken 對比 http TP 靜態 thread post 1.使用 proxy 去請求另一個域名下的資源,如果跨域資源也部署在同一臺機器上,我們甚至可以 proxy 到 127.0.0.1,比如: location /api { proxy_pas

Nginx (五)——Rewrite 語法介紹

編譯 超過 .com 多條件 dsa 訪問日誌 cond 例子 新的 一、rewrite模塊介紹(Nginx_http_rewrite_module) nginx通過ngx_http_rewriet_module模塊支持url重寫、支持if條件判斷,但不支持else。

LoRa和NB-IoT的應用場景對比分析

很多 傳輸 會有 監管 智能 十分 還需要 問題 生產 NB-IoT和LoRa兩種技術雖然有很多共同點,但是也有不同的技術和商業特性,所以在應用場景方面會有不同。今天我們就針對二者的區別來進行闡述,並且對各自適合的應用場景進行說明。   LoRa的整個產業鏈相對已經較為成熟

Mockito各場景使用介紹

rec 調用方法 wire mount sig 測試 app something fail 場景1:某三方接口所有方法都需要Mock 實現方式1-配置configrution bean 實現方式2-在application context中配置mock bean 場景2:某

四層和七層負載均衡的特點及常用負載均衡Nginx、Haproxy、LVS對比

web服務器 keepaliv 保持 obi 負載均衡 ted 根據 方案 面向 一、四層與七層負載均衡在原理上的區別 圖示: 四層負載均衡與七層負載均衡在工作原理上的簡單區別如下圖: 概述: 1.四層負載均衡工作在OSI模型中的四層,即傳輸層。四層負載均衡只能根據報文中

layui和easyui bootstarp的對比介紹

1.1layui與easyui 簡單點說就是: 一個是鄰家女孩,尚處芳齡,簡而純 一個是彪悍婦女,昨日黃花,強而醜 easyui是功能強大但是有很多的元件使用功能是十分強大的,而layui是2016年才出來的前端框架,現在才更新到2.x版本還有很多的功能沒有完

關於String的三個類的異同點對比介紹

(1)相同點:                      這三個類String、StringBuffered、StringBuilder都是由final修飾的,所以三者均不可以被繼承。

select,poll,epoll三種IO機制對比介紹

 select,poll,epoll都是IO多路複用的機制。I/O多路複用就通過一種機制,可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程式進行相應的讀寫操作。但select,poll,epoll本質上都是同步I/O,因為他們都需要在讀寫事件就緒後自己負責進行讀寫,也就是

負載均衡器技術Nginx和F5的優缺點對比

對於資料流量過大的網路中,往往單一裝置無法承擔,需要多臺裝置進行資料分流,而負載均衡器就是用來將資料分流到多臺裝置的一個轉發器。 目前有許多不同的負載均衡技術用以滿足不同的應用需求,如軟/硬體負載均衡、本地/全域性負載均衡、更高網路層負載均衡,以及鏈路聚合技術

Mysql和Mongodb的區別與應用場景對比

寫入 通過 原子 love 區別 擴展 屬於 這樣的 管理 MySQL是關系型數據庫 優勢: 在不同的引擎上有不同 的存儲方式。 查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。 開源數據庫的份額在不斷增加,mysql的份額頁在持續增長。 缺點: 在海量數據