最近听了一个关于容器的讲座,里面提到docker未来很可能向Unikernel发展,因此查资料学习了下。
定义
参考维基:unikernel由库操作系统组成,是一个特殊的、单地址空间的机器镜像。开发者从中选择模块化栈和最小库集合,组成应用需要的最小化系统架构来运行。这些库跟应用和配置代码一起编译,来构建封闭的、固定用途的镜像(unikernels),可以直接运行在hypervisor或硬件上,而不需要linux和windows这样的操作系统。
其中单地址空间是指,只有一个地址空间,即没有用户空间和内核空间的区分,因此没有用户态和内核态的切换,不需要用户空间和内核空间的数据拷贝。
简单来说,unikernel就是一个精简版的操作系统,去除了运行当前应用不需要的模块。如下图是传统操作系统和Mirage unikernel的对比。
相关概念-hypervisor
也称作VMM虚拟机监视器,是可以创建和运行虚拟机的软件、固件或硬件。在hypervisor上可以多个虚拟机,提供了虚拟机的隔离可运行不同的操作系统。
具体可参考:
特点
Unikernel主要目的是减小不必要的代码逻辑,让最简单的操作系统来运行应用。
比如运行web应用,可能只需要运行网络处理逻辑、磁盘处理逻辑、语言解释逻辑、cpu调度逻辑就可以了,其他的权限管理、进程切换、可视化、音视频播放等都可以删除掉。
优点
- 性能更优 不需要用户态和内核态拷贝
- 代码量更小,相比传统操作系统减小90%以上
- 安全,代码减小意味着漏洞更少
- 快速启动,可以在用户请求时才启动并进行处理
缺点
- 难调试和难扩展
- 如果硬件更换,硬件驱动可能需要更改,即unikernel需要更新