網(wǎng)站開(kāi)發(fā)初期艰亮,我們習(xí)慣性把所有代碼都寫(xiě)到一個(gè)項(xiàng)目中闭翩。
前臺(tái)、后臺(tái)迄埃、緩存疗韵、數(shù)據(jù)庫(kù)、靜態(tài)資源... 等等侄非。
網(wǎng)站系統(tǒng)物理分離
慢慢的系統(tǒng)會(huì)原來(lái)越大蕉汪,很顯然需要面對(duì)大量用戶的高并發(fā)訪問(wèn)和存儲(chǔ)海量數(shù)據(jù)。
很多用戶的請(qǐng)求逞怨,不可能在一臺(tái)服務(wù)器上完成者疤。
很多緩存數(shù)據(jù),數(shù)據(jù)庫(kù)數(shù)據(jù)叠赦,也不可能在一臺(tái)服務(wù)器上完成驹马。
這是,網(wǎng)站的伸縮性架構(gòu)就變得尤為重要除秀。
如下圖糯累。
原理
我們通過(guò)多臺(tái)服務(wù)器組裝一個(gè)整體共同提供服務(wù),通過(guò)不斷地向集群中加入服務(wù)器册踩,來(lái)緩解不斷上升的
用戶并發(fā)訪問(wèn)壓力和不斷增長(zhǎng)的數(shù)據(jù)存儲(chǔ)需求寇蚊。
衡量架構(gòu)伸縮性的主要標(biāo)準(zhǔn):
是否容易向集群中添加新的服務(wù)器。
當(dāng)加入新的服務(wù)器棍好,是否可以提供和原來(lái)的服務(wù)器無(wú)差別的服務(wù)。
集群中可容納的總的服務(wù)器數(shù)量是否有限制允耿。
應(yīng)用服務(wù)器集群
只要服務(wù)器上不保存數(shù)據(jù)借笙,所有的服務(wù)器都是對(duì)等的,通過(guò)負(fù)載均衡
設(shè)備就可以向集群中增加服務(wù)器较锡。
關(guān)系型數(shù)據(jù)庫(kù)集群(MYSQL)
關(guān)系型數(shù)據(jù)庫(kù)的集群伸縮性方案必須在數(shù)據(jù)庫(kù)之外實(shí)現(xiàn)业稼,通過(guò)路由分區(qū)等手段將部署有多個(gè)數(shù)據(jù)的服務(wù)器組成一個(gè)集群。
例如:Mysql 等蚂蕴。
非關(guān)系型數(shù)據(jù)庫(kù)集群(NOSQL)
非關(guān)系型數(shù)據(jù)庫(kù)先天就是為海量數(shù)據(jù)庫(kù)準(zhǔn)備的低散,因此對(duì)伸縮性的支持非常好。
例如:Redis骡楼、Memcache 等等熔号。
緩存服務(wù)器集群
加入新的服務(wù)器可能會(huì)導(dǎo)致緩存路由失效,進(jìn)而導(dǎo)致集群中大部分緩存數(shù)據(jù)都無(wú)法訪問(wèn)鸟整。
部署前需要改進(jìn)緩存路由算法保證緩存數(shù)據(jù)的可訪問(wèn)性引镊。
靜態(tài)資源服務(wù)器集群
比如 CSS,JS,Img 等資源進(jìn)行部署到服務(wù)器集群弟头,降低流量并提高頁(yè)面呈現(xiàn)速度吩抓。
網(wǎng)站的縱向分離
將業(yè)務(wù)處理流程上的不同部分進(jìn)行分離部署,實(shí)現(xiàn)系統(tǒng)伸縮性赴恨。
網(wǎng)站的橫向分離
將不同業(yè)務(wù)模塊進(jìn)行分離部署疹娶,實(shí)現(xiàn)系統(tǒng)伸縮性。
單一功能通過(guò)集群規(guī)模進(jìn)行伸縮伦连。
將不同功能分離部署可以實(shí)現(xiàn)一定程度的伸縮性雨饺,但是隨著網(wǎng)站訪問(wèn)量的逐步增加,即使分離到最新粒度的獨(dú)立部署
單一服務(wù)器也不能滿足業(yè)務(wù)規(guī)模的要求除师。
因此沛膳,必須使用服務(wù)器集群,即將相同服務(wù)部署在多臺(tái)服務(wù)器上構(gòu)成一個(gè)集群整體對(duì)外服務(wù)汛聚。
比如:搜索功能锹安。
如果一臺(tái)服務(wù)器可以提供每秒1000
次的請(qǐng)求服務(wù),如果網(wǎng)站高峰期倚舀,每秒搜索訪問(wèn)量為10000
次叹哭。
那么,就需要你部署10臺(tái)服務(wù)器構(gòu)成一個(gè)集群痕貌。
同理风罩,緩存服務(wù)器也會(huì)出現(xiàn)這種情況。
事實(shí)上舵稠,計(jì)算一個(gè)服務(wù)的集群規(guī)模超升,需要同時(shí)考慮其對(duì)可用性、性能的影響及關(guān)聯(lián)服務(wù)集群的影響哺徊。
總結(jié)
集群伸縮性室琢,可以分為應(yīng)用服務(wù)器集群伸縮性和數(shù)據(jù)服務(wù)器集群伸縮性。
這兩種集群由于對(duì)數(shù)據(jù)狀態(tài)管理的不同落追,技術(shù)實(shí)現(xiàn)也有很大的區(qū)別盈滴。
大家,可以根據(jù)每一種具體的架構(gòu)設(shè)計(jì)進(jìn)行深究轿钠。
文章借鑒于書(shū)籍《大型網(wǎng)站技術(shù)架構(gòu)》巢钓。
Thanks ~