分布式架構(gòu)之美

      網(wǎng)友投稿 811 2025-03-31

      一、前言

      我們都知道,當(dāng)今無論在BAT這樣的大公司,還是各種各樣的小公司,甚至是傳統(tǒng)行業(yè)剛轉(zhuǎn)互聯(lián)網(wǎng)的企業(yè)都開始使用分布式架構(gòu),那么什么叫分布式架構(gòu)呢?分布式架構(gòu)有什么好處呢?分布式架構(gòu)經(jīng)過了怎樣的發(fā)展呢?是哪家企業(yè)開啟了分布式架構(gòu)的時代呢?讀完本文,你就會得到這些答案,下面讓我們一起來開啟分布式概述的奇妙之旅吧!

      二、分布式架構(gòu)的發(fā)展歷史

      1946年2.14日,那是一個浪漫的情人節(jié) , 世界上第一臺電子數(shù)字計算機在美國賓夕法尼亞大學(xué)誕生了,她的名字叫ENIAC。這臺計算機占地170平米、重達 30 噸,每秒可以進行 5000 次加法運算。

      第一臺電子計算機誕生以后,就意味著一個日新月異的 IT 時代到來了。單臺計算機的性能不斷得到提升,從最早的 8 位 CPU 到現(xiàn)在的 64 位 CPU;從早期的 MB 級內(nèi)存到現(xiàn)在的 GB 級別內(nèi)存;從慢速的機械存儲到現(xiàn)在的固態(tài) SSD 硬盤存儲。

      ENIAC 之后,電子計算機就進入了 IBM 主導(dǎo)的大型機時代。1964 年 4 月 7 日,在吉恩.阿姆達爾(IBM 大型機之父, 被認為是有史以來最偉大的計算機設(shè)計師之一)的帶領(lǐng)下,耗費 50 億美元,歷時三年,第一臺 IBM 大型機 SYSTEM/360 誕生了。這使得 IBM 在 20 世紀(jì) 50~60 年代統(tǒng)治著整個大型計算機工業(yè),奠定了 IBM 計算機帝國的基礎(chǔ)。IBM 大型機曾支撐美國航天登月計劃,IBM 主機一直服務(wù)于金融等核心行業(yè)的關(guān)鍵領(lǐng)域。由于超強的計算能力和高可靠性,即使在 X86 和云計算高速發(fā)展的背景下,IBM 的大型機依然牢牢占據(jù)著一定的高端市場份額。

      20 世紀(jì) 80 年代,在大型機霸權(quán)的時代下,計算機的架構(gòu)同時向兩個方向發(fā)展:

      以 CISC (微處理器執(zhí)行的計算機語言指令集) CPU 為架構(gòu)的面向個人、價格便宜的PC。

      以 RISC (精簡指令集計算機) CPU 為架構(gòu)的面向企業(yè)、價格昂貴的小型 UNIX 服務(wù)器。

      三、分布式架構(gòu)發(fā)展的里程碑

      大型主機憑借著大型機超強的計算和 I/O 處理能力、安全性、 穩(wěn)定性等,在很長一段時間內(nèi),大型機引領(lǐng)著計算機行業(yè)及商業(yè)計算領(lǐng)域的發(fā)展。而集中式的計算機系統(tǒng)架構(gòu)也漸漸成為了主流。但是隨著社會的發(fā)展,這種架構(gòu)越來越難以適應(yīng)企業(yè)的需求,比如說:

      大型主機復(fù)雜性高,培養(yǎng)一個能夠熟練運維大型主機的人成本很高。

      大型主機很貴,一般只有土豪機構(gòu)(政府、電信、金融)才能用得起。

      會有單點問題,一旦大型主機出現(xiàn)故障,那整個系統(tǒng)就將處于不可用的狀態(tài)。而對于大型機的使用機構(gòu)來說,這種不可用導(dǎo)致的損失是非常具大的。

      由于科技的進步、技術(shù)的發(fā)展,PC 機性能得到了不斷提升,所以很多企業(yè)放棄大型機改用小型機及普通 PC 來搭建系統(tǒng)架構(gòu)。

      IOE 指的是 IBM 小型機、Oracle 數(shù)據(jù)庫、EMC 的高端存儲。阿里巴巴2009 年“去 IOE”戰(zhàn)略技術(shù)總監(jiān)透露,截止到 2013 年 5 月 17 日阿里巴巴最后一臺 IBM 小型機在支付寶下線。

      分布式架構(gòu)之美

      隨著業(yè)務(wù)的快速發(fā)展,阿里巴巴業(yè)務(wù)量和數(shù)據(jù)量呈爆發(fā)性增長,傳統(tǒng)集中式 Oracle 數(shù)據(jù)庫架構(gòu)在系統(tǒng)的擴展性方面遭遇到了瓶頸。 傳統(tǒng)的商業(yè)數(shù)據(jù)庫軟件(Oracle,DB2)多以集中式架構(gòu)為主, 那么這些傳統(tǒng)數(shù)據(jù)庫軟件的最大特點就是將所有的數(shù)據(jù)都集中在 一個數(shù)據(jù)庫中,只能依靠大型高端設(shè)備來提供高處理能力和擴展性。 集中式數(shù)據(jù)庫的擴展性主要采用向上擴展(Scale up)的方式, 通過增加 CPU、內(nèi)存、磁盤等方式提高系統(tǒng)處理能力。這種集中式數(shù)據(jù)庫的架構(gòu),使得數(shù)據(jù)庫成為了整個系統(tǒng)的瓶頸,已經(jīng)越來越不能適應(yīng)海量數(shù)據(jù)對計算能力的要求。

      四、分布式系統(tǒng)的意義

      之所以要發(fā)展分布式系統(tǒng)架構(gòu),是因為單機系統(tǒng)存在著如下諸多缺點等待被解決:

      升級單機處理能力的性價比越來越低

      我們知道單機的處理能力主要依靠 CPU、內(nèi)存、磁盤。通過升級硬件來這種垂直擴展的方式來提升性能,成本會越來越高。性價比會越來越低。

      單機處理能力存在瓶頸

      并且單機處理能力存在瓶頸,CPU、內(nèi)存、磁盤都會有自己的性能瓶頸, 就算你是土豪不惜成本去提升硬件,但是硬件的發(fā)展速度和性能也還是有限制的。

      穩(wěn)定性和可用性這兩個指標(biāo)很難達到

      最后就是單機系統(tǒng)存在可用性和穩(wěn)定性的問題,這兩個指標(biāo)又是我們亟待要去解決的問題。

      五、分布式架構(gòu)的常見概念

      小張開了一家小飯店,剛開始的時候店里只有一個廚師,切菜洗菜備料炒菜全干。后來由于飯香甜可口,人流量越來越多了,一個廚師忙不過來了,小張又請了兩個廚師,那么這時候三個廚師炒一樣的菜,做相同的切菜洗菜備料炒菜等工作,那這三個廚師的關(guān)系是集群。也就意味著來一個顧客,只有其中的一個廚師會為這個顧客服務(wù)。

      又經(jīng)過一段時間,店里的生意更加火爆了,小張為了讓廚師們能專心炒菜,把菜做到極致,又請了個配菜師負責(zé)切菜、備菜、備料,那么廚師和配菜師的關(guān)系是分布式,后來一個配菜師也忙不過來了,小張就又請了兩個配菜師,三個配菜師關(guān)系也是集群。

      節(jié)點是指一個可以獨立按照分布式協(xié)議完成一組邏輯的程序個體。在具體的項目中,一個節(jié)點表示的是一個操作系統(tǒng)上的進程。 那這里的每一個配菜師和廚師都是一個節(jié)點。

      副本(replica/copy)是指在分布式系統(tǒng)中為數(shù)據(jù)或服務(wù)提供的冗余。 數(shù)據(jù)副本指在不同的節(jié)點上持久化同一份數(shù)據(jù),當(dāng)某一個節(jié)點出現(xiàn)數(shù)據(jù)丟失時,可以從副本上恢復(fù)數(shù)據(jù)。數(shù)據(jù)副本是分布式系統(tǒng)中解決數(shù)據(jù)丟失問題的唯一手段。 服務(wù)副本表示多個節(jié)點提供相同的服務(wù),通過主從關(guān)系來實現(xiàn)服務(wù)高可用的方案。

      中間件位于操作系統(tǒng)提供的服務(wù)之外,但又不屬于應(yīng)用,他是位于應(yīng)用和系統(tǒng)層之間的、為開發(fā)者方便的處理通信、輸入輸出的一類軟件,能夠讓用戶只關(guān)心自己應(yīng)用的部分。

      六、分布式領(lǐng)域中馮諾依曼模型的變化

      上圖是經(jīng)典理論-馮.諾依曼體系,計算機硬件由運算器、 控制器、存儲器、輸入設(shè)備、輸出設(shè)備五大部分組成。不管架構(gòu)怎么變化,計算機仍沒有跳出該體系的范疇。

      輸入設(shè)備的變化

      分布式系統(tǒng)架構(gòu)中,輸入設(shè)備可以分兩類:第一類是互相連接的多個節(jié)點,在接收其他節(jié)點傳來的信息作為該節(jié)點的輸入;另一種就是傳統(tǒng)意義上的人機交互的輸入設(shè)備了。

      輸出設(shè)備的變化

      分布式系統(tǒng)架構(gòu)中,輸出也分兩類,一種是系統(tǒng)中的節(jié)點向其他節(jié)點傳輸信息時,該節(jié)點可以看作是輸出設(shè)備;另一種就是傳統(tǒng)意義上的人際交互的輸出設(shè)備,比如用戶的終端。

      控制器的變化

      在單機中,控制器指的是 CPU 中的控制器,在分布式系統(tǒng)中,控制器主要的作用是協(xié)調(diào)或控制節(jié)點之間的動作和行為; 比如硬件負載均衡器;LVS 軟負載;規(guī)則服務(wù)器等等。

      運算器

      分布式系統(tǒng)中,運算器是由多個節(jié)點來組成的。運用多個節(jié)點的計算能力來協(xié)同完成整個計算任務(wù)。

      存儲器

      分布式系統(tǒng)中,我們需要把承擔(dān)存儲功能的多個節(jié)點組織在一起, 組成一個整體的存儲器;比如數(shù)據(jù)庫、redis(key-value 存儲) 。

      七、分布式系統(tǒng)的難點

      毫無疑問,分布式系統(tǒng)對于集中式系統(tǒng)而言,在實現(xiàn)上會更加 復(fù)雜。分布式系統(tǒng)將會是更難理解、設(shè)計、構(gòu)建 和管理的,同 時意味著應(yīng)用程序的根源問題更難發(fā)現(xiàn)。

      三態(tài)

      在集中式架構(gòu)中,調(diào)用一個接口返回的結(jié)果只有兩種, 成功或失敗。但是在分布式架構(gòu)中,會出現(xiàn)“超時”這個狀態(tài)。

      分布式事務(wù)

      這其實是一個老生常談的問題,我們都知道事務(wù)就是一系列操作的原子性保證,在單機的情況下,我們能夠依靠本機的數(shù)據(jù)庫連接和組件很輕易的做到事務(wù)控制,但在分布式架構(gòu)下,業(yè)務(wù)原子性操作很可能是跨服務(wù)的,這樣就會導(dǎo)致分布式事務(wù)。比如 A 、B 操作分別是在不同服務(wù)下的同一個事務(wù)內(nèi)的操作,A 調(diào)用 B,如果A可以清楚的知道 B 是否成功提交從而控制自身提交還是回滾,但我們知道在分布式系統(tǒng)調(diào)用中會出現(xiàn)一個新狀 態(tài)就是超時,就是 A 并無法知道 B 是成功還是失敗,這個時候 A 是提交本地事務(wù)還是執(zhí)行回滾呢?這其實是一個很難的問題,如果要強行保證事務(wù)一致性,可以采取分布式鎖,但那樣會增加系統(tǒng)復(fù)雜度而且會增大系統(tǒng)的開銷,而且事務(wù)跨越的服務(wù)越多, 消耗的資源越大,性能越低,那么最好的解決方案就是避免分布式事務(wù)。 還有一種解決方案就是重試機制,但是重試如果不是查詢接口, 久必然涉及到數(shù)據(jù)庫的變更,如果第一次調(diào)用成功但是沒返回成功結(jié)果,那調(diào)用方第二次調(diào)用對調(diào)用方來說依然是重試,但是此時對于被調(diào)用方來說是重復(fù)調(diào)用,例如 A 向 B 轉(zhuǎn)賬,A-100,B + 100,這樣會導(dǎo)致 A 扣了 100,而 B 增加 200。這樣的結(jié)果并不是我們期望的,因此需在要寫入的接口做冪等設(shè)計(多次調(diào)用和單次調(diào)用是一樣的效果)。通常可以設(shè)置一個唯一鍵,在寫入的時候查詢是否已經(jīng)存在,避免重復(fù)寫入。但是冪等設(shè)計的一 個前提就是服務(wù)高可用,否則無論怎么重試都不能調(diào)用返回一個明確的結(jié)果,那調(diào)用方會一直等待,雖然可以限制重試的次數(shù), 但是這已經(jīng)進入異常狀態(tài)了,甚至到了極端情況還需要人肉補償處理。其實根據(jù)?CAP?和?BASE?理論,不可能在高可用分布式情況下做到一致性,一般都是最終一致性保證。

      負載均衡

      為了達到服務(wù)高可用,每個服務(wù)至少是部署兩臺機器,因為互聯(lián)網(wǎng)公司一般使用可靠性不是很高的普通機器, 長期運行宕機概率很高,所以兩臺機器能夠大大降低服務(wù)不可用的可能性,而大型項目往往會采用十幾臺甚至上百臺來部署一 個服務(wù),這不僅是保證服務(wù)的高可用,更是為了提升服務(wù)的 QPS, 但是這樣又帶來一個問題,一個請求過來到底路由到哪臺機器呢? 路由算法很多,有 DNS 路由,如果 session 在本機,還會根據(jù)用戶 id 或則 cookie 等信息路由到固定的機器,當(dāng)然現(xiàn)在應(yīng)用服務(wù)器為了擴展的方便都會設(shè)計為無狀態(tài)的,session 會保存到專有的 session 服務(wù)器,所以一般不會涉及到拿不到 session 問 題。那路由規(guī)則是隨機獲取么?這是一個方法,但是據(jù)我所知, 實際情況肯定比這個復(fù)雜得多,在一定范圍內(nèi)隨機,但是在大范圍也會分為很多個域,比如如果為了保證異地多活的多機房, 夸機房調(diào)用的開銷太大,肯定會優(yōu)先選擇同機房的服務(wù),這個 要參考具體的機器分布來考慮。

      一致性

      數(shù)據(jù)被分散或者復(fù)制到不同的機器上,如何保證各臺主機之間的數(shù)據(jù)一致性將成為一個難點。

      故障的獨立性

      分布式系統(tǒng)由多個節(jié)點組成,整個分布式系統(tǒng)完全出問題的概率是存在的,但是在實踐中出現(xiàn)更多的是某個節(jié)點出問題,其他節(jié)點都沒問題。這種情況下我們實現(xiàn)分布式系統(tǒng)時需要考慮得更加全面些。

      八、總結(jié)

      通過本文分布式系統(tǒng)的概述,我們就對分布式有了一個很直觀的了解,里面涉及到的技術(shù)還是蠻多的,后面的文章中,我們一點點的來啃這些硬骨頭。為我們的成長加油吧~

      分布式 存儲

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:我的WPS工具欄怎么取消隱藏(wps工具欄如何取消隱藏的)
      下一篇:excel保存時怎么自動備份
      相關(guān)文章
      亚洲日本中文字幕天天更新| 亚洲国产精品综合久久2007| 亚洲日韩AV一区二区三区四区| 亚洲国产一区二区a毛片| 亚洲伊人久久精品影院| 久久青青草原亚洲av无码| www国产亚洲精品久久久| 亚洲国产精品无码久久九九| 国产尤物在线视精品在亚洲| 日韩国产欧美亚洲v片 | 亚洲国产成人片在线观看无码 | 亚洲免费在线视频观看| 亚洲国产美女视频| 亚洲乱码一区av春药高潮| 亚洲午夜久久久久久尤物| 亚洲一区无码中文字幕乱码| 亚洲xxxxxx| 亚洲中文字幕无码中文| 亚洲av午夜电影在线观看| 亚洲日本VA午夜在线电影| 亚洲国产欧美国产综合一区| 亚洲1区2区3区精华液| 国产亚洲综合精品一区二区三区| 国产精品亚洲一区二区三区| 成人亚洲网站www在线观看| 亚洲综合最新无码专区| 久久久久一级精品亚洲国产成人综合AV区| 亚洲精品乱码久久久久久不卡| 亚洲女同成人AⅤ人片在线观看| 国产成人亚洲综合无码| 精品国产_亚洲人成在线高清| 久久久亚洲欧洲日产国码农村| 亚洲制服中文字幕第一区| 老汉色老汉首页a亚洲| 亚洲大尺码专区影院| 亚洲AV无码无限在线观看不卡| 亚洲国产美女精品久久久| 亚洲人成色77777在线观看大| 亚洲色大成网站www永久一区 | 亚洲欧洲国产精品你懂的| 亚洲免费视频观看|