一個大型的網站網站應該由如下6個子系統組成
- 負載均衡系統
- 反向代理系統
- Web服務器系統
- 分佈式存儲系統
- 底層服務系統
- 數據庫集群系統
為什麼要做高並發系統設計?
事實上,針對於任何單一的網絡服務器程序,其可承受的同時連接數目是有理論峰值的,通過C++中對TSocket的定義類型:word,我們可以判定這個連接理論峰值是65535,也就是說,你的單個服務器程序,最多可以承受6萬多的用戶同時連接。但是,在實際應用中,能達到一萬人的同時連接並能保證正常的數據交換已經是很不容易了,通常這個值都在2000到5000之間,能達到上萬已經很不錯了。目前的門戶網站動輒幾千萬的訪問量,所以,高並發的系統架構在所難免。
整體架構
真實中的網站架構也許並不如此也可以實現高性能。但是高性能的網站莫不過如此。如下圖所示。
第一負載均衡系統
負載均衡系統分為硬件和軟件兩種。
硬件負載均衡效率高,但是價格貴,比如F5等。
軟件負載均衡系統價格較低或者免費,效率較硬件負載均衡系統低,不過對於流量一般或稍大些網站來講也足夠使用,比如lvs。
第二反向代理系統
目前普遍使用Squid或者nginx,或者Lighttpd,Varish。
這四者又各自有很大的差異。
Squid:主要用來做反向代理,使用內存+硬盤
Nginx:可以反向代理+負載均衡+WWW解析
Lighttpd:反向代理能力一般,處理FastCGI比較好,消耗內存很小
Varish:主要做內存的反向代理,性能最優
第三Web服務器系統
由Apache負責解析PHP內容,也可以用Nginx,或者Lighttpd,相對來說Apache比較穩定。
第四分佈式存儲系統
存儲量很大,經常會達到單台服務器無法提供的規模,比如相冊、視頻等應用。因此需要專業的大規模存儲系統。
第五底層服務系統
根據各自需要由C/C++開發設計供上層CGI調用。
第六數據庫系統
1)使用My SQL數據庫,考慮到Web應用的數據庫讀多寫少的特點,我們主要對讀數據庫做了優化,提供專用的讀數據庫和寫數據庫,在應用程序中實現讀操作和寫操作分別訪問不同的數據庫。
2)使用同步機制實現快速將主庫(寫庫)的數據庫複製到從庫(讀庫)。一個主庫對應多個從庫,主庫數據實時同步到從庫。
3)寫數據庫有多台,每台都可以提供多個應用共同使用,這樣可以解決寫庫的性能瓶頸問題和單點故障問題。