关于 Unikernel,你注意到或没注意到的一些东西

利益相关(强行植入广告):我们(Hyper)创业团队(也是开源项目)同样做了一种基于 Hypervisor 技术的容器解决方案,然而与 unikernel 不同的是,我们是面向通用的容器镜像的,可以直接运行已有镜像。在我看来,大部分人在热捧 unikernel 的时候,实际上他需要的是 Hyper 这样的技术。

免责声明:我所做的预测只对我自己负责,我们在用创造未来的方式来预测未来,并且有其他人与我们在一同来创造未来,我们坚信我们的预测是正确的。

如本文一样,用 unikernel 作为标题是个好选择

新闻背景

前两天,Docker 宣布收购了 Unikernel Systems,引起了朋友圈刷屏(比如这个这个)。不过 Twitter 上还是有一些批评声音的,而且 Joyent 的 Bryan Cantrill 大神亲自向信众解释了为啥 unikernel 不适合于生产系统,当然,在存在利益相关这方面,他和我是一样的。

在和一些技术圈的朋友讨论后,我发现有的朋友并不是很了解 unikernel 技术,只是听起来觉得很好。于是,昨天我在朋友圈里写了这么一段话

事实上,unikernel 和 docker image 都是对应用的一个静态封装,从很多种意义上说,unikernel 都是一个更精巧的封装,而 docker image 则是一种更简单、松散、或者说更通用的封装。对于每个人是不是有意义,这因人而异,历史上精巧专用的方案被简单而更具兼容性的方案打败的例子比比皆是。这里,很多人都忽视的一点就是,从 unikernel 的定义出发,就不存在一个 unikernel 可以适应多样的已有二进制程序。需要好好审视自己的应用场景,才知道这张旧船票能否登上你的客船

现在我在 Blog 里继续解释一下。

插一句题外话, unikernel 是一类技术,并不只有 Unikernel Systems 一家拥有,有兴趣的同学可以看看 OSV,这个团队来自 Red Hat,头领是 KVM 的作者 Avi,是一个非常优秀而有执行力的团队。

什么是 unikernel

根据 Wiki 定义,unikernel 是专用的、单一地址空间,将操作系统功能作为库调用的程序镜像。也就是说,做一个 unikernel 应用,可以不需要复杂、完整的操作系统,可以只包含需要的功能。想想这简直是小而美的微服务架构的终极追求。

Docker 镜像之所以为人们所称道的原因就在于它完整封装了应用环境,使得应用可以在不同的环境里无需修改直接运行,不用考虑 distro、依赖库之类的问题,而这里,unikernel 连 kernel 都一并打包了,只要放在 hypervisor 上即可运行,这种 portability 似乎是无与伦比的,另一方面,hypervisor 带来的隔离效果要比 linux container 更好,而且,去掉不必要功能后,unikernel 包含的可能含有漏洞的代码也会少,从安全的角度讲,你做得越少,你做错的也就越少,人们不禁赞叹,这真是终极的解决之道啊。

不过,等等,这里似乎有点问题啊。单一地址空间、操作系统作为库,这样的话和传统的程序有点不一样啊,程序不是跑在 Linux kernel 上了,那么多进程调度谁来做?已有的程序和库怎么用呢?是的,这就是我所说的不存在可以直接适配多样的已有二进制程序的 unikernel,你需要为每个程序一切从头做起,做自己的 unikernel app。换一个角度说,实际上 unikernel 不是让你把你的已有程序和它依赖的 kernel 功能打包,相反,是提供一套工具,帮你把你的程序嵌入到内核里去,得到一个你自己的专有的内核,这要从源码出发,甚至进行一定的移植工作。

所以,当我在看到这个新闻的时候,甚至在想,docker 这是要回到 PaaS 上去,放弃统一镜像,转而做源码级的服务么?

通用的 unikernel?

看到我前面的论述,有人会立刻说,把 init 程序,比如 systemd 甚至 Hyper 的 hyperstart 和 unikernel 打包,然后不就可以直接接入已有二进制程序直接,做成通用的 unikernel 了么?

可是,仔细看看啊各位,首先,从 API/ABI 的角度看,通用的 Unix 或者 Linux kernel 是建立在完整的系统调用集的基础上的,unikernel 通过将内核代码与 App 代码的耦合,放弃了对系统调用的提供。而一旦转而提供完整的 ABI 给应用,那么,和 Linux kernel 也就没有区别了。所以说,unikernel 在提供通用性和进行应用边界划分的时候,选择的不是一个更加普适的接口。或者说,当它转而通用地支持已有的二进制程序的时候,那么它重新变成 hyper 的解决方案,而不是 unikernel 了。

Unikernel 化一个应用,你面对的问题

除了丧失二进制级的应用通用性之外,Unikernel 其实还面临着很多其他的问题:

  • 首先,你需要移植程序,相当于支持一个新的平台。各种 unikernel 技术多少都提供了和 libc 或 java 平台或其他语言环境一致性非常高的开发环境,方便用户的移植,然而,移植工作多少还是需要的。
  • 其次,如果你的应用本身是多线程或多进程的,需要考虑单一地址空间的限制,这不仅是程序语言方面的限制,有的时候也是架构或语义层面的影响。
  • 最后,如 Bryan Cantrill 所说,unikernel 程序实际是完全内核态程序,而且只有单一地址空间,这根本没法 debug 嘛,传统或现代的通用程序调试设施基本上都无法使用,连进程的概念都没有,这对开发和调试带来了极大的难度,显然并不是所有的应用开发者都能驾驭这样的应用的。

Unikernel 适用的场景有哪些

那么,什么应用需要这个场景呢?我个人认为,只有极端追求性能和小体积的场所,可以不惜代价地去做这种 unikernel,就此,很多人都觉得 IoT (物联网)似乎是最佳应用场景之一。我只想问,我们早年间在 4KB ROM,128B RAM 的限制下写的 51 单片机程序在算不算 unikernel 程序?

你真的想要的是什么?

感谢各位看到这里,作为一篇到处植入广告的文章,能看到最后的都是真爱,所以,我就再插入一段广告吧。如果你的容器服务跑在可信任的环境里,性能是首要要求,那么基于 Linux Container 的 Docker 是你的首选;而如果要提供多租户的容器服务,或者容器里的应用不被完全信任(比如用于测试等用途),那么,基于 Hypervisor 的 Hyper 完全胜任这个环境。并且,两者使用完全相同的镜像,对大部分镜像来说(除了那些刻意放弃主机和容器之间隔离性的应用),Container 能跑的,Hypervisor 也同样能跑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,505评论 15 147
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,377评论 0 27
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 文/孙意阳 临潼,一座历史文化名城,现为西安市临潼区,是从周到汉唐以来的首都所在地。因此,这有烽火戏诸侯的骊山...
    蓉城文学阅读 290评论 1 1
  • 蓦然回首,恍如隔世,几年的时光,好像就那么不知所以的过去了,我想我始终不擅长去爱,也始终学不会伪装,所以有时候容易...
    漫漫长路我陪你阅读 367评论 0 2