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