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