分布式系统发展史--转
http://www.infoq.com/cn/articles/the-evolution-of-distributed-systems
分布式系統(tǒng)(確切地說應(yīng)該是分布式計(jì)算機(jī)系統(tǒng))從它誕生到現(xiàn)在已經(jīng)過去了很長的時(shí)間。在很久以前,一臺電腦一次只能完成一項(xiàng)特定的任務(wù)。如果我們需要同時(shí)完成多項(xiàng)任務(wù),則需要多臺計(jì)算機(jī)并行運(yùn)行。但是,并行運(yùn)行并不足以構(gòu)建真正的分布式系統(tǒng),因?yàn)樗枰环N機(jī)制來在不同計(jì)算機(jī)或者那些運(yùn)行在計(jì)算機(jī)上的程序之間進(jìn)行通信。這種在多臺計(jì)算機(jī)之間交換/共享數(shù)據(jù)的需求催生了面向消息通信的想法,即兩臺計(jì)算機(jī)使用包含了數(shù)據(jù)的消息來共享數(shù)據(jù)。文件共享、數(shù)據(jù)庫共享等其他機(jī)制當(dāng)時(shí)還沒有出現(xiàn)。
圖片來源:https://dzone.com/articles/building-integration-solutions-a-rethink
接著,我們進(jìn)入了多任務(wù)操作系統(tǒng)和個人電腦的時(shí)代。利用Windows、Unix、Linux等操作系統(tǒng),我們可以在同一臺計(jì)算機(jī)上運(yùn)行多個任務(wù)。這使得分布式系統(tǒng)開發(fā)人員能夠在一臺或者幾臺通過消息傳遞連接的計(jì)算機(jī)內(nèi)構(gòu)建和運(yùn)行整個分布式系統(tǒng)。這催生了面向服務(wù)的架構(gòu)(SOA),其中每個分布式系統(tǒng)可以通過一組集成在一臺計(jì)算機(jī)或多臺計(jì)算機(jī)上運(yùn)行的服務(wù)來構(gòu)建。我們通過WSDL(用于SOAP協(xié)議)或WADL(用于REST協(xié)議)等語言適當(dāng)?shù)囟x服務(wù)接口。接著,服務(wù)的使用者將利用這些接口來進(jìn)行客戶端的實(shí)現(xiàn)。
圖片來源:https://www.akuaroworld.com/telecom-oss-new-network-architecture/soa-model/
隨著計(jì)算能力和存儲價(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)連接在一起。這個組件被稱為ESB(企業(yè)服務(wù)總線)。它作為一個“語言”翻譯者,就像一個中間人在幫助一群使用不同“語言”但希望相互通信的人進(jìn)行溝通。在企業(yè)應(yīng)用中,“語言”代表著在通信時(shí)不同系統(tǒng)的消息傳遞協(xié)議和消息格式。
圖片來源:http://ibmwebsphereenterpriseservicebus.blogspot.com/2015/09/enterprise-requirements-for-esb.html
這種模式工作得很好,即使在今天也能正常工作。隨著萬維網(wǎng)的普及和模型的簡化,基于REST的通信比基于SOAP的通信模型變得更加流行。這促進(jìn)了基于應(yīng)用程序編程接口(API)的REST模型通信的發(fā)展。由于REST模型的簡潔特性,我們需要在標(biāo)準(zhǔn)REST API實(shí)現(xiàn)之上實(shí)現(xiàn)安全(身份驗(yàn)證和授權(quán))、緩存、流控和監(jiān)控等各種類型的功能。但我們并不想獨(dú)立地在每個API上實(shí)現(xiàn)這些功能,而是需要一個公共組件將這些功能應(yīng)用于這些API之上。這樣的需求催生了API管理平臺的發(fā)展。現(xiàn)在,它已經(jīng)成為了任何分布式系統(tǒng)的核心功能之一。
圖片來源:https://www.infoq.com/presentations/api-management-architecture
隨后,我們見證了分布式系統(tǒng)大爆炸的時(shí)代。Facebook、Google、Amazon、Netflix、LinkedIn、Twitter等互聯(lián)網(wǎng)公司變得異常龐大。他們開始想要構(gòu)建跨越多個地理區(qū)域和多個數(shù)據(jù)中心的分布式系統(tǒng)。這樣的需求使他們的技術(shù)焦點(diǎn)轉(zhuǎn)向了一切開始的地方。工程師們開始思考單臺計(jì)算機(jī)和單個程序的概念。他們不再把一臺計(jì)算機(jī)當(dāng)作一臺計(jì)算機(jī)來看,而在同一臺計(jì)算機(jī)內(nèi)創(chuàng)建多臺虛擬計(jì)算機(jī)。這催生了關(guān)于虛擬機(jī)的想法,即同一臺計(jì)算機(jī)可以充當(dāng)多臺計(jì)算機(jī)并且全部并行運(yùn)行。盡管這是一個還不錯的主意,但在宿主計(jì)算機(jī)的資源利用方面,這并不是最好的選擇。運(yùn)行多個操作系統(tǒng)需要更多的資源,但在同一個操作系統(tǒng)里運(yùn)行多個程序并不需要這些資源。
這些問題最終催生了關(guān)于容器技術(shù)的想法。容器只使用一個宿主操作系統(tǒng)(Linux)的內(nèi)核,就可以運(yùn)行多個程序并分別依賴于相互獨(dú)立的運(yùn)行時(shí)。這個概念在Linux操作系統(tǒng)上已經(jīng)有一段時(shí)間了。隨著基于容器技術(shù)的應(yīng)用程序部署的普及,它變得更加流行并且有了很多改進(jìn)和提升。容器可以像虛擬機(jī)一樣工作,卻不需要多一個操作系統(tǒng)的開銷。您可以將應(yīng)用程序和所有相關(guān)的依賴項(xiàng)放入容器鏡像中。它便可以被放在任何可以運(yùn)行容器的宿主操作系統(tǒng)中運(yùn)行。Docker和Rocket是兩個熱門的容器構(gòu)建平臺。
圖片來源:https://techglimpse.com/docker-installation-tutorial-centos/
容器技術(shù)為Netflix、LinkedIn和Twitter等組織提供了底層框架,用于構(gòu)建他們要求苛刻的永遠(yuǎn)在線的多區(qū)域、多數(shù)據(jù)中心應(yīng)用平臺。但這并不意味著利用容器技術(shù)沒有任何難點(diǎn)。基于容器的部署帶來的輕量特性讓跨多個容器的平臺維護(hù)和編排變得非常復(fù)雜。隨著微服務(wù)架構(gòu)(MSA)的出現(xiàn),單體式應(yīng)用程序被分成更小塊的微服務(wù)。這些微服務(wù)能夠完成整個服務(wù)里的某一個特定功能并部署在容器中(在大多數(shù)情況下都可以)。這給分布式系統(tǒng)生態(tài)系統(tǒng)帶來了一系列新的需求。要讓系統(tǒng)最終保持一致,并且彼此之間沒有太多復(fù)雜的通信。
圖片來源:https://martinfowler.com/articles/microservices.html
這些新的需求最終幫助工程師們構(gòu)建了一個容器編排系統(tǒng)。該系統(tǒng)可用于維護(hù)更大規(guī)模的容器部署的一致性。毋庸置疑的是,這個領(lǐng)域的頂尖技術(shù)來自Google。因?yàn)樗鼈兊囊?guī)模非常大。他們構(gòu)建了名為“Kubernetes”(又名k8s)的容器編排平臺,并成為大規(guī)模容器編排需求的事實(shí)標(biāo)準(zhǔn)。k8s讓工程師可以:
- 在大型集群中運(yùn)行容器
- 將數(shù)據(jù)中心視為一臺計(jì)算機(jī)
- 控制服務(wù)之間的通信(在容器上運(yùn)行)
- 動態(tài)伸縮與為多個服務(wù)進(jìn)行負(fù)載均衡
Kubernetes和Docker讓應(yīng)用程序員的生活更加輕松。他們不用再考慮他們的應(yīng)用在不同的環(huán)境(操作系統(tǒng)、開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境等)下的不同表現(xiàn)。他構(gòu)建的容器鏡像在所有環(huán)境中運(yùn)行表現(xiàn)幾乎完全相同,因?yàn)樗幸蕾図?xiàng)都被打包到鏡像中了。
圖片來源:https://redmondmag.com/articles/2017/08/01/container-orchestration-with-kubernetes.aspx
但是,盡管我們有了容器和編排框架,我們?nèi)匀恍枰粋€管理這些服務(wù)器的團(tuán)隊(duì)。這意味著數(shù)據(jù)中心需要使用像Docker和Kubernetes這樣的技術(shù)進(jìn)行管理,以確保它對于應(yīng)用程序來說就像一個單臺計(jì)算機(jī)一樣。如果不是你自己來做這些事情,而是別人來為你管理這部分工作,這正是serverless架構(gòu)所帶來的便利。您的服務(wù)器將由第三方云提供商(如Amazon(Lambda),Microsoft(Azure Functions)或Google(Cloud Functions))進(jìn)行管理。現(xiàn)在,分布式系統(tǒng)將由應(yīng)用程序員進(jìn)行編程,而基礎(chǔ)設(shè)施管理將由云提供商完成。這是分布式系統(tǒng)發(fā)展的最新狀態(tài),并且會不斷地發(fā)展下去。
查看英文原文:https://medium.com/@chanakaudaya/the-evolution-of-distributed-systems-fec4d35beffd
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/9354171.html
總結(jié)
以上是生活随笔為你收集整理的分布式系统发展史--转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不想参加无聊的团队分享, 我们这样玩
- 下一篇: 一致性思维导图