分布式系統(tǒng)發(fā)展史

分布式系統(tǒng)從最早的數(shù)據(jù)共享需求,發(fā)展到現(xiàn)在的 serverless 架構(gòu)。它伴隨著技術(shù)的發(fā)展與公司實(shí)際需求變化而演進(jìn)?,F(xiàn)在的云服務(wù)提供商簡(jiǎn)化了分布式系統(tǒng)開發(fā)的復(fù)雜性,讓應(yīng)用開發(fā)者只需關(guān)注開發(fā),而把基礎(chǔ)設(shè)施管理交給大型的云服務(wù)提供商?;仡櫡植际较到y(tǒng)發(fā)展的歷史,了解容器技術(shù)革新的原動(dòng)力。

分布式系統(tǒng)(確切地說應(yīng)該是分布式計(jì)算機(jī)系統(tǒng))從它誕生到現(xiàn)在已經(jīng)過去了很長(zhǎng)的時(shí)間。在很久以前,一臺(tái)電腦一次只能完成一項(xiàng)特定的任務(wù)。如果我們需要同時(shí)完成多項(xiàng)任務(wù),則需要多臺(tái)計(jì)算機(jī)并行運(yùn)行。但是,并行運(yùn)行并不足以構(gòu)建真正的分布式系統(tǒng),因?yàn)樗枰环N機(jī)制來在不同計(jì)算機(jī)或者那些運(yùn)行在計(jì)算機(jī)上的程序之間進(jìn)行通信。這種在多臺(tái)計(jì)算機(jī)之間交換 / 共享數(shù)據(jù)的需求催生了面向消息通信的想法,即兩臺(tái)計(jì)算機(jī)使用包含了數(shù)據(jù)的消息來共享數(shù)據(jù)。文件共享、數(shù)據(jù)庫(kù)共享等其他機(jī)制當(dāng)時(shí)還沒有出現(xiàn)。

接著,我們進(jìn)入了多任務(wù)操作系統(tǒng)和個(gè)人電腦的時(shí)代。利用 Windows、Unix、Linux 等操作系統(tǒng),我們可以在同一臺(tái)計(jì)算機(jī)上運(yùn)行多個(gè)任務(wù)。這使得分布式系統(tǒng)開發(fā)人員能夠在一臺(tái)或者幾臺(tái)通過消息傳遞連接的計(jì)算機(jī)內(nèi)構(gòu)建和運(yùn)行整個(gè)分布式系統(tǒng)。這催生了面向服務(wù)的架構(gòu)(SOA),其中每個(gè)分布式系統(tǒng)可以通過一組集成在一臺(tái)計(jì)算機(jī)或多臺(tái)計(jì)算機(jī)上運(yùn)行的服務(wù)來構(gòu)建。我們通過 WSDL(用于 SOAP 協(xié)議)或 WADL(用于 REST 協(xié)議)等語(yǔ)言適當(dāng)?shù)囟x服務(wù)接口。接著,服務(wù)的使用者將利用這些接口來進(jìn)行客戶端的實(shí)現(xiàn)。

隨著計(jì)算能力和存儲(chǔ)價(jià)格的降低,世界各地的組織都開始使用分布式系統(tǒng)和基于 SOA 的企業(yè) IT 系統(tǒng)。但是,一旦服務(wù)或系統(tǒng)的數(shù)量增加,這些服務(wù)之間的點(diǎn)到點(diǎn)連接就不再是可擴(kuò)展和可維護(hù)的了。這催生了集中式“服務(wù)總線”概念的產(chǎn)生。服務(wù)總線通過類似集線器的架構(gòu)將所有系統(tǒng)連接在一起。這個(gè)組件被稱為 ESB(企業(yè)服務(wù)總線)。它作為一個(gè)“語(yǔ)言”翻譯者,就像一個(gè)中間人在幫助一群使用不同“語(yǔ)言”但希望相互通信的人進(jìn)行溝通。在企業(yè)應(yīng)用中,“語(yǔ)言”代表著在通信時(shí)不同系統(tǒng)的消息傳遞協(xié)議和消息格式。

這種模式工作得很好,即使在今天也能正常工作。隨著萬維網(wǎng)的普及和模型的簡(jiǎn)化,基于 REST 的通信比基于 SOAP 的通信模型變得更加流行。這促進(jìn)了基于應(yīng)用程序編程接口(API)的 REST 模型通信的發(fā)展。由于 REST 模型的簡(jiǎn)潔特性,我們需要在標(biāo)準(zhǔn) REST API 實(shí)現(xiàn)之上實(shí)現(xiàn)安全(身份驗(yàn)證和授權(quán))、緩存、流控和監(jiān)控等各種類型的功能。但我們并不想獨(dú)立地在每個(gè) API 上實(shí)現(xiàn)這些功能,而是需要一個(gè)公共組件將這些功能應(yīng)用于這些 API 之上。這樣的需求催生了 API 管理平臺(tái)的發(fā)展。現(xiàn)在,它已經(jīng)成為了任何分布式系統(tǒng)的核心功能之一。

隨后,我們見證了分布式系統(tǒng)大爆炸的時(shí)代。Facebook、Google、Amazon、Netflix、LinkedIn、Twitter 等互聯(lián)網(wǎng)公司變得異常龐大。他們開始想要構(gòu)建跨越多個(gè)地理區(qū)域和多個(gè)數(shù)據(jù)中心的分布式系統(tǒng)。這樣的需求使他們的技術(shù)焦點(diǎn)轉(zhuǎn)向了一切開始的地方。工程師們開始思考單臺(tái)計(jì)算機(jī)和單個(gè)程序的概念。他們不再把一臺(tái)計(jì)算機(jī)當(dāng)作一臺(tái)計(jì)算機(jī)來看,而在同一臺(tái)計(jì)算機(jī)內(nèi)創(chuàng)建多臺(tái)虛擬計(jì)算機(jī)。這催生了關(guān)于虛擬機(jī)的想法,即同一臺(tái)計(jì)算機(jī)可以充當(dāng)多臺(tái)計(jì)算機(jī)并且全部并行運(yùn)行。盡管這是一個(gè)還不錯(cuò)的主意,但在宿主計(jì)算機(jī)的資源利用方面,這并不是最好的選擇。運(yùn)行多個(gè)操作系統(tǒng)需要更多的資源,但在同一個(gè)操作系統(tǒng)里運(yùn)行多個(gè)程序并不需要這些資源。

這些問題最終催生了關(guān)于容器技術(shù)的想法。容器只使用一個(gè)宿主操作系統(tǒng)(Linux)的內(nèi)核,就可以運(yùn)行多個(gè)程序并分別依賴于相互獨(dú)立的運(yùn)行時(shí)。這個(gè)概念在 Linux 操作系統(tǒng)上已經(jīng)有一段時(shí)間了。隨著基于容器技術(shù)的應(yīng)用程序部署的普及,它變得更加流行并且有了很多改進(jìn)和提升。容器可以像虛擬機(jī)一樣工作,卻不需要多一個(gè)操作系統(tǒng)的開銷。您可以將應(yīng)用程序和所有相關(guān)的依賴項(xiàng)放入容器鏡像中。它便可以被放在任何可以運(yùn)行容器的宿主操作系統(tǒng)中運(yùn)行。Docker 和 Rocket 是兩個(gè)熱門的容器構(gòu)建平臺(tái)。

容器技術(shù)為 Netflix、LinkedIn 和 Twitter 等組織提供了底層框架,用于構(gòu)建他們要求苛刻的永遠(yuǎn)在線的多區(qū)域、多數(shù)據(jù)中心應(yīng)用平臺(tái)。但這并不意味著利用容器技術(shù)沒有任何難點(diǎn)?;谌萜鞯牟渴饚淼妮p量特性讓跨多個(gè)容器的平臺(tái)維護(hù)和編排變得非常復(fù)雜。隨著微服務(wù)架構(gòu)(MSA)的出現(xiàn),單體式應(yīng)用程序被分成更小塊的微服務(wù)。這些微服務(wù)能夠完成整個(gè)服務(wù)里的某一個(gè)特定功能并部署在容器中(在大多數(shù)情況下都可以)。這給分布式系統(tǒng)生態(tài)系統(tǒng)帶來了一系列新的需求。要讓系統(tǒng)最終保持一致,并且彼此之間沒有太多復(fù)雜的通信。

這些新的需求最終幫助工程師們構(gòu)建了一個(gè)容器編排系統(tǒng)。該系統(tǒng)可用于維護(hù)更大規(guī)模的容器部署的一致性。毋庸置疑的是,這個(gè)領(lǐng)域的頂尖技術(shù)來自 Google。因?yàn)樗鼈兊囊?guī)模非常大。他們構(gòu)建了名為“Kubernetes”(又名 k8s)的容器編排平臺(tái),并成為大規(guī)模容器編排需求的事實(shí)標(biāo)準(zhǔn)。k8s 讓工程師可以:

在大型集群中運(yùn)行容器

將數(shù)據(jù)中心視為一臺(tái)計(jì)算機(jī)

控制服務(wù)之間的通信(在容器上運(yùn)行)

動(dòng)態(tài)伸縮與為多個(gè)服務(wù)進(jìn)行負(fù)載均衡

Kubernetes 和 Docker 讓應(yīng)用程序員的生活更加輕松。他們不用再考慮他們的應(yīng)用在不同的環(huán)境(操作系統(tǒng)、開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境等)下的不同表現(xiàn)。他構(gòu)建的容器鏡像在所有環(huán)境中運(yùn)行表現(xiàn)幾乎完全相同,因?yàn)樗幸蕾図?xiàng)都被打包到鏡像中了。

但是,盡管我們有了容器和編排框架,我們?nèi)匀恍枰粋€(gè)管理這些服務(wù)器的團(tuán)隊(duì)。這意味著數(shù)據(jù)中心需要使用像 Docker 和 Kubernetes 這樣的技術(shù)進(jìn)行管理,以確保它對(duì)于應(yīng)用程序來說就像一個(gè)單臺(tái)計(jì)算機(jī)一樣。如果不是你自己來做這些事情,而是別人來為你管理這部分工作,這正是 serverless 架構(gòu)所帶來的便利。您的服務(wù)器將由第三方云提供商(如 Amazon(Lambda),Microsoft(Azure Functions)或 Google(Cloud Functions))進(jìn)行管理?,F(xiàn)在,分布式系統(tǒng)將由應(yīng)用程序員進(jìn)行編程,而基礎(chǔ)設(shè)施管理將由云提供商完成。這是分布式系統(tǒng)發(fā)展的最新狀態(tài),并且會(huì)不斷地發(fā)展下去。

想要了解更多分布式知識(shí)點(diǎn)的,可以關(guān)注我一下,我后續(xù)也會(huì)整理更多關(guān)于分布式架構(gòu)這一塊的知識(shí)點(diǎn)分享出來,另外順便給大家推薦一個(gè)交流學(xué)習(xí)群:650385180,里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良多,以下的課程體系圖也是在群里獲取。

總結(jié):

以上就是我要說的內(nèi)容,希望以上的內(nèi)容可以幫助到正在默默艱辛,遇到瓶疾且不知道怎么辦的Java程序員們,我能幫你的只有這么多了,希望大家在往后的工作中,一切順利。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 承載量是分布式系統(tǒng)存在的原因 當(dāng)一個(gè)互聯(lián)網(wǎng)業(yè)務(wù)獲得大眾歡迎的時(shí)候,最顯著碰到的技術(shù)問題,就是服務(wù)器非常繁忙。當(dāng)每天...
    XYLY閱讀 1,524評(píng)論 1 48
  • 本文轉(zhuǎn)載自http://geek.csdn.net/news/detail/112672 WeTest導(dǎo)讀 我們常...
    shineegirl閱讀 1,616評(píng)論 0 26
  • 前言 基于 Docker 的容器技術(shù)是在2015年的時(shí)候開始接觸的,兩年多的時(shí)間,作為一名 Docker 的 De...
    Java架構(gòu)閱讀 9,054評(píng)論 2 144
  • 時(shí)間過的很快,回看上一篇日記,已經(jīng)是14個(gè)月以前的事情了,這段時(shí)間發(fā)生了什么呢??很多把,也不知道 從那里說起,說...
    凱撒牛閱讀 169評(píng)論 0 0

友情鏈接更多精彩內(nèi)容