写点什么

Firecracker,无服务器计算的轻量级虚拟化

  • 2019-10-15
  • 本文字数:2255 字

    阅读完需:约 7 分钟

Firecracker,无服务器计算的轻量级虚拟化

我最喜欢的一条 Amazon 领导力原则就是以客户为中心。在我们推出 AWS Lambda 之时,我们专注于为开发者提供安全的无服务器体验,让他们可以不必管理基础设施。为了达到理想的隔离状况,我们为每位客户使用了专用的 EC2 实例。这种方法使我们能够实现安全目标,但也迫使我们在后台管理 Lambda 时做出一些取舍。此外,与任何新的 AWS 服务一样,我们不知道客户会如何使用 Lambda,甚至不知道他们对整个无服务器模型的看法。我们的计划是专注于提供卓越的客户体验,同时使后端随着时间的推移变得更加高效。


仅仅四年之后(Lambda 最初发布于 2014 年的 re:Invent 大会),我们就可以明确无服务器模型的市场价值了。如今,Lambda 每月为数十万活跃客户处理数万亿次执行。去年,我们将无服务器技术的优势延伸到了容器,推出了 AWS Fargate,它如今每周为客户运行数千万个容器。


随着我们的客户越来越多地采用无服务器,是时候重新考虑效率问题了。我们秉承“发明”和“简化”的原则扪心自问:为当今的容器和函数世界设计的虚拟机究竟该是什么样子?


Firecracker 简介


今天,我要为大家隆重介绍 Firecracker,这是一种使用 KVM 的新型虚拟化技术。您可以在不到一秒的时间内在非虚拟化环境中启动轻量级微型虚拟机 (MicroVM),充分利用传统虚拟机提供的安全性和工作负载隔离,以及容器带来的资源效率。


以下是有关 Firecracker 的一些需知信息:


安全 – 这始终是我们的头等要务! Firecracker 利用多层隔离和保护,暴露的攻击面极小。


高性能 – 您现在可以在短至 125 毫秒的时间内启动 microVM(2019 年这个速度还会进一步加快),这使其成为多种工作负载的理想选择,包括瞬态或短期工作负载。


经过广泛测试 – Firecracker 经过广泛测试,已经在为多种高容量 AWS 服务提供支持,包括 AWS Lambda 和 AWS Fargate。


低开销 – 使用 Firecracker,每个 microVM 仅占用大约 5MiB 内存。您可以在同一实例上运行数千个采用截然不同的 vCPU 和内存配置的安全 VM。


开源 – Firecracker 是一项活跃的开源项目。我们已经准备好审核并接受拉取请求,并期待与来自世界各地的贡献者合作。


Firecracker 采用极简构建风格。我们从 crosvm 入手,设置了一种极简化的设备模型,以降低开销,实现安全多租户。Firecracker 采用 Rust 编写,这种现代编程语言可以确保线程安全性,并防范可能导致安全漏洞的多种类型的缓冲区溢出错误。


Firecracker 安全性


正如我先前提到的,Firecracker 融合了大量安全功能! 下面列出了其中一部分:


简单访客模型 – Firecracker 访客将获得非常简单的虚拟化设备模型,以最大限度地缩减攻击面:网络设备、块 I/O 设备、可编程的间隔定时器、KVM 时钟、串行控制台和部分键盘(刚好足以允许 VM 重置)。


进程监禁 – Firecracker 进程使用 cgroups 和 seccomp BPF 进行监禁,而且可以访问一小部分受到严密控制的系统调用。


静态链接 – Firecracker 进程以静态形式链接,可以通过 jailer 启动,以尽可能确保托管环境安全干净。


Firecracker 实际操作


为了体验 Firecracker,我启动了一个 i3.metal 实例,下载了三个文件(firecracker 二进制文件、根文件系统映像和 Linux 内核):



我需要设置适当的权限以便访问 /dev/kvm:


$  sudo setfacl -m u:${USER}:rw /dev/kvm
复制代码


我在一个 PuTTY 会话中启动了 firecracker,随后在另一个会话中发出了命令(进程侦听 Unix 域套接字,并实施 REST API)。第一条命令设置我的第一台访客机器的配置:


$ curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/machine-config" \    -H "accept: application/json" \    -H "Content-Type: application/json" \    -d "{        \"vcpu_count\": 1,        \"mem_size_mib\": 512    }"
复制代码


第二条命令设置访客内核:


$ curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/boot-source" \    -H "accept: application/json" \    -H "Content-Type: application/json" \    -d "{        \"kernel_image_path\": \"./hello-vmlinux.bin\",        \"boot_args\": \"console=ttyS0 reboot=k panic=1 pci=off\"    }"
复制代码


第三条命令设置根文件系统:


$ curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/drives/rootfs" \    -H "accept: application/json" \    -H "Content-Type: application/json" \    -d "{        \"drive_id\": \"rootfs\",        \"path_on_host\": \"./hello-rootfs.ext4\",        \"is_root_device\": true,        \"is_read_only\": false    }"
复制代码


一切准备就绪后,我就可以启动访客机器了:


# curl --unix-socket /tmp/firecracker.sock -i \    -X PUT "http://localhost/actions" \    -H  "accept: application/json" \    -H  "Content-Type: application/json" \    -d "{        \"action_type\": \"InstanceStart\"     }"
复制代码


这样我的第一个虚拟机就开始运行了:



在现实世界中,我可以使用 Firecracker 编写所有交互的脚本和程序,这样可以用更多时间设置网络和其他 I/O。但我还要参加 re:Invent 大会,我还有许多工作要去做,所以我把这部分作为练习留给各位读者。


与我们协作


您可以看到,这是一次重大飞跃,但也仅仅是我们迈出的第一步。敬请关注更多信息,并期待与您携手前行,共谋未来。收藏代码库、加入社区,与大家分享您的代码!


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/firecracker-lightweight-virtualization-for-serverless-computing/


2019-10-15 11:09891
用户头像

发布了 1870 篇内容, 共 134.0 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

数字新金融到底是什么样的金融

CECBC

🏆「推荐收藏」【Spring源码专题】彻底让你明白【IOC容器初始化】运行原理和源码流程

码界西柚

spring 容器 源码分析 7月日更

为技术系统打“疫苗”,爱奇艺攻防演练平台的探索实践

爱奇艺技术产品团队

架构 安全攻防 开发 混沌工程

Vitalik Buterin眼中的区块链信任模型

CECBC

货运飞船 3D 可视化监管,相隔万里都能得心应手?

一只数据鲸鱼

数据可视化 3D可视化 数字孪生 智慧航天 飞船

药以安为先,如何用技术升级助力药品质量升级?

BeeWorks

想要做音乐玩音乐,有这一个软件就够了!

懒得勤快

智慧平安社区建设解决方案,昆明智能安防小区搭建

不愧是阿里内部“SpringCloudAlibaba学习笔记”上线7天就获22w 浏览量!

Java 程序员 架构 面试 微服务

苹果公司在WWDC会议前意外泄露了新的移动平台

BeeWorks

在企业软件中负责任地使用开放源代码

BeeWorks

2种方法将YouTube视频转MP3音频

资源君

分享 教程 经验 youtube转mp3 格式转换

IPFS挖矿靠谱吗?IPFS挖矿合法吗?

区块链 IPFS

强!上线3天获10w浏览量,京东T8纯手码Redis缓存手册,我粉了

Java 数据库 redis 架构 面试

容器化 | 基于 Kubernetes 的新一代 MySQL 高可用架构实现方案

RadonDB

MySQL Kubernetes 容器 RadonDB KubeSphere

WICC 2021 召开在即 服务开发者生态是大会主要亮点

融云 RongCloud

详解智能优化算法:遗传算法和蚁群算法

华为云开发者联盟

算法 遗传算法 智能优化算法 蚁群算法

美国高通公司发布Snapdragon 700移动平台,为中高端终端提供优质功能

BeeWorks

真的香!Github一夜爆火被各大厂要求直接下架的面试题库也太全了

Java 程序员 面试 java编程

中国的区块链技术,究竟发展到哪里了?

CECBC

字节跳动实习生删库高操作

学神来啦

Linux 程序员 职场搞笑 linux运维

技术干货 | 录屏采集实现教程——iOS端

ZEGO即构

大前端 音视频 RTC iOS端屏幕录制

MNC小黄人系统开发|MNC小黄人软件APP开发

规则引擎-ice接入

waitmoon

规则引擎

什么?你们项目没用过主从复制和读写分离?

Cisco VPC peer-gateway 对直连BFD邻居建立的影响

Qunar技术沙龙

后端 Cisco BFD

Flink+ 数据湖 Iceberg 的体验

Qunar技术沙龙

架构 运维 flink 消费 kafka 后端 flink sql 执行过程

SSC公链系统软件开发内容

影响视界系统开发|影响视界软件APP开发

【LeetCode每日一题 Day 3】3. 无重复字符的最长子串

编程熊

程序员 面试 算法 LeetCode 笔试

免费分享入门学习Java的优秀图书

Java入门到架构

Java 书籍 Java入门

Firecracker,无服务器计算的轻量级虚拟化_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章