QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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:09883
用户头像

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

关注

评论

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

开源认证和访问控制的利器keycloak使用简介

程序那些事

开源 程序那些事 授权框架 keycloak 认证授权

肝了一周的 UDP 基础知识终于出来了。

苹果看辽宁体育

计算机网络 计算机基础

表格控件Spread.NET V14.0 发布:支持 .NET 5 和 .NET Core 3.1

葡萄城技术团队

面试者必看:Java8中的默认方法

Silently9527

java8 默认方法

架构师训练营 - 第五周课后练习

joshuamai

架构师训练营 - 第五周学习总结

joshuamai

mongodb 源码实现系列 - command命令处理模块源码实现一

杨亚洲(专注MongoDB及高性能中间件)

MySQL mongodb 高性能 源码剖析 分布式数据库mongodb

Thread.start() ,它是怎么让线程启动的呢?

小傅哥

Java 线程 JVM 小傅哥 Thread

java: Compilation failed: internal java compiler error解决办法

LSJ

IDEA

成德眉资现代农业园区大联动促发展,“1链3e”引领四市农业产业数字化建设

CNG农业公链

IPFS四币连发系统开发技术(四币循环模式)

薇電13242772558

区块链 数字货币

「干货总结」程序员必知必会的十大排序算法

bigsai

排序 排序算法 快速排序

《华为数据之道》读书笔记:第 4 章 面向“业务交易”的信息架构建设

方志

数据中台 数字化转型 数据治理

熬夜不睡觉整理ELK技术文档,从此摆脱靠百度的工作(附源码)

996小迁

Java 编程 架构 面试 ELK

架构师训练营 W06 作业

Geek_f06ede

甲方日常 57

句子

工作 随笔杂谈 日常

讯飞推出充电宝式便携拾音器,重新定义传统拾音

Talk A.I.

JVM-技术专题-垃圾回收策略

码界西柚

“奋斗者”号下潜10909米:我们为什么要做深海探索?

脑极体

Architecture Phase1 Week10:Summarize

phylony-lu

极客大学架构师训练营

为什么说应用架构需要分类思维?

Java架构师迁哥

一期二班-吴水金-第六课作业

吴水金

计算机核心课程必读书目——《高级数据结构:理论与应用》

计算机与AI

数据结构 算法

Alibaba官方发文:阿里技术人的成长路径与方法论

Java架构师迁哥

Java踩坑记系列之Arrays.AsList

Java老k

Java

关于 AWS Lambda 中的冷启动,你想了解的信息都在这!

donghui

Serverless Faas 函数计算

推荐几款MySQL相关工具

Simon

MySQL 工具 percona server

家庭留白、中屏崛起与硬件棋局

脑极体

Java踩坑记系列之BigDecimal

Java老k

BigDecimal

802.11抓包软件对比之Microsoft Network Monitor

IoT云工坊

wifi 嵌入式 抓包

论“万剑归宗”思想对开发设计的一点“肤浅”作用

八苦-瞿昙

随笔杂谈 设计实践

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