《大型網(wǎng)站技術(shù)架構(gòu)》讀書(shū)筆記 - 網(wǎng)站的技術(shù)升級(jí)路線(xiàn)
本文描述網(wǎng)站從小到大演變過(guò)程中的技術(shù)升級(jí)路線(xiàn),;
1.初始架構(gòu)
一臺(tái)服務(wù)器,,應(yīng)用、DB,、文件都在一塊,,使用經(jīng)典的LAMP模式構(gòu)建整個(gè)站點(diǎn);
優(yōu)點(diǎn)很明顯,,開(kāi)發(fā)部署都簡(jiǎn)單,,船小好掉頭,做不起來(lái)也虧不了多少,;
2.應(yīng)用服務(wù)與數(shù)據(jù)分離
隨著訪(fǎng)問(wèn)量的增長(zhǎng),,出現(xiàn)問(wèn)題了:web性能變差,數(shù)據(jù)存儲(chǔ)空間不夠
這時(shí)候需要更多的服務(wù)器,,首要任務(wù)是將數(shù)據(jù)庫(kù)分離出來(lái),,單獨(dú)占用一臺(tái)服務(wù)器,如果文件讀寫(xiě)多,,需要增加文件服務(wù)器,;不同的服務(wù)器對(duì)硬件的要求也不盡相同:
應(yīng)用服務(wù)器需要處理大量業(yè)務(wù)邏輯,這需要更強(qiáng)的CPU,;
數(shù)據(jù)庫(kù)服務(wù)器需要快速磁盤(pán)檢索和數(shù)據(jù)緩存,,這需要更快的硬盤(pán)和更大的內(nèi)存;
文件服務(wù)器需要存儲(chǔ)用戶(hù)上傳的文件,,需要更大的硬盤(pán),;
3.使用緩存改善網(wǎng)站性能
訪(fǎng)問(wèn)量持續(xù)增長(zhǎng),web性能再次變差,;
考慮使用緩存改善網(wǎng)站性能;web的訪(fǎng)問(wèn)規(guī)律:80%業(yè)務(wù)訪(fǎng)問(wèn)集中在20%的數(shù)據(jù)上,;使用緩存,,數(shù)據(jù)庫(kù)壓力得到有效緩解;
緩存可通過(guò)以下方式增加:
增加應(yīng)用服務(wù)器本地緩存,,這個(gè)最直接,,也最簡(jiǎn)單;
增加遠(yuǎn)程分布式緩存集群,;當(dāng)本地的內(nèi)存不足以放下需要緩存的數(shù)據(jù)時(shí),,就只有通過(guò)分布式;
使用類(lèi)似Memcached之類(lèi)的開(kāi)源緩存產(chǎn)品,,緩存更多的數(shù)據(jù),;
4.應(yīng)用服務(wù)器集群化
隨著網(wǎng)站的成長(zhǎng),單一應(yīng)用服務(wù)器成為網(wǎng)站瓶頸,;
解決方案:應(yīng)用服務(wù)器集群化提高網(wǎng)站并發(fā)處理能力,;
做成集群的關(guān)鍵是增加負(fù)載均衡服務(wù)器來(lái)調(diào)度應(yīng)用集群
5.數(shù)據(jù)庫(kù)讀寫(xiě)分離
問(wèn)題:當(dāng)增加緩存之后,,隨著訪(fǎng)問(wèn)量的持續(xù)增長(zhǎng),數(shù)據(jù)庫(kù)再次出現(xiàn)問(wèn)題:數(shù)據(jù)庫(kù)負(fù)載壓力過(guò)高
解決方案:數(shù)據(jù)庫(kù)讀寫(xiě)分離
利用數(shù)據(jù)庫(kù)主從熱備功能,,實(shí)現(xiàn)讀寫(xiě)分離,;讀寫(xiě)分離的細(xì)節(jié)這篇文章講的很清楚了,就不多說(shuō),,有需要的請(qǐng)參考:http://www.cnblogs.com/qlee/archive/2011/04/08/2009738.html
6.使用反向代理和CDN
問(wèn)題:網(wǎng)站做大,,全國(guó)甚至全球各區(qū)域的訪(fǎng)問(wèn)量都來(lái)了,但是各區(qū)域的訪(fǎng)問(wèn)速度差別巨大,;
解決方案:使用反向代理和CDN
CDN和反向代理基本原理都是緩存,,CDN部署在網(wǎng)絡(luò)提供商的機(jī)房,用戶(hù)請(qǐng)求最近的節(jié)點(diǎn)訪(fǎng)問(wèn),;而反向代理則部署在網(wǎng)站的中心機(jī)房,;
7.使用分布式FS和分布式DBS
問(wèn)題:應(yīng)用集群如果將session管理做好,或做成無(wú)狀態(tài)的應(yīng)用集群,,可達(dá)到線(xiàn)性伸縮,;而數(shù)據(jù)庫(kù)的壓力卻不是很好解決;
解決方案:使用分布式數(shù)據(jù)庫(kù)拆分,,可使用的方法有:
單表拆分:將不同的表放到不同的庫(kù)中,,從而降低單個(gè)數(shù)據(jù)庫(kù)的結(jié)點(diǎn)的負(fù)載;這樣帶來(lái)的問(wèn)題就是不同庫(kù)中的表無(wú)法做join操作,;
另一種方法就是按業(yè)務(wù)拆分,,將屬于同一業(yè)務(wù)的表劃分到一個(gè)庫(kù)中,從而有效降低數(shù)據(jù)庫(kù)負(fù)載,,同時(shí)在業(yè)務(wù)邏輯實(shí)現(xiàn)上不至于過(guò)于復(fù)雜,;
8.使用NoSQL和搜索引擎
問(wèn)題:出現(xiàn)海量數(shù)據(jù)存儲(chǔ)和檢索的需求
解決方案:使用NoSQl產(chǎn)品分布式部署來(lái)支持海量數(shù)據(jù)的查詢(xún)和存儲(chǔ);
9.業(yè)務(wù)拆分
按照業(yè)務(wù)來(lái)劃分子系統(tǒng),,按產(chǎn)品線(xiàn)劃分系統(tǒng),,通過(guò)分布式服務(wù)來(lái)協(xié)同工作;
附:思維導(dǎo)圖
卓越亞馬遜地址: 《大型網(wǎng)站技術(shù)架構(gòu)》
點(diǎn)擊查看原圖