云技術如何一步步演進的?
云原生解決了什么問題?
物理設備
電腦剛被發明的時候,還沒有網絡,每個電腦(PC),就是一個單機。
這臺單機,包括CPU、內存、硬盤、顯卡等硬件。用戶在單機上,安裝操作系統和應用軟件,完成自己的工作。
后來,有了網絡,單機與單機之間,可以交換信息,協同工作。
再后來,單機性能越來越強,就有了服務器(Server)。把一些服務器集中起來,放在機房里,然后讓用戶通過網絡,去訪問和使用機房里的計算機資源。
再后來,小型網絡變成了大型網絡,就有了互聯網(Internet)。小型機房變成了大型機房,就有了IDC(Internet Data Center,互聯網數據中心)。
當越來越多的計算機資源和應用服務被集中起來,就變成了——“云計算(Cloud Computing)”。無數的大型機房,就成了“云端”。
虛擬化
如果要對物理資源進行管理,第一步,就是“虛擬化”。
虛擬化是云計算的基礎。簡單來說,虛擬化就是在一臺物理服務器上,運行多臺“虛擬服務器”。這種虛擬服務器,也叫虛擬機(VM,Virtual Machine)。
直接使用物理設備的缺陷:
- 缺乏靈活性
- 時間靈活性:生產或銷毀資源、資源擴容、物理設備的供給流程及設備到貨后的安裝部署冗長;
- 空間靈活性:可獲取到的資源規模大小不夠靈活,如為應對計算資源峰值購買大量設備;
- 操作靈活性:設備上架、安裝、配置都需要人工完成大量工作,大量的設備集群運維工作。
- 隔離性差:為了提高資源利用率,可能會將多個服務部署到同一個物理設備上,這可能會導致多個服務之間相互干擾、隔離性差,嚴重時甚至會造成安全問題。
- 不可復制:當一個物理設備上的應用需要擴展時,只能在增加物理設備后,再做一遍物理資源配置、應用發布、網絡配置等重復性工作,無法快捷地實現對應用的復制和粘貼。
從表面來看,這些虛擬機都是獨立的服務器,但實際上,它們共享物理服務器的CPU、內存、硬件、網卡等資源。
虛擬機監視器可以對捕獲的特權指令進行替換操作,從而完整地模擬出某個虛擬機監視器下的特權操作。“陷阱+模擬”機制從本質上保證了可影響虛擬機監視器正常運行的指令由虛擬機監視器模擬執行,而大部分非敏感指令還是照常運行在物理CPU上。
簡單來說,虛擬化就是通過模仿下層原有的功能模塊創造接口來“欺騙”上層的機制。通常的做法是在整個系統架構中增加一個抽象層,負責分割下層的物理資源,然后組合成邏輯資源供上層使用。
云計算
直接使用虛擬機的缺陷:
-
時間靈活性:虛擬化服務并非隨時可用,同時虛擬化的過程還需要比較復雜的人工配置,隨著集群規模的擴大,人工配置愈加復雜、耗時。所以,僅通過虛擬化軟件管理的物理服務器規模并不是特別大,一般是幾十臺至百臺的規模。
-
空間靈活性:缺乏分布式部署,無法實現資源彈性擴展。當用戶數量增多時,虛擬化軟件所能管理的集群規模遠未達到理想的程度,很可能造成資源不夠。所以,隨著對集群規模的需求越來越大,必須采取自動化的流程來實現資源彈性擴展。
-
操作靈活性:缺乏統一的自動化管理。雖然創建一臺虛擬機的過程相對較為基礎,但是操作的靈活性意味著用戶可以更方便、迅速地對資源進行更進一步的管理操作,所有操作都可以通過自動化腳本來實現。
云計算的目標,就是解決這三大靈活性的問題。云控制平臺通過調度器(Scheduler)來管理由幾千臺物理服務器抽象而來的虛擬資源池,無論用戶需要多少CPU、內存、硬盤資源的虛擬機,調度器都會自動在資源池中匹配到最合適的資源,通過虛擬機的形式供給資源,并做好配置。這個階段我們稱為“池化”或者“云化”。虛擬化的能力和靈活性到了這個階段,才可以被稱為“云計算”,在這之前都只能叫作“虛擬化”。
什么是云計算?
云計算指IT基礎設施的交付和使用模式,用戶可以通過網絡,以按需、易擴展的方式獲得所需計算機資源。
第一層次,是最底層的硬件資源,主要包括CPU(計算資源),硬盤(存儲資源),還有網卡(網絡資源)等。
第二層次,用戶不直接使用CPU、硬盤、網卡,廠商把操作系統(例如Windows、Linux)裝好,把數據庫軟件裝好,用戶直接使用。
第三層次,廠商不但要裝好操作系統這些基本的,還要把具體的應用軟件裝好,例如FTP服務端軟件、在線視頻服務端軟件等,用戶可以直接使用服務。
IaaS: Infrastructure-as-a-Service(基礎設施即服務)
用戶可以通過管理頁面或者API創建一臺EC2實例(虛擬機),然后直接通過瀏覽器或者通過SSH客戶端登錄控制臺,而不再需要考慮物理服務器購買、網絡的布線、操作系統安裝等煩瑣的傳統IT基礎運維工作。
PaaS: Platform-as-a-Service(平臺即服務)
它直接為用戶提供一套平臺,包括語言運行環境、編程框架及數據存儲中間件等一系列功能。這個平臺可以是Java開發平臺,用戶只需要在遵守平臺開發規范的前提下,編寫自己的業務代碼,單擊運行,平臺就會自動完成代碼編譯和打包,以及程序所需的數據存儲(例如MySQL),即通過調用SDK或者API就可以使用平臺,使得用戶可以更加關注自己的業務代碼的編寫。
SaaS: Software-as-a-Service(軟件即服務)
它是最高層的抽象,對于最終用戶,它不關心任何技術相關內容,以服務的方式交付。我們使用的在線云編輯器就是一種SaaS服務,只需要通過瀏覽器就可以在線編輯Word或者PPT,并且可以云端保存,而且只要在能夠連接到互聯網的情況下,都可以編輯,用戶不需要關心背后的實現細節。SaaS將應用的最終形態直接交付使用者,向用戶暴露更少的技術細節。
容器化
使用虛擬化一段時間后,發現它存在一些問題:不同的用戶,有時候只是希望運行各自的一些簡單程序,跑一個小進程。為了不相互影響,就要建立虛擬機。如果建虛擬機,顯然浪費就會有點大,而且操作也比較復雜,花費時間也會比較長。而且,有的時候,想要遷移自己的服務程序,就要遷移整個虛擬機。顯然,遷移過程也會很復雜。所以就引入了“容器(Container)”。
容器也是虛擬化,但是屬于“輕量級”的虛擬化。它的目的和虛擬機一樣,都是為了創造“隔離環境”。但是,它又和虛擬機有很大的不同——虛擬機是操作系統級別的資源隔離,而容器本質上是進程級的資源隔離。
容器與傳統虛擬機的對比
- 傳統虛擬機是需要安裝整個操作系統的,然后再在上面安裝業務應用,啟動應用,通常需要幾分鐘去啟動應用,而容器是直接使用鏡像來運行業務容器的,其容器啟動屬于秒級別;
- 容器需要的資源更少,容器在操作系統級別進行虛擬化,容器容器和內核交互,幾乎沒有性能損耗,而虛擬機運行著整個操作系統,占用物理機的資源就比較多;
- 容器更輕量,容器(docker)的架構可以共用一個內核與共享應用程序庫(yum),所占內存極小;同樣的硬件環境,容器運行的鏡像數遠多于虛擬機數量,對系統的利用率非常高;
- 隔離級別,與虛擬機相比,容器隔離性更弱,屬于進程之間的隔離,虛擬機可實現系統級別隔離;
- 容器的安全性也更弱,容器的租戶root和宿主機root相同,一旦容器內的用戶從普通用戶權限提升為root權限,它就直接具備了宿主機的root權限,進而可進行無限制的操作。虛擬機租戶root權限和宿主機的root虛擬機權限是分離的,可以防止虛擬機突破和彼此交互,而容器至今還沒有任何形式的硬件隔離;
- 虛擬化創建是分鐘級別的,容器創建是秒級別的,容器的快速迭代性,決定了無論是開發、測試、部署都可以節省大量時間;
云原生是什么?
Pivotal最新官網對云原生概括可以具體化為4個要點:DevOps+持續交付+微服務+容器,一種構建和運行應用程序的方法。
微服務:微服務的關鍵優勢在于可組合性,將應用分解為一組更小的輕量級服務,而這些服務可通過應用編程接口 (API) 輕松組合并相互連接。
容器和編排:容器是輕量級的可執行組件,包含在任何環境中運行代碼所需的所有元素(包括應用源代碼和依賴項)。容器提供工作負載可移植性,支持“一次構建、隨處運行”的代碼,使開發和部署過程大大簡化。由于它們可以獨立部署,因此還有助于避免各種語言、庫和框架之間的磨合。這種可移植性和靈活性使得容器成為構建微服務架構的理想選擇。
DevOps:云原生應用的開發需要改為采用像 DevOps 這樣的敏捷交付方法,開發者和 IT 運營團隊就可以密切協作,自動執行基礎架構和軟件交付流程。DevOps 可以加快一個想法從提出到部署的整個過程。DevOps 的核心在于,在應用的整個生命周期中,都要確保日常運維任務自動化和環境的標準化,容器可以提供標準化的環境。
持續集成和持續交付 (CI/CD):通過該自動化流程,可以更快地修復、擴縮和部署系統。通過 CI/CD 流水線,可以自動構建、測試和部署應用更改,而無需安排停機時間或等待維護窗口。持續交付可確保軟件發布更可靠、風險更低,從而使得團隊可以更快速、更頻繁地提供新的服務和功能。
采用開源堆棧(K8S+Docker)進行容器化,基于微服務架構提高靈活性和可維護性,借助敏捷方法、DevOps支持持續迭代和運維自動化,利用云平臺設施實現彈性伸縮、動態調度、優化資源利用率。
云原生解決了什么問題?
部署和擴展困難:傳統軟件部署通常需要手動配置和管理,而且在應對大規模流量時很難快速擴展。
環境一致性:開發、測試和生產環境之間的不一致性會導致問題的出現,因為應用在不同環境中的運行可能會產生不同的結果。
資源浪費:傳統部署方式可能會導致資源的浪費,因為通常需要為應用的最高負載進行配置,而在低負載時會浪費資源。
恢復緩慢:基于虛擬機的基礎設施相對于基于微服務的應用程序來說,是緩慢而低效的。因為單個虛擬機啟動/關閉的速度很慢,并且在部署應用程序代碼之前就會帶來巨大的開銷。