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