可擴(kuò)展性正是如今軟件設(shè)計(jì)領(lǐng)域值得優(yōu)先考慮的要素。然而,計(jì)算機(jī)科學(xué)家們還無法了解一套單獨(dú)的架構(gòu)如何才能擴(kuò)展至各類應(yīng)用環(huán)境當(dāng)中。相反,我們在數(shù)量繁多的方案中所設(shè)計(jì)出的可擴(kuò)展性架構(gòu),往往以業(yè)界較為通用的已知可擴(kuò)展模式及個(gè)人偏好為標(biāo)準(zhǔn)。本文列出了十大大家耳熟能詳?shù)目蓴U(kuò)展性架構(gòu),以供借鑒。

  對于大多數(shù)架構(gòu)師而言,“可擴(kuò)展性”在軟件架構(gòu)方面是虛無縹緲的說法。這毫不奇怪,因?yàn)榭蓴U(kuò)展性正是如今軟件設(shè)計(jì)領(lǐng)域值得優(yōu)先考慮的要素。然而,計(jì)算機(jī)科學(xué)家們還無法了解一套單獨(dú)的架構(gòu)如何才能擴(kuò)展至各類應(yīng)用環(huán)境當(dāng)中。相反,我們在數(shù)量繁多的方案中所設(shè)計(jì)出的可擴(kuò)展性架構(gòu),往往以業(yè)界較為通用的已知可擴(kuò)展模式及個(gè)人偏好為標(biāo)準(zhǔn)。簡單來講,打造一套具備可擴(kuò)展性的系統(tǒng)已經(jīng)變得更像是一門藝術(shù)而不單單是技術(shù)。

  我們常常會通過觀摩杰作體會并學(xué)習(xí)藝術(shù)的精髓,而可擴(kuò)展性也應(yīng)該遵循同樣的路線!

  在這篇文章中,我將列出數(shù)款為大家所耳熟能詳?shù)目蓴U(kuò)展性架構(gòu)。通常情況下,架構(gòu)師們完全可以借鑒已知的可擴(kuò)展架構(gòu)模式,進(jìn)而創(chuàng)造出新的可擴(kuò)展架構(gòu)。

  LB (負(fù)載平衡器) + 無共享單位 - 該模型中包含一系列單元,各單元彼此間不共享任何內(nèi)容,且一致指向一個(gè)將輸入文訊按一定條件發(fā)往單元處的負(fù)載平衡器(這構(gòu)成一個(gè)循環(huán),以負(fù)載等情況為基礎(chǔ))。每個(gè)單元可以是一個(gè)單獨(dú)的節(jié)點(diǎn)或是緊密耦合的節(jié)點(diǎn)所構(gòu)成的集群。用戶可以使用DNS循環(huán)、硬件負(fù)載平衡器或者軟件負(fù)載平衡器達(dá)成負(fù)載平衡效果。創(chuàng)建一套負(fù)載均衡的層次結(jié)構(gòu),并在其中結(jié)合前面提到的各種負(fù)載平衡器也是可行的。在由Michael Stonebraker撰寫的《 無共享體系架構(gòu)實(shí)例 》一文中,專門討論了此類架構(gòu)。

  LB + 無狀態(tài)節(jié)點(diǎn) + 可擴(kuò)展存儲 - 傳統(tǒng)的 三層式Web架構(gòu) 使用的是這種模型。該模型包括數(shù)個(gè)與可擴(kuò)展存儲交互的無狀態(tài)節(jié)點(diǎn)以及一個(gè)分布于節(jié)點(diǎn)間負(fù)載中的負(fù)載平衡器。在這一模型中,存儲通常作為限制因素存在,但NoSQL存儲則可以利用這套模型創(chuàng)建出具備相當(dāng)可擴(kuò)展性的系統(tǒng)。

  點(diǎn)對點(diǎn)架構(gòu) (分布式Hash列表 (簡稱DHT)以及內(nèi)容尋址網(wǎng)絡(luò)(簡稱CAN)) -這套模型提供了一些傳統(tǒng)的可擴(kuò)展算法,這些算法的各個(gè)方面幾乎全部按對數(shù)進(jìn)行了等比例增加。舉例來說,像Chord、Pastry(特指免費(fèi)版)以及CAN都屬于此類。而以Cassandra為代表的、基于P2P架構(gòu)的幾款NoSQL系統(tǒng)也是其中的成員。《 展望P2P系統(tǒng)中的數(shù)據(jù) 》一文深入探討了這類模型的各種細(xì)節(jié)。

  分布式隊(duì)列 ? 這種模型以將隊(duì)列實(shí)施(即先進(jìn)先出交付機(jī)制)作為網(wǎng)絡(luò)服務(wù)處理為基礎(chǔ)。該模型通過JMS隊(duì)列而廣泛得到采用。一般會遵循這種做法的有任務(wù)隊(duì)列以及通過保持隊(duì)列分級體系實(shí)現(xiàn)擴(kuò)展性的任務(wù)隊(duì)列版本,后者在負(fù)載無法及時(shí)處理時(shí),任務(wù)會由低級層面向高級層面?zhèn)鬟f。

  發(fā)布/訂閱模式 - 一般用于通過網(wǎng)絡(luò)向彼此發(fā)布訂閱訊息! 發(fā)布與訂閱的多面性 》這一經(jīng)典論文中詳細(xì)的介紹這一模型,該模型方面典型的例子即 NaradaBroker與 EventJava 。

  小道消息與自然靈感式模型 - 這種模型源自日常生活中小道消息的傳播途徑,也是每個(gè)節(jié)點(diǎn)將隨機(jī)選擇后續(xù)節(jié)點(diǎn)以交換信息。正如現(xiàn)實(shí)生活中的實(shí)際反饋,這種八卦型算法在信息傳播方面出奇地迅速。該模型的另一大分支則是受到生物學(xué)影響的啟發(fā)式算法。自然世界中存在著大量協(xié)調(diào)及擴(kuò)展方面極為卓越的固有算法。舉例來說,螞蟻、人類以及蜜蜂等等,都能夠以簡潔的交流方式協(xié)調(diào)好擴(kuò)展性方面的需要。模型中的算法正是借鑒了這些實(shí)際存在的現(xiàn)象。在論文《 從流行病的蔓延到分布式計(jì)算 》中對這種模型有著詳盡的敘述。

  地圖縮小/數(shù)據(jù)流 - 這一概念首先由谷歌公司提出,地圖縮小為工作的描述及執(zhí)行提供了一套可擴(kuò)展的模式。雖然內(nèi)容簡單,但它仍然成為聯(lián)機(jī)分析處理方面的首要處理模式。數(shù)據(jù)流則是一種更先進(jìn)的方式,用來表達(dá)執(zhí)行信息;而像Dryad及Pig這樣的項(xiàng)目為數(shù)據(jù)流的執(zhí)行提供了可擴(kuò)展的框架。論文《 地圖縮。捍笮图荷系暮喕瘮(shù)據(jù)處理 》中設(shè)置了專門的主題,詳細(xì)討論這一內(nèi)容。Apache的Hadoop是這種模型的代表性產(chǎn)品。

  責(zé)任樹形圖 - 這種模型打破了遞歸問題的束縛,將整個(gè)流程以樹狀形式加以處理;每個(gè)父節(jié)點(diǎn)將工作下放至子節(jié)點(diǎn)。這種模型擴(kuò)展性強(qiáng),并已經(jīng)被應(yīng)用于數(shù)款可擴(kuò)展性架構(gòu)當(dāng)中。

  流處理 - 這種模型被用于處理源源不斷的數(shù)據(jù)流及數(shù)據(jù)。這種處理方式通過網(wǎng)絡(luò)中的處理節(jié)點(diǎn)獲得支持(例如Aurora、Twitter Strom以及Apache S4等)。

  可擴(kuò)展存儲 ? 該模型的應(yīng)用范圍從數(shù)據(jù)庫、NoSQL存儲、服務(wù)注冊到文件系統(tǒng)都有體現(xiàn)。 鏈接中的這篇文章 以可擴(kuò)展性為切入點(diǎn)對其進(jìn)行了深入討論。

  綜上所述,可擴(kuò)展性的實(shí)現(xiàn)只有三種方式,即:分布、緩存及異步處理。前文所提到的各種架構(gòu)事實(shí)上都是把這三種方式進(jìn)行不同組合并加以實(shí)施。而另一方面,不利于可擴(kuò)展性的因素,除了糟糕的編碼本身,全局性協(xié)調(diào)也起到了重要的影響。簡單來說,任何一種全局性協(xié)調(diào)都會限制系統(tǒng)的可擴(kuò)展性。本文中所提到的各種架構(gòu)也只是在做好了本地性協(xié)調(diào),而非全局性協(xié)調(diào)。

  然而,將它們有機(jī)地結(jié)合起來以創(chuàng)建一套極具可擴(kuò)展性的架構(gòu)可不像說起來那么容易,除非我們能找到一種全新的擴(kuò)展模式。不過經(jīng)驗(yàn)告訴我們,比起搞一套全新的架構(gòu),采用為我們所熟知且更易駕馭的可擴(kuò)展性解決方案永遠(yuǎn)是更好的選擇。

  微博分享與郵件訂閱:您可能感興趣的文章  (親!如果本文有錯(cuò)誤,請來挑錯(cuò))
為什么你總成為不了架構(gòu)師?