1,Webserver(nginx):這一層可以輕松分布式部署的,結(jié)合智能DNS解析可以簡(jiǎn)易的防止單點(diǎn)故障、實(shí)現(xiàn)區(qū)域訪問(wèn)加速,結(jié)合lvs很容易實(shí)現(xiàn)負(fù)載均衡。這一層主要負(fù)責(zé)處理靜態(tài)請(qǐng)求和轉(zhuǎn)發(fā)php請(qǐng)求至第二層的php處理節(jié)點(diǎn),至于靜態(tài)資源地址(http://misc.xxxx.com)可以單獨(dú)拿出來(lái)部署,或者直接使用商用的云存儲(chǔ)服務(wù)(國(guó)內(nèi)七牛不錯(cuò),國(guó)外有AmazonS3)
2,php處理節(jié)點(diǎn):一個(gè)節(jié)點(diǎn)其實(shí)就是一個(gè)監(jiān)聽(tīng)端口的系統(tǒng)進(jìn)程,webserver的請(qǐng)求通過(guò)負(fù)載均衡器進(jìn)行分發(fā),很好實(shí)現(xiàn)分布式和負(fù)載均衡。類(lèi)似于php自帶的php-fpm,其實(shí)facebook出的hhvm性能非常好,但是還不是很穩(wěn)定。
3,高速緩存:用的memcached,這一層的作用主要減輕數(shù)據(jù)庫(kù)io和加快熱數(shù)據(jù)訪問(wèn)。主要有兩種方式,一種在程序的全局層面加一個(gè)緩存處理,這種方法代碼耦合度低,但是有效命中率不高,有些項(xiàng)目不一定適應(yīng),另一種是具體的數(shù)據(jù)存取加緩存處理,這種辦法耦合度較高,但是緩存命中率非常高,幾乎沒(méi)有無(wú)效緩存存在。
4,數(shù)據(jù)庫(kù) :我現(xiàn)在的項(xiàng)目數(shù)據(jù)規(guī)模不大,暫時(shí)只用了單臺(tái)數(shù)據(jù)庫(kù),但是程序邏輯上已做好了數(shù)據(jù)庫(kù)線性擴(kuò)展的準(zhǔn)備。其實(shí)數(shù)據(jù)庫(kù)層的擴(kuò)展是老生常談了,常用手段是分庫(kù)分表,這一塊需要在前期的代碼就打下基礎(chǔ),另外更平滑地手段是使用中間件,比如360的Atlas,阿里巴巴的cobar,淘寶的TDDL,中間件可以在不大范圍變更代碼的情況下擴(kuò)展,但是具體的使用場(chǎng)景還是有限的,具體項(xiàng)目還需單獨(dú)考察。
5,其他:根據(jù)不同的項(xiàng)目,架構(gòu)還可以選擇性的使用隊(duì)列,我現(xiàn)在用的beantalkd,redis也是一個(gè)很好的選擇。隊(duì)列常用的使用環(huán)境是郵件發(fā)送和站內(nèi)消息推送上面,在某些場(chǎng)景下也可以作為核心數(shù)據(jù)庫(kù)的緩沖,對(duì)應(yīng)對(duì)大并發(fā)或者突發(fā)性流量也是不錯(cuò)的選擇。