写点什么

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

发布了 1843 篇内容, 共 110.3 次阅读, 收获喜欢 77 次。

关注

评论

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

【七夕限定盲盒抽奖】一文带你搞懂盲盒抽奖的页面配置

hum建应用专家

阿里云 Serverless 函数计算

【云原生】Spring Cloud是什么?Spring Cloud版本介绍

java李杨勇

Java spring cloud stream 签约计划第三季

观测云入驻青云云市场,提升云上系统统一可观测能力

观测云

培训机构与自学的优缺点都有什么

小谷哥

做个男人,做个成熟的男人

源字节1号

深入Linux内核IO技术栈

C++后台开发

Linux内核 内核开发 驱动开发 嵌入式开发 内核操作系统

编译器工程师眼中的好代码:Loop Interchange

华为云开发者联盟

c c++ 开发 编译器

MySQL 概念

武师叔

8月月更

【计算讲谈社】第七讲|AI 的价值探索:如何拓展商业边界?

大咖说

人工智能 AI 商业边界

苦熬三个月整理的spring全家桶PDF版限时分享,整整400页

Java工程师

Java spring Spring全家桶

最具有中国特色的微服务组件!阿里新一代SpringCloud学习指南

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

Python图像处理丨如何调用OpenCV绘制直方图

华为云开发者联盟

Python 人工智能

MASA Stack 第三期社区例会

MASA技术团队

Framework blazor

编译器工程师眼中的好代码(1):Loop Interchange

openEuler

开源 编译器 openEuler

冲刺!这份超24W字的Java技术栈知识点集合将成为你的offer收割机

了不起的程序猿

Java 面试 java程序员 java; Java 开发 java 编程

优化客户服务的 7 个关键步骤

Geek_da0866

专访容智信息柴亚团:最低调的公司如何炼成最易用的RPA?

王吉伟频道

RPA 机器人流程自动化 0代码 容智信息 柴亚团

北京零基础前端软件培训

小谷哥

学习大数据开发技术后好找工作吗?

小谷哥

认识一下MRS里的“中间人”Alluxio

华为云开发者联盟

大数据 MRS

企业为什么要数字化转型?数字化转型成功的案例有哪些?

优秀

数字化转型

Github又火了!阿里重发系统设计核心原理全彩笔记,上线两天破百万阅读

Java工程师

Java 高并发

Centos系统安装MySQL数据库

杨杰灵

MySQL 数据库

语音聊天app开发——开发人员如何进行代码分析

开源直播系统源码

软件开发 直播源码 语音app开发

Eclipse Debug FFmpeg

贾献华

8月月更

Jmix - 业务系统高效开发的少代码平台

世开 Coding

Java spring 快速开发平台 Jmix 少代码

playwright录制脚本

和牛

测试 Python. 8月月更

AIRIOT答疑第7期|如何快速提升物联网项目交付速度?

AIRIOT

物联网

倪光南:openEuler已达国际同类社区水准

openEuler

开源 操作系统 openEuler

混合云存储点燃万亿自动驾驶市场,加速产品落地

焱融科技

自动驾驶 AI 分布式文件存储 全闪

在SaaS时代,帮助中心成为了许多企业的选择

Baklib

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