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