日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
我們該如何定義Unikernel以及它的存在?

我們該如何定義 Unikernel 以及它的存在?

作者:張怡 2015-12-10 10:23:12

云計算 如果你持續(xù)關(guān)注DevOps.或是對技術(shù)真正感興趣,你也許已經(jīng)聽說Unikernel很多次了。在過去的幾個月,它似乎越來越受關(guān)注。究竟什么是Unikernel? 它是我想要的東西嗎?

創(chuàng)新互聯(lián)建站云計算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、成都IDC機(jī)房托管、云服務(wù)器、網(wǎng)頁空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗,已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、網(wǎng)頁空間、空間域名、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。

本文介紹了一種新的應(yīng)用虛擬化技術(shù),它讓應(yīng)用及其所依賴的運(yùn)行環(huán)境、甚至是連內(nèi)核一起打包,直接運(yùn)行在硬件或是Hypervisor上,從而更加高效的利用計算機(jī)資源。非常有意思,推薦給大家。

如果你持續(xù)關(guān)注DevOps周刊,DevOps主題的會議或是對技術(shù)真正感興趣,你也許已經(jīng)聽說Unikernel很多次了。在過去的幾個月,它似乎越來越受關(guān)注。

然而,究竟什么是Unikernel? 它是我想要的東西嗎?

我糾結(jié)這個問題許久。不知如何定義Unikernel以及它存在的意義?

什么是Unikernel?

真相的來源僅僅是Wikipedia上的一段晦澀的解釋,我們先看看:

Unikernel是通過使用專門的庫操作系統(tǒng)來構(gòu)建的單地址空間機(jī)器鏡像。開發(fā)者通過選擇棧模塊和一系列最小依賴庫來運(yùn)行應(yīng)用,而這些棧和庫對應(yīng)于操作系統(tǒng)中運(yùn)行應(yīng)用所必需的依賴。

這些庫負(fù)責(zé)應(yīng)用和配置代碼編譯,構(gòu)建成封閉的、固定用途的鏡像(Unikernel)可以直接在虛擬機(jī)管理程序(hypervisor)或硬件上運(yùn)行,不需要類似Linux或Windows的操作系統(tǒng)介于其中。

---- 維基百科:Unikernel

都清楚了,對嗎?

好吧,如果是我,或許以上并沒有說太多。接下來是我對Unikernel的解釋。

首先讓我們跟著這里例子回顧一下。假設(shè)你是一個開發(fā)者在寫PHP應(yīng)用。當(dāng)你運(yùn)行你的PHP(其他Ruby、Node、Perl均類似)應(yīng)用,你本質(zhì)上是在運(yùn)行:

  • 語言解釋器:PHP、Perl、Ruby、...
  • 調(diào)用操作系統(tǒng)中系統(tǒng)級別的API
  • 其中的一些API調(diào)用需要不同級別的權(quán)限,強(qiáng)制切換應(yīng)用程序的上下文...(用戶空間 vs. 內(nèi)核空間)
  • 所有運(yùn)行在操作系統(tǒng)上,例如CentOS、Debian、Ubuntu、...
  • 或許是運(yùn)行在VM上,例如VMware、Xen、KVM、...
  • 或許是運(yùn)行在自己的虛擬化管理系統(tǒng)上,例如ESXi、Xen Hypervisor...
  • 依次運(yùn)行在硬件上
  • 通過BIOS或UEFI來引導(dǎo)

說老實話,如果你在抽象一個應(yīng)用程序構(gòu)建所需的所有層次,這會是一個奇跡般的工作。

但是他們做到了。并且做得非常好,有較好的性能。但是你必須認(rèn)識到,在提供應(yīng)用運(yùn)行環(huán)境的硬件到應(yīng)用程序本身存在許多層。

那就是Unikernel試圖解決的:刪除應(yīng)用與硬件中間臃腫的部分。讓最“精簡”的操作系統(tǒng)運(yùn)行你的代碼。

這里有一篇論文總結(jié)得非常好:

Unikernel的愿景:當(dāng)你看到云客戶端時就像看到單應(yīng)用硬件一樣。

- The Rise and Fall of the Operating System

Unikernel試圖抹去現(xiàn)代操作系統(tǒng)帶來的一些復(fù)雜性。因為“通用”的操作系統(tǒng)(就像任何Linux和Windows的發(fā)行版),通常會伴隨著帶來一些對你的應(yīng)用來說并不需要的驅(qū)動、依賴包、服務(wù)、等等,但這些對每一個操作系統(tǒng)來說某種程度上又是必需的。

甚至是在Linux內(nèi)核的核心模塊都并不是需要每一次都完全加載。像USB驅(qū)動這類東西在虛擬化的“云”環(huán)境被認(rèn)為是無用的,但仍然會被包含在內(nèi)核中。

相比容器和虛擬化,Unikernel所呈現(xiàn)的演進(jìn)如下圖:

(來源:road_to_unikernels)

Unikernel對比通用的操作系統(tǒng)例如Linux有許多優(yōu)勢;

  • 安全性的提升:只運(yùn)行操作系統(tǒng)的核心,廢棄掉那些可能是干擾源的視頻和USB驅(qū)動。
  • 占用很小空間:想象一下能夠抹去95%內(nèi)核的大小,因為你的應(yīng)用不需要那些。
  • 定制的實現(xiàn):深諳應(yīng)用并且把內(nèi)核精簡調(diào)整到你想要的部分。
  • 快速精準(zhǔn)的運(yùn)行Unikernel實例(就像運(yùn)行一個Docker實例一樣),啟動時間少于1s。

這樣我們非常自然的把Unikernel當(dāng)作是微服務(wù)的備選方案。

用Unikernel抹去復(fù)雜的中間層

如果你運(yùn)行應(yīng)用之后想要它的開銷是最小的,那你就可能要考慮制作一個Unikernel。

為此,要使用庫操作系統(tǒng)(LibOS)。一個庫操作系統(tǒng)會給你提供構(gòu)建自己的Unikernel的方式。最值得關(guān)注的是MirageOS(術(shù)語“unikernel”的創(chuàng)造者)和Rump Kernels。兩者本質(zhì)上都是一系列標(biāo)準(zhǔn)化的驅(qū)動和庫,這樣你就不需要重復(fù)發(fā)明像TCP棧、持久存儲層等這類東西。

Unikernel是用高級語言定制的操作系統(tǒng)內(nèi)核,并且作為獨(dú)立的軟件構(gòu)件。完整的應(yīng)用(或應(yīng)用系統(tǒng))作為一個分布式系統(tǒng)運(yùn)行在一套u(yù)nikernels上。

MirageOS基于OCaml語言并且讓unikernels運(yùn)行在Xen hypervisor上。

-- queue.acm.org: Unikernels: Rise of the Virtual Library Operating System

目前***的用來寫unikernel的語言是:

  • Rust
  • Go (or 'golang')
  • OCaml
  • Haskell

這些并不都是新的編程語言。除了Go和Rust,其他均有超過15年的歷史。

為了使操作系統(tǒng)和應(yīng)用運(yùn)行得更加流暢,這些unikernel庫需要使用內(nèi)核部分盡可能小。

現(xiàn)在,由于虛擬化技術(shù),像Xen或VMware這類虛機(jī)管理系統(tǒng)(注*:原Operating System)把異構(gòu)的硬件設(shè)備抽象成一堆標(biāo)準(zhǔn)的虛擬化設(shè)備,unikernel也能為定制的虛擬設(shè)備而優(yōu)化。

Unikernel利用虛擬化的優(yōu)勢創(chuàng)造出一種專屬的經(jīng)過優(yōu)化的操作系統(tǒng)。

想要編譯應(yīng)用程序的“unikernel”,需要依賴MirageOS的庫和OCaml語言,結(jié)果像這樣:

編譯器輸出一個完全獨(dú)立的內(nèi)核取代Unix可執(zhí)行文件。這些unikernels是只為滿足特定的應(yīng)用程序和配置文件而實現(xiàn)的庫操作系統(tǒng)VM,并且會依賴hypervisor提供的資源復(fù)用和隔離。

--- queue.acm.org: Unikernels: Rise of the Virtual Library Operating System

最終你通過運(yùn)行一個Unikernel,精簡專屬的操作系統(tǒng),來運(yùn)行你應(yīng)用程序的一部分。如果你的應(yīng)用和配置需要更新,你需要重新編譯你的源碼來生成新的Unikernel并部署新版本。如果是新的安全升級?也同樣需要重新編譯和部署。

這將使部署的協(xié)調(diào)和編排更加困難,但好處是運(yùn)行應(yīng)用程序更加高效。

構(gòu)建不可變的基礎(chǔ)設(shè)施架構(gòu)的關(guān)鍵在于:應(yīng)用程序不再保存狀態(tài),并且能方便地丟棄和重新構(gòu)建。

一方面,我們可以讓Unikernel運(yùn)行在Docker容器中,但是是否應(yīng)該盡量避免增加其他復(fù)雜的中間層?另一方面,Docker在使用和部署上的優(yōu)勢確實可以彌補(bǔ)這點(diǎn)中間層的開銷。

誰應(yīng)該使用Unikernel?

實話實說,這個問題的答案對我來說還并不明確。我認(rèn)為說如果你現(xiàn)在是要在WordPress上部署web應(yīng)用,使用Unikernel也許還有一定的鴻溝。

另一方面,Unikernel的好處是明顯的,但需要一個完全不同的模式來管理你的基礎(chǔ)設(shè)施,一組不同的技能來構(gòu)建這類的應(yīng)用和內(nèi)核并且需要深諳目前對我們來說還完全陌生的一個概念:不可變的基礎(chǔ)設(shè)施架構(gòu)。

也許在今后的5至10年,我們會以新的規(guī)范一樣來部署Unikernel。目前,我認(rèn)為它針對一小部分想要相當(dāng)專業(yè)和安全應(yīng)用的用戶。對于大多數(shù)普通用戶,虛機(jī)(或是,如果你走在技術(shù)前沿一定會明白:Docker容器)或許才是你應(yīng)該專注的。

更多Unikernel相關(guān)閱讀:

如果您對這個主題感興趣,推薦您一些相關(guān)鏈接:

  • Unikernels: Rise of the Virtual Library Operating System
  • The Rise and Fall of the Operating System (pdf)
  • Presentation: The Road to Unikernels
  • After Docker: Unikernels and Immutable Infrastructure
  • Unikernels, meet Docker!

分享文章:我們該如何定義Unikernel以及它的存在?
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/djceshs.html