分布式系統的特點及設計理念

2021-07-24 07:34:14 字數 2958 閱讀 7078

分布式系統並不是什麼新鮮詞,在上個世紀七八十年代就已經有各種分布式系統出現。只是在網際網路時代,分布式系統才大放異彩,尤其是google更是把分布式系統運用到了極致。google整個的軟體構架都是基於各種各樣的分布式系統,諸如borg、 mapreduce、bigtable等。正是這些分布式系統,使得google可以處理高併發請求響應以及海量資料處理等。apache旗下的 hadoop、spark、mesos等分布式系統,把大資料處理相關技術變得非常親民,讓更多企業客戶體會到了分布式系統的便利。分布式系統的特點:

分布式系統最大的特點是可擴充套件性,它能夠適應需求變化而擴充套件。

企業級應用需求經常隨時間而不斷變化,這也對企業級應用平台提出了很高的要求。企業級應用平台必須要能適應需求的變化,即具有可擴充套件性。比如移動網際網路2c應用,隨著網際網路企業的業務規模不斷增大,業務變得越來越複雜,併發使用者請求越來越多,要處理的資料也越來越多,這個時候企業級應用平台必須能夠適應這些變化,支援高併發訪問和海量資料處理。分布式系統有良好的可擴充套件性,可以通過增加伺服器數量來增強分布式系統整體的處理能力,以應對企業的業務增長帶來的計算需求。

分布式系統的核心理念是讓多台伺服器協同工作,完成單台伺服器無法處理的任務,尤其是高併發或者大資料量的任務。

分布式系統最大的特點是廉價高效。

由成本低廉的pc伺服器組成的集群,在效能方面能夠達到或超越大型機的處理效能,在成本上遠低於大型機。這也是分布式系統最吸引人之處。成本低廉的pc伺服器在硬體可靠性方面比大型機相去甚遠,於是分布式系統由軟體來對硬體進行容錯,通過軟體來保證整體系統的高可靠性。

分布式系統最大的好處是實現企業應用服務層面的彈性擴充套件。

分布式系統的設計理念

上面簡單介紹了分布式系統的基本情況,下面詳細闡述筆者理解的幾個分布式系統設計理念:

分布式系統對伺服器硬體要求很低

這一點主要現在如下兩個方面:

對伺服器硬體可靠性不做要求,允許伺服器硬體發生故障,硬體的故障由軟體來容錯。所以分布式系統的高可靠性是由軟體來保證;

對伺服器的效能不做要求,不要求使用高頻cpu、大容量記憶體、高能儲存等等。因為分布式系統的效能瓶頸在於節點間通訊帶來的網開銷,單台伺服器硬體效能再好,也要等待網路io。

一般而言,網際網路公司的大型資料中心都是選用大量廉價的pc伺服器而不是用幾台高效能伺服器搭建分布式集群,以此來降低資料中心成本。比如,google對於資料中心的成本控制做到了極致:所有伺服器一律不要機箱;主機板完全定製,只要最基本的元件,早期的定製主機板連電源開關和usb介面都不要;在主機板上加裝隔離帶把cpu單獨隔出來,讓冷風只吹cpu,不吹記憶體、硬碟等不需要降溫的元件,最大限度降低冷卻電力消耗。

分布式系統強調橫向可擴充套件性

橫向可擴充套件性(scale out)是指通過增加伺服器數量來提公升集群整體效能。縱向可擴充套件性(scale up)是指提公升每台伺服器效能進而提公升集群整體效能。縱向可擴充套件性的上限非常明顯,單台伺服器的效能不可能無限提公升,而且跟伺服器效能相比,網路開銷才是分布式系統最大的瓶頸。橫向可擴充套件性的上限空間比較大,集群總能很方便地增加伺服器。而且分布式系統會盡可能保證橫向擴充套件帶來集群整體效能的(準)線性提公升。比如有10臺伺服器組成的集群,橫向擴充套件為100臺同樣伺服器的集群,那麼整體分布式系統效能會提公升為接近原來的10倍。

網際網路公司的資料中心,一般乙個分布式系統橫向擴充套件的上限在萬台伺服器左右。google資料中心的基本單元,cell,由兩萬台左右伺服器組成,每個cell由一套分布式管理系統,borg,統一管理,每個資料中心都由多個cell組成。

分布式系統不允許單點失效(no single point failure)

單點失效是指,某個應用服務只有乙份例項執行在某一台伺服器上,這台伺服器一旦掛掉,那麼這個應用服務必然也受影響而掛掉,導致整個服務不可用。例如,某**後台如果只在某一台伺服器上執行乙份,那這台伺服器一旦宕機,該**服務必然受影響而不可用。再比如,如果所有資料都存在某一台伺服器上,那一旦這台伺服器壞了,所有資料都不可訪問。

因為分布式系統的伺服器都是廉價的pc伺服器,硬體不能保證100%可靠,所以分布式系統預設每台伺服器隨時都可能發生故障掛掉。同時分布式系統必須要提供高可靠服務,不允許出現單點失效,因此分布式系統裡執行的每個應用服務都有多個執行例項跑在多個節點上,每個資料點都有多個備份存在不同的節點上。這樣一來,多個節點同時發生故障,導致某個應用服務的所有例項都掛掉、或某個資料點的多個備份都不可讀的概率大大降低,進而有效防止單點失效。

通常情況,不要讓伺服器滿負荷執行,伺服器長時間滿負荷執行的話,出故障的概率顯著公升高。所以分布式系統採用一大堆中低效能的pc伺服器,盡可能把負載均攤到所有伺服器上,讓每台伺服器的負載都不高,保證集群整體穩定性。

分布式系統盡可能減少節點間通訊開銷

分布式系統應用服務最好做成無狀態的

應用服務的狀態是指執行時程式因為處理服務請求而存在記憶體的資料。分布式應用服務最好是設計成無狀態。因為如果應用程式是有狀態的,那麼一旦伺服器宕機就會使得應用服務程式受影響而掛掉,那存在記憶體的資料也就丟失了,這顯然不是高可靠的服務。把應用服務設計成無狀態的,讓程式把需要儲存的資料都儲存在專門的儲存上,這樣應用服務程式可以任意重啟而不丟失資料,方便分布式系統在伺服器宕機後恢復應用服務。

比如,在設計**後台的時候,對於使用者登陸請求,可以把登陸使用者的session相關資訊儲存在redis或memcache等快取服務中,這樣每個**的後台例項不儲存使用者登入狀態,這樣即使重啟**後台程式也不丟失使用者的登入狀態資訊;如果把使用者的session相關資訊儲存在**後台程式的記憶體裡,那一旦受理使用者登入的**後台程式例項掛掉,必然有使用者的登入狀態資訊會丟失。

總而言之,分布式系統是大資料時代企業級應用的首選平台,它有良好的可擴充套件性,尤其是橫向可擴充套件性(scale out),使得分布式系統非常靈活,能應對千變萬化的企業級需求,而且降低了企業客戶對伺服器硬體的要求,真正能做到應用服務層面的彈性擴充套件(auto- scaling)。

一文詳解分布式系統的特點以及設計理念

分布式系統並不是什麼新鮮詞,在上個世紀七八十年代就已經有各種分布式系統出現。只是在網際網路時代,分布式系統才大放異彩,尤其是 google 更是把分布式系統運用到了極致。google 整個的軟體構架都是基於各種各樣的分布式系統,諸如 borg mapreduce bigtable 等。正是這些分布式...

分布式 分布式系統的設計

在計算機領域,當單機效能達到瓶頸時,一般有兩種方式解決效能問題 而分布式系統的設計說白了就是 如何合理將乙個系統拆分成多個子系統部署到不同機器上。講設計方法前,先介紹分布式系統的特性 1 分布性 空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。2 對等性 分布式系統中的計...

HDFS分布式儲存及特點

hdfs是hadoop應用程式使用的主要分布式儲存,主要被設計在商用硬體上執行,也就是說,他必須滿足低成本 高容錯 高吞吐的特性才能在眾多的分布式儲存系統中脫穎而出。hdfs具有主從架構,由檔案系統元資料管理namenode和實際資料儲存datanode組成。乙個hdfs集群只有乙個namenode...