水平擴(kuò)展VS垂直擴(kuò)展

當(dāng)一個(gè)開發(fā)人員提升計(jì)算機(jī)系統(tǒng)負(fù)荷時(shí)兜蠕,通常會考慮兩種方式垂直擴(kuò)展和水平擴(kuò)展扰肌。選用哪種策略主要依賴于要解決的問題以及系統(tǒng)資源的限制。在這篇文章中我們將講述這兩種策略并討論每種策越的優(yōu)缺點(diǎn)熊杨。如果你已經(jīng)有一個(gè)軟件系統(tǒng)需要不斷成長曙旭,那么你將有意或者無意中選擇這兩種策略中的一種。

垂直擴(kuò)展

在垂直擴(kuò)展模型中晶府,想要增加系統(tǒng)負(fù)荷就意味著要在系統(tǒng)現(xiàn)有的部件上下工夫桂躏,即通過提高系統(tǒng)部件的能力來實(shí)現(xiàn)。例如川陆,假設(shè)你現(xiàn)在負(fù)責(zé)一批木材采伐的操作剂习。

在這個(gè)例子中,我們假設(shè)有3輛卡車较沪,每輛車一次可以運(yùn)25根木材鳞绕,計(jì)算花費(fèi)1小時(shí)的情況下可以運(yùn)送到指定地點(diǎn)等待處理的木材數(shù)量。通過這些數(shù)字我們可以算出我們系統(tǒng)最大的負(fù)荷量:

3輛卡車 * 25根木材 * 1小時(shí)=75根木材/小時(shí)

如果我們選擇垂直擴(kuò)展模型购对,那么我們將怎么做來使我們每小時(shí)可以處理150根木材猾昆?我們需要至少做以下兩件事中的一件:

使每輛卡車的運(yùn)輸量增加一倍(50棵樹每小時(shí)),或者使每輛卡車的運(yùn)輸時(shí)間減半(每輛卡車30分鐘)骡苞。

3輛卡車 * 50棵樹 * 1小時(shí) = 150棵樹/每小時(shí)

或者

3輛卡車 * 25棵樹 * 30分鐘 = 150棵樹/每小時(shí)

我們沒有增加系統(tǒng)的成員數(shù)垂蜗,但是我們通過增加系統(tǒng)成員的生產(chǎn)效率來獲得期望的負(fù)荷量。

水平擴(kuò)展

在水平擴(kuò)展模型中解幽,我們不是通過增加單個(gè)系統(tǒng)成員的負(fù)荷而是簡單的通過增加更多的系統(tǒng)成員來實(shí)現(xiàn)贴见。也就是說,在以上運(yùn)送木材的例子中躲株,通過增加卡車的數(shù)量來運(yùn)送木材片部。因此,當(dāng)我們需要將負(fù)荷從75棵樹每小時(shí)增加到150棵樹每小時(shí)霜定,那么只需要增加3輛卡車档悠。

6輛卡車 * 25棵樹 * 1小時(shí) = 150棵樹/每小時(shí)

假如我們已經(jīng)選擇了垂直擴(kuò)展方式,那么我們想要每小時(shí)處理150棵被砍伐的樹時(shí)需要怎么做呢望浩?我們需要做到以下兩方面之一:要么使每輛卡車的運(yùn)輸量翻倍(50棵木材一次)辖所,要么使每輛開車的運(yùn)輸時(shí)間減半(30分鐘)。

3輛卡車 * 50棵樹 * 1小時(shí) = 150棵樹/每小時(shí)

或者

3輛卡車 * 50棵樹 * 30分鐘 = 150棵樹/每小時(shí)

在這個(gè)例子中磨德,系統(tǒng)每個(gè)成員的生產(chǎn)力依然沒變缘回,我們通過增加更多的卡車來提高系統(tǒng)的能力吆视。

擴(kuò)展你的web數(shù)據(jù)庫

通過對水平擴(kuò)展和垂直擴(kuò)展的基本了解,下面讓我們來關(guān)注web系統(tǒng)的擴(kuò)展酥宴。一個(gè)網(wǎng)站通常有很多組件都需要去考慮它們的擴(kuò)展性啦吧,但是我通常喜歡關(guān)注處在最邊緣的一個(gè):數(shù)據(jù)庫。為什么數(shù)據(jù)庫是最邊緣的拙寡?因?yàn)閿?shù)據(jù)庫通常是共享資源授滓,是幾乎所有請求最終的連接點(diǎn)。

你的系統(tǒng)是什么類型的倒庵?

在擴(kuò)展你的數(shù)據(jù)庫時(shí)褒墨,你必須要問的一個(gè)重要問題是:“我所面對的系統(tǒng)是什么類型的?”你所面對的是一個(gè)讀操作多還是寫操作多的系統(tǒng)擎宝?讀操作多的網(wǎng)站一般包括:在線商城郁妈,在商城里用戶大部時(shí)間是在瀏覽(讀操作),只有少數(shù)時(shí)間在付款(寫操作)绍申、或者博客噩咪,在博客上人們大部分時(shí)間是在瀏覽博文(讀操作),只有少數(shù)時(shí)間是在評論或者發(fā)表博文(寫操作)极阅。相反的胃碾,關(guān)于寫操作非常多的很好的例子包括:信用卡交易處理器,這個(gè)系統(tǒng)的主要負(fù)載時(shí)在處理記錄交易(寫操作)筋搏,偶爾會查找交易(讀操作)仆百、或者Google分析,主要工作實(shí)在記錄業(yè)務(wù)數(shù)據(jù)(寫操作)奔脐,偶爾會展示分析圖(讀操作)俄周。

了解你所創(chuàng)建的網(wǎng)站是什么類型的,可以在網(wǎng)站成長過程中幫助你選擇正確的技術(shù)髓迎。

讀操作擴(kuò)展

如果你的系統(tǒng)讀操作非常多峦朗,那么通過關(guān)系型數(shù)據(jù)庫如MySQL或者PostgreSql來垂直擴(kuò)展數(shù)據(jù)存儲是一個(gè)不錯(cuò)的選擇。結(jié)合你的關(guān)系型數(shù)據(jù)庫通過使用memcached或者CDN來構(gòu)建一個(gè)健壯的緩存系統(tǒng)排龄,那么你的系統(tǒng)將非常容易擴(kuò)展波势。在這種模式中,如果數(shù)據(jù)庫超負(fù)荷運(yùn)行橄维,那么將更多的數(shù)據(jù)放入緩存中來緩解系統(tǒng)的讀壓力尺铣。當(dāng)沒有更多的數(shù)據(jù)往緩存中放時(shí),可以更換更快的數(shù)據(jù)存儲硬件或者買更多核的處理器來獲取更多的運(yùn)行通道争舞。摩爾定律使通過這種方法來垂直擴(kuò)展變得和購買更好的硬件一樣簡單迄埃。

寫操作擴(kuò)展

如果你的系統(tǒng)寫操作非常多,那么你可能更希望考慮使用可水平擴(kuò)展的數(shù)據(jù)存儲方式兑障,比如Riak,Cassandra或者HBase。和大多數(shù)關(guān)系型數(shù)據(jù)管理系統(tǒng)不同流译,這種數(shù)據(jù)存儲隨著增長增加更多的節(jié)點(diǎn)逞怨。由于你的系統(tǒng)大部分時(shí)間是在寫入,所以緩存曾并不能像在讀操作比較頻繁的系統(tǒng)中起到那么大作用福澡。很多寫頻繁的系統(tǒng)一開始使用垂直擴(kuò)展的方式叠赦,但是很快發(fā)現(xiàn)并不能根本解決問題。為什么革砸?因?yàn)橛脖P數(shù)和處理器數(shù)在某一點(diǎn)達(dá)到平衡除秀,在這個(gè)邊界上再增加一個(gè)處理器或者一個(gè)硬盤都會是每秒鐘的I/O操作數(shù)成指數(shù)性增長。相反算利,如果對寫頻繁的系統(tǒng)采取水平擴(kuò)展策略册踩,那么你將達(dá)到一個(gè)拐點(diǎn),在這個(gè)拐點(diǎn)之后如果在增加一個(gè)節(jié)點(diǎn)都遠(yuǎn)比使用更多的硬盤來的實(shí)惠效拭。

其他注意事項(xiàng)

另一件事需要記住的是每種擴(kuò)展策略下預(yù)想不到的開銷暂吉。采用垂直擴(kuò)展的系統(tǒng)將開銷凡在單獨(dú)的組件上。當(dāng)我們?nèi)ヌ嵘到y(tǒng)負(fù)荷時(shí)缎患,這些單獨(dú)的組件需要在管理上花費(fèi)更多慕的。拿我們運(yùn)送木材的例子來說,如果需要使每輛卡車的貨運(yùn)量翻倍挤渔,那么我們需要更寬肮街、更長、或者更高的車廂判导。也許有的路因?yàn)闃虻母叨葘囕v高度有要求嫉父,或者基于巷子寬度車寬不能太大,又或者由于機(jī)動車安全駕駛要求車廂不能太長骡楼。這里的限制就是對單個(gè)卡車做垂直擴(kuò)展做的什么程度熔号。同樣的概念延伸到服務(wù)器垂直擴(kuò)展:更多的處理器要求更多的空間,進(jìn)而要求更多的服務(wù)器存儲架鸟整。

相反的引镊,采用水平擴(kuò)展的系統(tǒng)將額外的開銷放在系統(tǒng)中連接起來的共享組件上。當(dāng)我們?nèi)ヌ嵘到y(tǒng)負(fù)荷時(shí)篮条,共享的開銷和新增加的成員之間的協(xié)調(diào)性有關(guān)弟头。在我們運(yùn)送木材的例子中,當(dāng)我們在路上增加更多卡車時(shí)涉茧,那么路就是共享資源也就成了約束條件赴恨。這條路上適合同時(shí)跑多少量卡車?我們是否有足夠的安全緩沖區(qū)使得所有的車可以同時(shí)裝運(yùn)木材伴栓?如果再來看我們水平擴(kuò)展的數(shù)據(jù)庫系統(tǒng)伦连,那么經(jīng)常被忽略的開銷就是服務(wù)器同時(shí)連接時(shí)的網(wǎng)絡(luò)開銷(譯者注:網(wǎng)絡(luò)為各個(gè)系統(tǒng)的共享資源)雨饺。當(dāng)你為系統(tǒng)增加更多的節(jié)點(diǎn)時(shí),共享資源的負(fù)荷也就越來越重惑淳,通常呈非線性改變额港。

綜合說明

和計(jì)算機(jī)的大多數(shù)東西一樣,好的解決辦法通常并不像我這里列出來的這么簡單歧焦。而我在這里嘗試簡化這種思想用來來說明這中概念而不是講具體的解決辦法移斩。擴(kuò)展是個(gè)困難的問題,這是個(gè)需要在實(shí)際處理的每個(gè)步驟中都要思考的問題绢馍。擴(kuò)展策略沒有魔法向瓷,也沒有魔法般的軟件幫你建立一個(gè)完整可靠的可擴(kuò)展系統(tǒng)。就像擴(kuò)展中的其他問題一樣舰涌,一個(gè)大的解決方案通常是由很多個(gè)一起協(xié)調(diào)工作的小的解決辦法組成的猖任。這需對每一個(gè)中解決方案進(jìn)行精心正確的設(shè)計(jì)和開發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舵稠,一起剝皮案震驚了整個(gè)濱河市超升,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哺徊,老刑警劉巖室琢,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異落追,居然都是意外死亡盈滴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門轿钠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巢钓,“玉大人,你說我怎么就攤上這事疗垛≈⑿冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵贷腕,是天一觀的道長背镇。 經(jīng)常有香客問我,道長泽裳,這世上最難降的妖魔是什么瞒斩? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涮总,結(jié)果婚禮上胸囱,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑梗,他們只是感情好烹笔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布裳扯。 她就那樣靜靜地躺著,像睡著了一般谤职。 火紅的嫁衣襯著肌膚如雪嚎朽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天柬帕,我揣著相機(jī)與錄音,去河邊找鬼狡门。 笑死陷寝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的其馏。 我是一名探鬼主播凤跑,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叛复!你這毒婦竟也來了仔引?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤褐奥,失蹤者是張志新(化名)和其女友劉穎咖耘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撬码,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡儿倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呜笑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夫否。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叫胁,靈堂內(nèi)的尸體忽然破棺而出凰慈,到底是詐尸還是另有隱情,我是刑警寧澤驼鹅,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布微谓,位于F島的核電站,受9級特大地震影響谤民,放射性物質(zhì)發(fā)生泄漏堰酿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一张足、第九天 我趴在偏房一處隱蔽的房頂上張望触创。 院中可真熱鬧,春花似錦为牍、人聲如沸哼绑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抖韩。三九已至蛀恩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茂浮,已是汗流浹背双谆。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席揽,地道東北人顽馋。 一個(gè)月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像幌羞,于是被迫代替她去往敵國和親寸谜。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容