在服務器虛擬化的世界中,物理服務器被稱為主機,它運行主機操作系統。每個VM都是一個客戶,并運行一個客戶操作系統。客戶將相互隔離。
通過基于虛擬機管理程序的虛擬化,可以在主機操作系統和底層硬件層之間放置超級主管或虛擬機監視器 (VMM),為客戶的操作系統提供必要的資源。
半虛擬化和完全虛擬化可以在客戶操作系統安裝到虛擬機之前對其進行修改。這提高了性能,因為修改后的客戶端操作系統可以直接與超級管理程序通信,從而減少了模擬開銷。
硬件虛擬化也試圖減少管理程序的開銷,但它是通過硬件擴展而不是軟件修改來實現的。
通過使用內核級虛擬化而不是超級管理程序,您可以運行單獨的linux內核版本。這使得在單個主機上運行多個虛擬機變得容易,因為設備驅動程序可用于主linux內核和虛擬機之間的通信。
最后,通過系統級或操作系統虛擬化,您可以在操作系統內核的單個實例上運行多個邏輯不同的環境。在系統級虛擬化中,所有虛擬機必須共享相同的操作系統副本,而服務器虛擬化允許不同的虛擬機具有不同的操作系統。
虛擬機與容器
容器化運動的兩個主要推動者是Docker (一種流行的容器啟動工具) 和Google的Kubernetes (可幫助管理多個容器)。容器是共享主機操作系統內核的獨立代碼執行環境。
容器比虛擬機更高效、更輕,因為它們繞過冗余客戶操作系統并減少相關啟動開銷。與虛擬機相比,開發人員可以在同一硬件上運行多達6到8倍的容器。
集裝箱確實有它們自己的缺點。作為一種相對較新的方法,他們沒有大量成熟技術擁有的管理工具,因此他們需要做大量的設置和維護工作。此外,人們還擔心安全問題。
使用VM,您可以使用來賓映像輕松地在主機之間移動工作負載,但是裸機更難升級或移動。使用裸機服務器,回滾機器狀態成為一項具有挑戰性的任務。
虛擬機與無服務器計算
在傳統的IaaS云環境中,客戶首先提供虛擬機、存儲、數據庫以及相關的安全和管理工具,然后將應用程序上傳到虛擬機。
借助無服務器計算,開發人員可以先編寫代碼,然后讓云服務提供商處理所有其他事情。開發人員無需考慮服務器、操作系統、配置或管理。當然,運行代碼需要物理服務器,但這是云服務提供商的責任。
系統將代碼拆分為特定函數,而不是單個應用程序。當觸發此功能的事件發生時,無服務器服務 (如亞馬遜的Lambda) 將運行此功能。無服務器供應商按功能向客戶收費。
與微服務/容器場景一樣,無服務器計算繞過虛擬機層和運行在裸機上的函數。在這一點上,無服務器計算相對不成熟,并且用例有限。
服務器虛擬化的未來
盡管目前容器很熱,人們對無服務器計算越來越感興趣,但現實是服務器虛擬化是一項堅如磐石的技術,因為它為大多數企業應用程序提供了電源-根據一些估計,虛擬機的飽和率高達90%。
將在VM很難想象上的關鍵應用程序會移動到容器或無服務器平臺。異構環境中的用戶可能仍在使用虛擬機,因為容器需要在同一操作系統上運行,并且不能在Linux和Windows之間混合使用。
但是,對于使用最新的DevOps和敏捷方法構建的新應用程序,開發人員現在有不同的選擇。展望未來,開發人員將根據是否在傳統虛擬機、容器或無服務器環境中運行新工作負載做出具體決策。