一個大型的網站網站應該由以下6個子系統組成html
負載均衡系統nginx
反向代理系統數據庫
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)使用MySQL數據庫,考慮到Web應用的數據庫讀多寫少的特色,咱們主要對讀數據庫作了優化,提供專用的讀數據庫和寫數據庫,在應用程序中實現讀操做和寫操做分別訪問不一樣的數據庫。
2)使用同步機制實現快速將主庫(寫庫)的數據庫複製到從庫(讀庫)。一個主庫對應多個從庫,主庫數據實時同步到從庫。
3)寫數據庫有多臺,每臺均可以提供多個應用共同使用,這樣能夠解決寫庫的性能瓶頸問題和單點故障問題。
其它:http://wenku.baidu.com/view/281da442b307e87101f69646.html