Unikernel初体验

引言:

2016年1月21日,应用容器引擎 Docker 宣布收购了英国的 unikernel 实现初创企业 Unikernel System,但具体交易金额并未透露。那么unikernel到底是一种什么样的技术呢?它会对现有技术产生怎样的影响呢?

Unikernel是什么:

Unikernels are specialised, single address space machine images constructed by using library operating systems. A developer selects, from a modular stack, the minimal set of libraries which correspond to the OS constructs required for their application to run. These libraries are then compiled with the application and configuration code to build sealed, fixed-purpose images (unikernels) which run directly on a hypervisor or hardware without an intervening OS such as Linux or Windows[1].

上面的文字来自wikipedia,相信大家也能有个基本的认识。下面,我们将会把unikernel和操作系统,传统虚拟化(kvm)以及docker做个对比。

Unikernel与操作系统:

✔ Unikernel和操作系统都可以运行于“Bare Metal” Architecture

✔ Unikernel代码量和复杂度小于操作系统

✔ Unikernel可以便捷的锁核,特定cpu服务于特定应用,减少线程切换开销

✔ Unikernel可自定义模块,选择性抛弃应用不需要的内核模块,例如软驱,usb驱动等

✔ Unikernel一旦打包完成,内核模块的独立升级比较困难

无论是RedHat,SUSE还是ubuntu亦或是windows,他们的思路都是将操作系统做大做全,在启动时,就加载了尽可能全的库,然而在某些场景下可能根本不需要,比如:你需要搭建一个基于ext4文件系统和ipv4协议的Tomcat运行java web,那么操作系统的ipv6协议,xfs文件系统对该应用可能并没有意义,但是他们确占据了操作系统的内核。Unikernel就像一组积木,程序可以根据自己的需求来搭建自己的操作系统而无需选择所有组件。相信很多程序员都有整理依赖关系的经历,不管是系统之间的相互依赖,lib包的上下依赖等,但从应用出发,将应用系统以下,硬件以上的依赖整理清晰明了本身就是一项困难的工作。

Unikernel与kvm:

kvm是在原有硬件和操作系统的基础上虚拟出来完整的操作系统(包含Kernel,TCP/IP协议栈,文件系统等)。

✔ Unikernel可以运行于hypervisor或是“Bare Metal” Architecture,kvm 运行于Hosted Architecture

✔ Unikernel可以选择性的打包内核模块,kvm虚拟出完整的操作系统

✔ Unikernel可以在一台宿主机上运行上千个应用,而这是虚拟机所无法办到的

✔ Unikernel与kvm具有类似级别的计算隔离性

如果将Unikernel运行在hypervisor上,其相比于虚拟机具有更快的启动时间,更加轻量级的内核,更少的系统冗余,以及更高的系统利用率。

Unikernel和kvm 对比图

Unikernel与docker:

✔ 运行于Hosted Architecture,Unikernel相比于docker具有更好的隔离性,安全性

✔ 运行于“Bare Metal” Architecture,Unikernel相比于docker具有更快的启动时间,但目前缺少编排管理系统的支持

✔ Unikernel可满足定制化内核的需求

Unikernel包含了ClickOS,Clive,Drawbridge,HaLVM,IncludeOS,LING,MirageOS, Rumprun和runtime.js等Project。RumpKernels提供了免费、可重复使用、组件化、内核质量的驱动程序,比如文件系统、 POSIX系统调用、PCI设备驱动程序以及 TCP/IP和SCSI协议堆栈。Rumprun Unikernel只有几千行代码,外加Rump Kernel组件,支持POSIX化的软件直接在原始硬件和云虚拟机管理程序(比如KVM和Xen)上运行。

Rumprun demo[3]:

接下来我们通过一个简单的例子来感受下unikernel的nginx服务。

操作系统: Ubuntu-14.04.1 Linux version 3.16.0-30

1.下载编译Rumprun

从github上将rumpkernel的源码下载编译,并把路径加入到用户路径中

git clone
cd rumprun
git submodule update –init
./build-rr.sh hw
export PATH=${PATH}:$(pwd)/rumprun/bin

编译需要几分钟时间,编译编译完成后:

2.下载rumprun-packages,其中包含了haproxy,mysql,nginx和memcached等多个项目

git clone https://github.com/rumpkernel/rumprun-packages.git

修改config.mk 配置文件

cp config.mk.dist config.mk
vim config.mk

将 RUMPRUN_TOOLCHAIN_TUPLE= 修改为 RUMPRUN_TOOL

CHAIN_TUPLE=x86_64-rumprun-netbsd
cd nginx

进入nginx目录开始编译代码,编译过程一般都不是一帆风顺的,少什么包就装什么包,编译完成后,在images目录会生成data.iso。

我们编译好了unikernel,想要通过网络访问unikernel中的服务,需要打通unikernel和宿主机之间的网络。

ip tuntap add tap0 mode tap
ip addr add 10.0.120.100/24 dev tap0
ip link set dev tap0 up

最后在10.0.120.0这个网段内启动nginx服务,就可以享受到运行在unikernel中的nginx了。

rumprun qemu -i -M 128 \
        -I if,vioif,'-net tap,script=no,ifname=tap0'\
        -W if,inet,static,10.0.120.101/24 \
        -b images/data.iso,/data \
        -- bin/nginx -c /data/conf/nginx.conf

金融行业对于Unikernel的态度:

随着技术的发展以及国家自主可控的政策,金融行业对于技术本身的关注度也越来越高,从oracle到mysql,从小型机到x86服务器,从vmware到openstack,这些技术路线都意味着金融行业的IT技术能力的强化和完善,掌握开源技术,自定义软件也成为了金融IT界的常态。根据GitStats的统计,在linux kernel 4.1版本发布[2]时,linux项目目前已经有了19509218行代码,这样的代码量和操作系统本身的难度对于金融IT提出了挑战。Unikernel技术对于内核的精简以及模块的提取为金融IT创造了良好的摆脱操作系统厂商绑定,完成技术转型,实现操作系统级别优化和深入的机会,我们对其保持持续关注和继续跟进研究状态。

Unikernel 相比于虚拟机有着更小的启动内核,更快的启动速度,相比于Docker,有着更好的隔离性,更小的内核态库。其网络通过tap设备连接到宿主机,可以对接现在各种SDN方案,其存储方案还需要更深入的研究。

后续将继续分享深入的内容,敬请期待!

[1]Wikipedia unikernel: https://en.wikipedia.org/wiki/Unikernel

[2]GitStats linux: http://www.phoronix.com/misc/linuxstat-june-2015/

[3]Unikernel Github: https://github.com/rumpkernel

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2016-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏代码世界

操作系统背景知识

 操作系统发展过程 1、手工操作方式 ——穿孔卡片(串行)   两个特点:   (1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低...

2899
来自专栏美团技术团队

互联网企业安全之端口监控

背景 外网端口监控系统是整个安全体系中非常重要的一环,它就像眼睛一样,时刻监控外网端口开放情况,并且在发现高危端口时能够及时提醒安全、运维人员做出相应处理。 对...

52815
来自专栏Java架构师学习

多研究些架构,少谈些框架——一名阿里架构师的笔记

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为...

3748
来自专栏云计算与大数据

Envoy——Service Mesh体系中的私人订制,把你安排得明明白白!

最近因工作原因开始了解Service Mesh与Envoy,为系统性梳理所学内容,因此沉淀了此文档,但由于所知有限,如文档中有描述不当之处,希望不吝赐教。

2392
来自专栏云计算教程系列

什么是不可变的基础设施?

在传统的可变服务器基础架构中,服务器会不断更新和修改。使用此类基础架构的工程师和管理员可以通过SSH连接到他们的服务器,手动升级或降级软件包,逐个服务器地调整配...

1140
来自专栏程序人生

从开发者的角度看:打包和部署

如今的互联网软件越来越碎片化(micro services),Queue无处不在,服务依赖越来越多,使得软件功能的开发,到软件功能的部署,中间有很长的一段路。这...

3579
来自专栏IT笔记

SpringBoot开发案例从0到1构建分布式秒杀系统

2456
来自专栏林喜东的专栏

你的账号安全吗?

账号安全无小事,近些年持续不断爆出的安全事件,有很多低级错误其实都是拥有一个健壮的账号体系可以避免的;多次听闻后曾写一写账号安全相关的东西,但直...

2354
来自专栏程序员互动联盟

我在苹果公司学到的编程技巧

当我还在苹果在线商店工作的时候,我们从来没有对在线网站做过负载测试。我们也不觉得需要这么做。然而,当每次史蒂夫·乔布斯在演示某个幻灯片过程中切换到在线商店时,会...

33612
来自专栏大数据文摘

涨姿势 | 如何修复硬盘,以及如何避免硬盘损坏

2254

扫码关注云+社区

领取腾讯云代金券