一個支撐千萬級PV的網站是非常考驗一個架構是否成熟、健壯(本文不涉及軟件架構的層面,有興趣也可以討論)。現拋出一個系統層面的架構,不保證是最優的 方案,但也許適合你。理由是再優秀的架構都不具備通用性,需要根據每種應用特點針對性來設計。希望起到拋磚引玉的作用,大家多多參與,發表意見。
架構說明: 1)架構中直接引入軟件名稱的模塊,是個人推薦使用的,如Haproxy、Hadoop等; 2)關於全局負載均衡,看成本投入情況,可以使用商業的產品,如F5-GTM,開源方案便是自搭智能DNS; 3)本地負載均衡方案,可以考慮F5-LTM或成熟的開源解決方案LVS; 4)代理層為什么推薦大家使用Haproxy?Haproxy是一個非常優秀的反向代理軟件,十分高效、穩定。國內top 10的互聯網公司都有在使用; 5)緩存層可以使用Squid或Varnish,個人更傾向Varnish。配置靈活、運行穩定,提供非常便利的管理接口。為啥在緩存層前面加一層代理?優點非常多,列舉如下:
- 根據應用配置URI路由規則,集中熱點來提高后端緩存的命中率;
- 輕松划分網站頻道、版塊,更好對應用進步組織、規划;
- 對URI進行一般性安全過濾,抵御注入攻擊;
- 彈性調配硬件資源,應對突發事件產生大流量;
- 可回收寶貴的公網IP資源;
6)應用層開源技術方案非常多且成熟,在此不詳細描述; 7)數據庫層主流開源解決方案Mysql是首選,主從復制(一主對多從)是目前比較靠譜的模式; 8)關於Nosql,應用場景不多說,可參考“給部門做的Mongodb技術交流PPT”文章,redis、memcached等作為熱點數據存儲、數據庫緩存都非常理想; 9)內網DNS扮演的角色非常重要,一定要消滅code中出現的內網IP地址,很大程度減少因IP變更、服務器故障而修改源碼的情況,同時也便於維護; 10)內網LB適用在內部WEB接口、多台數據庫Slave、多台Nosql Slave、公共服務等應用的負載均衡,可以使用LVS、Haproxy來實現,可用性要求不高的應用可行直接使用Localhost DNS輪詢; 11)hadoop適合海量數據的存儲與處理,如做網站日志分析、用戶數據挖掘等; 12)管理集群,平台的核心,運維的陣地;