Nginx squid架構的七大關鍵流程介紹
Nginx squid架構的特點和一些流程的在很多人看來還是有些疑惑的,其實我們在使用中還是有不少的技巧可以掌握的。下面我們就來看看有關Nginx squid架構的相關流程介紹。
1、主域名和圖片域名分離
域名分離可以使流量分離,緩存策略分離等等,好處諸多。bbs初期一定要做好規劃,將圖片用另外的域名獨立服務,即使沒有足夠機器,域名也要先分開。另外,圖片服務器可以使用有別于主域名的另一個域名,一個好處是可以減少讀取cookie對圖片服務器的壓力,另一個是提高安全性,避免cookie泄露。#t#
2、使用LVS作為前端、二級代理和數據庫的訪問入口
使用LVS作為入口,比其他任何一種方式都來得更優質。首先LVS的負載能力很強,因為它工作在網絡協議的第4層,使用虛擬ip技術,所以它本身并不擔負任何流量的處理,僅僅是一個封包轉發的功能;第二,LVS的配置相對簡單而且穩定,一般去調整的幾率比較低,也減少了因人為等因素而出現故障;第三,LVS可以處理任何端口的負載均衡,所以它基本可以做所有服務的負載均衡和容錯。在這個架構中,除了處理http的80端口之外,LVS也處理了數據庫mysql的3306端口,在數據庫這個應用中是采用的雙機熱備策略。
3、使用Nginx squid架構作為最前端的緩存組合
在這個架構中,是最能體現app_Nginx_squid_Nginx架構的優勢的。在這個架構中的bbs運行在緩存上,用戶每發布一張帖子,都需要使用purge指令清除該帖子的緩存,如果是squid在最前端,那么每次發布一張帖子,都需要在所有的squid中調用purge指令,這樣在機器比較多的時候,purge將成為一個巨大的壓力。
所以在這里將Nginx squid架構放在最前端并使用手工url_hash的方式分流,將經常需要purge的帖子頁面和列表頁面按一個url對應一臺squid的策略,分布到各臺squid上,并提供了一臺或一組backup的squid,個別squid出現異常時將自動使用backup的機器繼續提供一段時間的服務直到其正常。在這樣的架構下,purge就不再是關鍵問題,因為一個url只會對應到一臺機器上,所以purge的時候,后端app_server找到對應的機器就可以了。
可以看到在前端中還有一臺Nginx(purge)的機器,這臺機器是專用于purge的,只要發送purge指令和需要清除的url到這臺機器,就可以找到相應的服務器并清除緩存了。另外,purge時還需要清理backup機器上的緩存,所以無論前端機器增加到多少,purge指令只會在2臺機器上執行,如果backup機器使用到2-3臺,purge指令就會在3-4臺機器上執行,仍然在可接受范圍之內。
Nginx squid架構作為前端,另有的好處:
1/使用Nginx的日志統計點擊量非常方便
2/Nginx也可作為緩存,一般可以直接負責favicon.ico和logo等固定的小圖片
4、基于Nginx的中層代理
Nginx squid架構配合搭建的web服務器前端系統
在這個架構中,假如后端的app_server上把帖子頁和列表頁直接生成了靜態頁面,那么使用中層代理再做一次url_hash,將可以解決后端app_server的硬盤容量的壓力,但是如果使用到url_hash的話,那做容錯就相對麻煩了。所以建議不要采用生成靜態頁的方式,后端的壓力一般不會非常的大,所以沒有必要生成靜態頁。假如前端squid的命中率實在太低下,造成大量穿透,可以考慮使用二級代理暫頂。
5、基于LVS的數據庫雙機熱備
在這個架構中,因為大量的并發和訪問量都由前端的緩存處理掉了,所以后端的mysql主要壓力來自于數據的寫入,所以壓力并不是非常大,并且負載比較穩定,一般不會隨著訪問量上升而提高過快,估計目前一臺64位的機器,加滿內存并使用高速的硬盤,前端負載數億訪問量時數據庫都不會出現性能問題。在數據庫這方面應主要考慮故障恢復,因為數據庫崩潰的話,按照一般使用備份恢復的做法,耗時很長而且難免丟失數據,是很棘手的問題。使用雙機熱備的方案,出現故障時首先可由一臺時刻同步著的備用數據庫即刻充當主數據庫,然后卸下的數據庫可以有充分的時間對其進行維修,所以是個很安全有效的辦法。
當然,數據庫的優化還是要細心做的,參考:
mysql性能的檢查和調優方法
細心地調一遍,性能會好很多。
6、圖片服務器
圖片服務器我在這個架構中沒有特別詳細的介紹,在大型的bbs系統下,圖片常常會出現容災現象——圖片數量嚴重超過了單臺前端服務器容納能力,導致前端服務器命中率低下。處理容災問題也是非常棘手的,往后會有更詳細的介紹。
7、簡單的點擊量統計辦法
1/使用js的script標簽訪問另一(臺)組服務器的空文件,然后定期向數據庫更新
2/在前端的Nginx上直接開啟日志功能,按需要統計點擊量的鏈接規則進行記錄,然后定期更新數據庫