一. 項目描述nginx
隨着公司業務的逐漸增大,lnmp的服務器沒法知足日益增加的數據量,卡頓,延遲的現象時常出現,所以擴容,添加服務器勢在必行.
二. 演變歷程web
- 單機版LNMP
- 獨立數據庫服務器
- web服務器集羣與Session保持
- 動靜分離,數據庫集羣
- 各類緩存服務與業務模型
樣例展現數據庫
1.單機版LNMP
用戶量少時使用,簡單、成本低、存在單點故障。緩存
2.獨立數據庫服務器
獨立數據庫服務器是將網站靜態文件、代碼文件等資料與數據庫分離的架構,當用戶量增長時單機的處理能力有限,PHP或JAVA代碼的執行須要消耗大量CPU資源,數據庫的增刪改查須要調用大量的內存資源,將二者分離能夠減輕服務器的壓力,其拓撲結構如圖-2所示。
Web服務器和數據庫服務器的壓力均可以獲得有效改善,訪問量有所增長。可是服務器依然存在單點故障問題。服務器
3.web服務器集羣與Session保持
咱們能夠經過Nginx、Haproxy代理服務器實現Web負載均衡集羣,也可使用LVS調度器實現Web負載均衡集羣。部署完Web集羣后還須要考慮如何進行Session會話保持,方法不少,如:根據源IP保持,代理服務器重寫Cookie信息,共享文件系統保存session,使用數據庫共享session等等。
可是若是隻有一臺調度器依然會致使單點故障的問題,所以還須要使用Keepalived或Heartbeat之類的軟件進行高可用配置網絡
對於網站內容而言能夠分離爲動態頁面和靜態頁面,靜態頁面就須要數據文件,動態頁面則須要CPU解析代碼,須要消耗大量的CPU資源,所以能夠將靜態和動態分離爲兩組服務器,動態頁面有腳本代碼組成,是一種基於網頁的應用程序session
4.動靜分離,數據庫集羣
隨着服務器的增長,雖然性能與併發量獲得了明顯的提高,可是數據的一致性、管理的便利性成爲了新的問題,所以就須要增長統一的存儲服務器,實現數據的同步一致,可使用NFS,GlusterFS、Ceph等軟件實現該功能架構
但此時全部應用服務器都鏈接一臺數據庫服務器進行讀寫操做,並且後期隨着數據庫中的數據不斷增長,會致使數據庫成爲整個網站的瓶頸!這就須要咱們對數據進行分庫分表,建立數據庫主從或者數據庫集羣,實現讀寫分離併發
5.各類緩存服務與業務模型
對於靜態數據咱們能夠經過VARnish,squid或者nginx進行緩存,將數據緩存到距離用戶更近的位置,構建CND(內容分發網絡)框架.
對於傳統的SQL數據庫而言,咱們也能夠經過增長NoSQL數據庫,實現數據緩存的功能,提示數據庫的訪問速度.
對數據庫的優化放到後面的文章負載均衡