作者:lixuefeng
轉載鏈接:https://zhuanlan.zhihu.com/p/74483850
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
-------------------------------------------------------------------------------------------
IT軟體技術架構進入雲化時代後,新概念、新技術大量湧現。從幾年前熱火的Openstack、計算存儲網路三大虛擬化技術、Iaas平台,到近幾年更火熱的容器和雲原生的相關技術,在雲計算這一領域新技術可謂是層出不窮。
我們經常會聽到的這些概念,比如容器、docker、kubernetes、微服務架構、Paas平台、服務中台、Devops、雲原生等等。這些技術和概念彼此之間感覺是獨立的,我們很容易從其中某一個角度學習入手並應用;但是,很多時候,我們會發現這些技術彼此之間又有密切的關聯,從文章也好、技術落地應用的場景也好,它們往往又出現在同一個地方。它們之間究竟有什麼聯繫,彼此之間有什麼依賴,讓人十分的困惑。
在本文中,從這些技術彼此之間的依賴和關係入手,講述它們在當今軟體雲化和微服務化時代中的作用,希望讀者從這些總結對比入手,對微服務相關的技術體系建立全局性的視野和理解。
1. Docker容器:
docker大部分人都熟悉或者至少是聽過。Docker技術在很多技術資料和書籍上,往往會跟虛擬化技術做對比,它們的對比如下:
- KVM等虛擬化技術是在操作系統級別上進行虛擬和隔離,每一個虛機都是獨立的OS。
- 而docker是在同一個操作系統中,實現了輕量級的虛擬化。「輕量級的虛擬化」怎麼理解呢?看起來docker容器是獨立的操作系統,本質上是同一個操作系統中的進程隔離。所以它是輕量級的;從而,docker比KVM更省資源、資源利用率更高。
Docker的設計理念很偉大、作用也很偉大。但是docker的偉大性遠不只是體現在「輕量的虛擬化」;docker的偉大性體現在:它實現了:同一個軟體發布,在不同的平台上運行。
這個好處是不是很熟悉?這其實就是Java最初流行起來的原因。Python語言為了實現這一點,弄出了VirtualEnv,把依賴包都隨著程序發布,才解決了多平台運行的問題。Docker的設計很優雅,一個應用都打包成一個image格式,image採用分層技術等等,這部分不是本文的重點,大家希望更深入了解的話,可以參考其他資料。
2. Kubernetes
docker鏡像運行起來是一個一個的程序,多個程序合起來做成一個大的分散式應用怎麼做呢?
答案很簡單,一樣的,程序之間互相調用就行。就好比傳統的分散式應用,多弄幾台伺服器,一個伺服器上裝一個程序,程序之間通過socket或其他協議通信。基於docker的分散式應用也是如此,區別只是網路虛擬化了、CPU和內存資源也虛擬化了。
但是永遠不要低估分散式應用的複雜性,舉兩個例子,想像我們搭建了一套分散式集群,運行了一套分散式應用:
- 這個集群中的某個機器出故障了(斷電了、硬碟壞了等等),怎麼去排查故障、怎麼去修復?
- 這個集群中某一部分業務由於訪問量增加,需要擴充支撐能力,怎麼擴充?
針對這兩個問題,我們很容易想到答案,那就是人過去檢查機器、修復或者重裝,負載過大了,就改應用的架構,上面套上負載均衡性,採用可擴展的架構。這些都是傳統的辦法,這些解決辦法不好的地方也很明顯,就是修復太慢,太費人力、成本高、對業務影響大,想像一個網站,等擴展架構都弄好了,用戶也就都流失了。
Kubernetes是容器編排系統,它首要的目的就是為了解決上面這個例子里的兩個問題:
- 分散式容器應用的可靠性,在伺服器或容器應用出現問題的情況下,自動感知,自動將容器應用在集群內的其他機器里重新運行起來
- 分散式容器應用的可擴展性,通過啟動相同的容器應用,自動的提升應用的負載支撐能力。
Google為了壓制AWS,把自己的容器運行平台開源出來,成為了現在的Kubernetes,這段歷史大家可以搜索了解一下。
3. Paas
雲計算的經典理論上講三大層:Iaas、Paas、Saas,分布是Infrastructure、Platform、Software as a service。其中的Infrastructure指的是硬體資源虛擬化;Platform指的是軟體平台,是應用軟體運行的基礎平台。
為什麼經典理論要把Paas這一層單獨拿出來?
Saas層是直接面向業務用戶的,Iaas層是應用運行的底層物理資源,中間的Paas是應用運行的標準平台,它包括基礎資料庫服務、基礎中間件服務、基礎開發框架和開發套件、應用部署、管理和運維服務。通過Paas平台這一層,Saas層更專註於自身的業務實現,運行平台和運行中間件由Paas層提供。
因為前述的Kubernetes的成熟程度以及無可比擬的優勢,Paas層的基礎架構基本上都是採用Kubernetes。
有時候會聽到「中台」這個概念,中台這個」中「字意思是」上對Saas、下對Iaas「,中間的就是中台。中台這個概念本質上是把paas層再細分,分為底層基礎平台(kubernetes和docker這一層)、數據層(叫做數據中台)、業務層(業務中台)等。