一張圖講清楚高可用、高效能、可擴充套件的WEB系統架構
前言:最近在與廣東網際網路基地一起進行無線城市集中平臺的建設,在系統設計、架構調優上做了很多的探索,也在系統整合測試和效能調優中遭遇了很多的煩惱,心裡有一些所得所悟,希望與大家共同學習探討。
WEB系統最容易出現效能故障的點在哪裡? 有很多人對此不知其然,或知其然而不知其所以然。
下面這張圖,是在一個大型的WEB系統設計中,經典的架構設計和分層模式。
1) 前端負載均衡: 有錢的用硬體四層交換(想當年雅虎中國2000臺伺服器,只用了四臺Alteon就搞定了),沒錢的用軟體負載均衡(LVS、Nginx)
2) 多級快取:首先要充分利用瀏覽器的快取能力,也就是Cookie,然後要在服務端利用頁面快取機制,前些年大家喜歡用Squid
3)應用伺服器層面:先考慮一下你的靜態頁面與動態頁面的佔比,然後考慮一下如何儘量實現動態頁面靜態化,把靜態的部署到Apache上,動態的部署到Tomcat上吧。如果你是一個像Flicker那樣的圖片共享網站,必須考慮設定單獨的圖片伺服器,這是淘寶血淚史告訴我們的真理。
4)現在要考慮資料庫的選型問題了:採用關係型資料庫還是非關係型資料庫完全取決於你的業務場景,如果你要實現實時要求高,資料一致性要求高的場景,關係型資料庫;如果你要實現海量資料的查詢和高併發,非關係型資料庫(考慮Facebook一張表有一億使用者,如果用關係型資料庫查詢。磁碟IO也快撐不住了,而非關係型資料庫則完全沒有這個問題);
5)資料庫效能問題之外務必考慮清楚資料庫的併發效能:通常會採用生產資料庫與查詢資料庫分離的方式,也就是著名的MySQL的單主多從服務方式。為了實現高可用性HA,有的網站比如淘寶網,在Master之間也會實現叢集部署。
6)資料庫叢集和庫表雜湊: 上面提到的資料庫叢集由於在架構,