最近聽了一個關於容器的講座,裏面提到docker未來很可能向Unikernel發展,因此查資料學習了下。
定義
參考維基:unikernel由庫操作系統組成,是一個特殊的、單地址空間的機器鏡像。開發者從中選擇模塊化棧和最小庫集合,組成應用需要的最小化系統架構來運行。這些庫跟應用和配置代碼一起編譯,來構建封閉的、固定用途的鏡像(unikernels),可以直接運行在hypervisor或硬件上,而不需要linux和windows這樣的操作系統。
其中單地址空間是指,只有一個地址空間,即沒有用戶空間和內核空間的區分,因此沒有用戶態和內核態的切換,不需要用戶空間和內核空間的數據拷貝。
簡單來說,unikernel就是一個精簡版的操作系統,去除了運行當前應用不需要的模塊。如下圖是傳統操作系統和Mirage unikernel的對比。
相關概念-hypervisor
也稱作VMM虛擬機監視器,是可以創建和運行虛擬機的軟件、固件或硬件。在hypervisor上可以多個虛擬機,提供了虛擬機的隔離可運行不同的操作系統。
具體可參考:
特點
Unikernel主要目的是減小不必要的代碼邏輯,讓最簡單的操作系統來運行應用。
比如運行web應用,可能只需要運行網絡處理邏輯、磁盤處理邏輯、語言解釋邏輯、cpu調度邏輯就可以了,其他的權限管理、進程切換、可視化、音視頻播放等都可以刪除掉。
優點
- 性能更優 不需要用戶態和內核態拷貝
- 代碼量更小,相比傳統操作系統減小90%以上
- 安全,代碼減小意味着漏洞更少
- 快速啓動,可以在用戶請求時才啓動並進行處理
缺點
- 難調試和難擴展
- 如果硬件更換,硬件驅動可能需要更改,即unikernel需要更新