可伸縮性架構(gòu)指的是:不改變網(wǎng)站的軟硬件設(shè)計(jì),只通過改變部署的服務(wù)器數(shù)量就可以擴(kuò)大或縮小網(wǎng)站的服務(wù)處理能力。
大型網(wǎng)站都是從小型網(wǎng)站(一臺(tái)廉價(jià)的 PC 服務(wù)器)開啟自己的大型系統(tǒng)演化之路的。在這一過程中,最重要的技術(shù)手段就是使用服務(wù)器集群,通過不斷地向集群中添加服務(wù)器來增強(qiáng)整個(gè)集群的處理能力。只要在技術(shù)上能夠向集群中加入的服務(wù)器數(shù)量與集群的處理能力成線性關(guān)系,那么就可以利用這一手段不斷提升自己的網(wǎng)站規(guī)模,這就是系統(tǒng)的伸縮性架構(gòu)。
演化過程從總體上來說是漸進(jìn)式的,網(wǎng)站的規(guī)模和服務(wù)器的規(guī)??偸窃诓粩嗟?cái)U(kuò)大,即總是在 “伸”。但也有可能因?yàn)檫\(yùn)營(yíng)的需要(促銷活動(dòng)),在某個(gè)短時(shí)間內(nèi),網(wǎng)站的訪問量和交易規(guī)模突然爆發(fā)式增長(zhǎng),然后又回歸正常狀態(tài)。這就需要網(wǎng)站的技術(shù)架構(gòu)具有極好的伸縮性——在活動(dòng)期間向服務(wù)器集群中加入更多的服務(wù)器以滿足用戶的訪問,活動(dòng)結(jié)束后再將這些服務(wù)器下線,以節(jié)約成本。
1 設(shè)計(jì)伸縮性架構(gòu)
網(wǎng)站架構(gòu)發(fā)展史其實(shí)就是一部不斷向網(wǎng)站添加服務(wù)器的歷史。
伸縮性架構(gòu)分為兩種:
* 根據(jù)功能進(jìn)行物理分離 - 不同服務(wù)器部署不同的服務(wù)。
* 單一功能通過集群實(shí)現(xiàn) - 集群內(nèi)的多臺(tái)服務(wù)器部署相同的服務(wù),提供相同的功能。
根據(jù)功能進(jìn)行物理分網(wǎng)站發(fā)展早期,總是從現(xiàn)有的服務(wù)器中分離出部分功能與服務(wù)的:每次分離都會(huì)有更多的服務(wù)器加入,這些新增的服務(wù)器被用于處理某種特定的服務(wù)。這種伸縮性手段可以用于網(wǎng)站發(fā)展的任何階段,它可以分為兩種情況:縱向分離與橫向分離。
縱向分離(分層后分離):是將業(yè)務(wù)流程上的不同層進(jìn)行分離部署。
橫向分離(業(yè)務(wù)分割后的分離):把不同的業(yè)務(wù)模塊分離部署。橫向分離的粒度可以很小,比如一個(gè)關(guān)鍵網(wǎng)頁(yè)可以獨(dú)立部署為一個(gè)服務(wù),專門部署。
單一功能集群部署
在 “根據(jù)功能進(jìn)行物理分離” 的模式下,隨著網(wǎng)站訪問量的增長(zhǎng),即使是分離到最小粒度的獨(dú)立部署也可能無(wú)法滿足業(yè)務(wù)規(guī)模的需要。這時(shí)就必須使用集群,即把相同的服務(wù)部署在多臺(tái)服務(wù)器構(gòu)成的集群上,實(shí)現(xiàn)整體對(duì)外服務(wù)。
當(dāng)一頭牛拉不動(dòng)車時(shí),不是去尋找一頭更強(qiáng)壯的牛,而是用兩頭牛來拉車。一個(gè)服務(wù)的集群規(guī)模,需要同時(shí)考慮可用性、性能以及關(guān)聯(lián)服務(wù)集群的影響。
2 伸縮性設(shè)計(jì)之應(yīng)用服務(wù)器集群
把應(yīng)用服務(wù)器設(shè)計(jì)為無(wú)狀態(tài)模式,這樣通過負(fù)載均衡服務(wù)器,就可以把用戶請(qǐng)求轉(zhuǎn)發(fā)到不同的應(yīng)用服務(wù)器上咯:
負(fù)載均衡服務(wù)器能夠感知或配置集群的服務(wù)器數(shù)量,這樣就可以向新上線的服務(wù)器分發(fā)請(qǐng)求,并停止已下線的服務(wù)器,這樣就實(shí)現(xiàn)了應(yīng)用服務(wù)器集群的伸縮性。
負(fù)載均衡技術(shù),不僅可以實(shí)現(xiàn)伸縮性,還能改善網(wǎng)站的可用性,所以是網(wǎng)站技術(shù)的殺手锏之一哦