架構師不可不知的十大可擴展架構

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

可擴展性正是如今軟件設計領域最值得優先考慮的要素。然而,計算機科學家們還無法了解一套單獨的架構如何才能擴展至各類應用環境當中。相反,我們在數量繁多的方案中所設計出的可擴展性架構,往往以業界較為通用的已知可擴展模式及個人偏好為標準。本文列出了十大大家耳熟能詳的可擴展性架構,以供借鑒。

AD:?2013云計算架構師峰會課程資料下載

【51CTO精選譯文】對于大多數架構師而言,“可擴展性”在軟件架構方面是最虛無縹緲的說法。這毫不奇怪,因為可擴展性正是如今軟件設計領域最值得優先考慮的要素。然而,計算機科學家們還無法了解一套單獨的架構如何才能擴展至各類應用環境當中。相反,我們在數量繁多的方案中所設計出的可擴展性架構,往往以業界較為通用的已知可擴展模式及個人偏好為標準。簡單來講,打造一套具備可擴展性的系統已經變得更像是一門藝術而不單單是技術。

我們常常會通過觀摩杰作體會并學習藝術的精髓,而可擴展性也應該遵循同樣的路線!

在這篇文章中,我將列出數款為大家所耳熟能詳的可擴展性架構。通常情況下,架構師們完全可以借鑒已知的可擴展架構模式,進而創造出新的可擴展架構。

  1. LB (負載平衡器) +?無共享單位?-?該模型中包含一系列單元,各單元彼此間不共享任何內容,且一致指向一個將輸入文訊按一定條件發往單元處的負載平衡器(這構成一個循環,以負載等情況為基礎)。每個單元可以是一個單獨的節點或是緊密耦合的節點所構成的集群。用戶可以使用DNS循環、硬件負載平衡器或者軟件負載平衡器達成負載平衡效果。創建一套負載均衡的層次結構,并在其中結合前面提到的各種負載平衡器也是可行的。在由Michael Stonebraker撰寫的《?無共享體系架構實例?》一文中,專門討論了此類架構。
    ?
  2. LB +?無狀態節點?+?可擴展存儲?-?傳統的?三層式Web架構?使用的就是這種模型。該模型包括數個與可擴展存儲交互的無狀態節點以及一個分布于節點間負載中的負載平衡器。在這一模型中,存儲通常作為限制因素存在,但NoSQL存儲則可以利用這套模型創建出具備相當可擴展性的系統。
    ?
  3. 點對點架構?(分布式Hash列表?(簡稱DHT)以及內容尋址網絡(簡稱CAN))?-這套模型提供了一些傳統的可擴展算法,這些算法的各個方面幾乎全部按對數進行了等比例增加。舉例來說,像Chord、Pastry(特指免費版)以及CAN都屬于此類。而以Cassandra為代表的、基于P2P架構的幾款NoSQL系統也是其中的成員。《?展望P2P系統中的數據?》一文就深入探討了這類模型的各種細節。
    ?
  4. 分布式隊列?– 這種模型以將隊列實施(即先進先出交付機制)作為網絡服務處理為基礎。該模型通過JMS隊列而廣泛得到采用。一般會遵循這種做法的有任務隊列以及通過保持隊列分級體系實現擴展性的任務隊列版本,后者在負載無法及時處理時,任務會由低級層面向高級層面傳遞。
    ?
  5. 發布/訂閱模式?-?一般用于通過網絡向彼此發布訂閱訊息。《?發布與訂閱的多面性?》這一經典論文中詳細的介紹這一模型,該模型方面最典型的例子即?NaradaBroker與?EventJava?。
    ?
  6. 小道消息與自然靈感式模型?-?這種模型源自日常生活中小道消息的傳播途徑,也就是每個節點將隨機選擇后續節點以交換信息。正如現實生活中的實際反饋,這種八卦型算法在信息傳播方面出奇地迅速。該模型的另一大分支則是受到生物學影響的啟發式算法。自然世界中存在著大量協調及擴展方面極為卓越的固有算法。舉例來說,螞蟻、人類以及蜜蜂等等,都能夠以最簡潔的交流方式協調好擴展性方面的需要。模型中的算法正是借鑒了這些實際存在的現象。在論文《?從流行病的蔓延到分布式計算?》中對這種模型有著詳盡的敘述。
    ?
  7. 地圖縮小/數據流?-?這一概念首先由谷歌公司提出,地圖縮小為工作的描述及執行提供了一套可擴展的模式。雖然內容簡單,但它仍然成為聯機分析處理方面的首要處理模式。數據流則是一種更先進的方式,用來表達執行信息;而像Dryad及Pig這樣的項目為數據流的執行提供了可擴展的框架。論文《?地圖縮小:大型集群上的簡化數據處理?》中設置了專門的主題,詳細討論這一內容。Apache的Hadoop就是這種模型的代表性產品。
    ?
  8. 責任樹形圖?-?這種模型打破了遞歸問題的束縛,將整個流程以樹狀形式加以處理;每個父節點將工作下放至子節點。這種模型擴展性強,并已經被應用于數款可擴展性架構當中。
    ?
  9. 流處理?-?這種模型被用于處理源源不斷的數據流及數據。這種處理方式通過網絡中的處理節點獲得支持(例如Aurora、Twitter Strom以及Apache S4等)。
    ?
  10. 可擴展存儲?– 該模型的應用范圍從數據庫、NoSQL存儲、服務注冊到文件系統都有體現。?鏈接中的這篇文章?以可擴展性為切入點對其進行了深入討論。

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

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

轉載于:https://my.oschina.net/zhanghaiyang/blog/593334

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Winform開發框架中工作流模塊的業務表單開發

在我們開發工作流的時候,往往需要設計到具體業務表單信息的編輯,有些是采用動態編輯的,有些則是在開發過程中處理的,各有各的優點,動態編輯的則方便維護各種各樣的表單,但是數據的綁定及處理則比較麻煩&…

JavaScript --- 跨瀏覽器的事件處理程序

var EventUtil {addHandler: function(element, type, handler) { // 添加事件處理程序if (element.addEventListener) { // DOM2級事件處理程序element.addEventListener (type, handler, false) ;} else if (element.attachEvent) { // IE事件處理程序element.attachEve…

RabbitMQ學習總結(2)——安裝、配置與監控

2019獨角獸企業重金招聘Python工程師標準>>> 一、安裝 1、安裝Erlang 1)系統編譯環境(這里采用linux/unix 環境) ① 安裝環境 虛擬機:VMware Workstation 10.0.1 build Linux系統:CentOS6.5 rabbitMQ官網下…

nginx針對某個url限制ip訪問,常用于后臺訪問限制

nginx針對某個url限制ip訪問,常用于后臺訪問限制 假如我的站點后臺地址為: http://www.abc.net/admin.php 那么我想限制只有個別ip可以訪問后臺,那么需要在配置文件中增加:location ~ .*admin.* {allow 1.1.1.1;allow 12.12.12.0/…

JavaScript --- 跨瀏覽器的事件對象

var EventUtil{addHandler: function(element, type, handler){ // 添加事件方法if (element.addEventListener){element.addEventListener(type, handler, false); // 添加監聽事件,第3個參數false代表:冒泡階段} else if (element.attachEvent) {element.attachEvent("…

第一個C#程序

第一個C#程序 新建項目-選擇模板--控制臺應用程序 還不會用學習版執行程序,沒找到執行(不調試)菜單,調試出一堆線程狀況.用了VS旗艦版完成, 看見C#在VS中的編譯和執行時分開的,eclipse確實叫預編譯軟件,代碼寫好沒錯可以直接運行,編譯由eclipse完成, 提問:為啥VS不這樣設置?是…

XML序列化與反序列化

C#對于XML的序列化與反序列化提供了很好的支持,我們只需要引用System.Xml的命名空間即可,無需使用第三方庫,下面簡單實現了一個XML的序列化與反序列化的幫助類。 1.序列化: 先聲明一個變量var settings new XmlWriterSettings&am…

CODE[VS] 3411 洪水

題目描述 Description小浣熊松松和朋友到野外露營,沒想到遇上了π年一次的大洪水,好在松松是一只愛觀察的小浣熊,他發現露營地的地形和洪水有如下性質: ①露營地可以被看做是一個N*M的矩形方陣,其中左上角坐標為…

JavaScript --- 取得鼠標事件的坐標

說明: clientX和clientY屬性:事件發生時,鼠標指針在視口中的水平和垂直坐標。pageX和pageY屬性:鼠標光標在頁面中的位置。screenX和screenY屬性:鼠標事件發生時,鼠標指針相對于整個屏幕的坐標信息。IE8及更早的版本不支持事件對象…

JavaScript語義基礎

變量(Variables) Variables是你存儲數據的容器。聲明一個變量需要使用關鍵字var,然后輸入變量的名稱。 1 var myvar; 定義一個變量后,可以賦予變量一個值: 1 myvar "mxp"; 可以將上述操作寫在一行&#x…

spring面試專題一點通,再也不用擔心面試不會回答了

前言文章內容有點小長,希望你能耐心閱讀,更多Java面試題以及學習資料獲取方式:加Qun:1017-599-436免費獲取。還有更多包括電子書,PDF文檔以及視頻精講可以分享給大家,內容覆蓋很廣,分布式緩存、RPC 調用、Z…

bzoj4033 [HAOI2015]樹上染色

題目:https://www.lydsy.com/JudgeOnline/problem.php?id4033 重要的思路:與其考慮每一個點對的貢獻,不如考慮每條邊的貢獻(被經過了幾次)! 樹形dp。 總共的黑點和白點的個數都是已知的,所以知…

JavaScript --- 表單focus,blur,change事件的實現

假設有一個文本框,我們只允許用戶輸入數值。為此,我們希望: 1.利用focus事件修改文本框內容, 2.利用blur事件回復文本框的內容, 3.利用change事件在用戶輸入了非數值字符時再次修改背景顏色。 var EventUtil {addHandler: function(element…

mysql日期格式轉化

select DATE_FORMAT( 20170701, %Y-%m-%d);先挖坑轉載于:https://www.cnblogs.com/tuhooo/p/7766221.html

Solr管理頁面 上

DashBoard(儀表盤)Logging(日志)Core Admin(Core管理)在Solr中,每一個Core,代表一個索引庫,里面包含索引數據及其配置信息。Solr中可以擁有多個Core,也就同時…

GRPC協議的相關原理

GRPC的Client與Server,均通過Netty Channel作為數據通信,序列化、反序列化則使用Protobuf,每個請求都將被封裝成HTTP2的Stream,在整個生命周期中,客戶端Channel應該保持長連接,而不是每次調用重新創建Chann…

Echarts --- 各個省份的坐標

純手打…效果如下 1.新疆: [86.61 , 40.79] 2.西藏:[89.13 , 30.66] 3.黑龍江:[128.34 , 47.05] 4.吉林:[126.32 , 43.38] 5.遼寧:[123.42 , 41.29] 6.內蒙古:[112.17 , 42.81] 7.北京:[116.40 , 40.40 ] 8.寧夏:[106.27 , 36.76] 9.山西:[111.95,37.65] 10.河北:[115.21 , 38.…

xxx征集系統項目目標文檔

問題 每四人一組,討論結束后,每人根據課堂討論結果提交一份系統利益相關者案例。撰寫撰寫項目目標文檔(目標,好處,度量標準。) 項目目標文檔 目標: (1)需求填報 &#xf…

高并發大流量專題---10、MySQL數據庫層的優化

高并發大流量專題---10、MySQL數據庫層的優化 一、總結 一句話總結: mysql先考慮做分布式緩存,過了緩存后就做mysql數據庫層面的優化 1、mysql數據庫層的優化的前面一層是什么? 數據庫緩存:突破了數據庫緩存就需要做mysql數據庫層…

【彩彩只能變身隊】后端工作總結

2018.06.09 早上8點到晚上10點 沖刺前后端交互(vueexpressmysql) 8&#xff1a;00-12&#xff1a;00 &#xff1a; 前端把請求寫好&#xff1a; <template> <div class"LoginForm"> <el-form ref"form" label-width"80px"…