云计算再爆新热点,SnapStart解决Serverless冷启动问题
Amazon Lambda无服务器函数作为亚马逊云科技主推的云原生技术,是不折不扣的云原生第一梯队。Lambda无服务器函数自2014年由亚马逊云科技推出以来,被越来越多的云原生应用所使用,到目前为止已经累计关联了100余项创新云服务,同时为数百万级的用户提供服务,而每天的调用次数更是高达数百亿次。
为什么Lambda无服务器函数具有如此大的魅力呢?
从开发者的角度来说,Lambda无服务器函数充分利用了服务器虚拟化技术,将过去开发者需要关注的服务器配置、服务器管理等工作进行了充分的封装,让开发者可以从服务器管理的繁杂事务中脱离出来,将注意力集中到应用的开发工作中。
这种对于服务器资源的封装和抽象,毫无疑问地给开发者提供了极大的便利,让开发者可以更快地迭代开发周期,可以以更精细的粒度来管理应用内的一个一个逻辑。这样的便利对于提升开发者的生产效率十分有益。
从应用的运维角度而言,Lambda无服务器函数则提供了前所未有的低成本高效率的运行平台,各种自动化工具和自动化配置让应用的运维变得更加方便。这一切的收益,都来自亚马逊云科技在服务器虚拟化技术上的不断迭代和创新。
自从亚马逊云科技最初推出的Amazon EC2服务器以来,就打破了信息技术业内对于服务器的传统印象。科技公司从自建服务器机房,到租用虚拟服务器VPS,再到拥抱云计算平台EC2服务器,到如今可以直接使用“无服务器”的Lambda 函数,亚马逊云计算平台就在服务器的虚拟化和抽象化不断精进,让一个一个的服务器单元变得越来越小巧,也越来越高效,越来越易用。
这一切都是为着一个目的,就是让云计算真正成为一种公共事业,如同自来水、电网和互联网接入一般,可以高效率地服务更广泛的用户群体。
说了这么多Lambda无服务器函数的优点,但它也不是十全十美的。随着越来越多的应用开始采用 Lambda 函数,它的一些缺点也慢慢开始暴露出来。其中一个最为使用者所诟病的问题就是冷启动速度太慢的问题。
Lambda无服务器函数的本质,实际上是一个小型的虚拟服务器,或者称为虚拟机VM。这些虚拟机在Lambda 函数没有被调用的时候,会暂时处于休眠状态以节省运行的算力和成本。
而当 Lambda 函数被调用的时候,虚拟机则会经历一段启动、加载运行代码、初始化各种所需的资源这样一个初始化调用过程,这一过程被称为Lambda 函数的“冷启动”。我们以运行java代码的Lambda 函数为例,它的冷启动过程如下:
- Lambda函数提取部署代码包并将其内容复制到函数执行环境的新目录中;
- Lambda函数确定代码的入口点;
- Lambda 函数将代码和依赖关系加载到内存中;
- Lambda 函数初始化任何所需的资源或服务;
- Lambda 函数设置任何必要的网络连接或安全策略;
- Lambda函数开始真正执行代码。
这个冷启动过程有时候会需要消耗数十毫秒到数秒的时间,这就会导致调用Lambda 函数的应用变得反应迟缓,因此Lambda函数冷启动的问题也成为了用户诟病最多的问题。
亚马逊云科技积极响应用户的需求,把降低冷启动延迟的问题提上工作议程,经过数年的研发,终于在2022亚马逊云科技 re:Invent全球大会上推出了Amazon Lambda SnapStart技术,将运行java代码的Lambda函数的冷启动时间降低了90%,而且也不需要用户支付额外的费用即可享用Lambda SnapStart带来的便捷。
下面的图中对比了使用SnapStart技术启动的过程和不使用SnapStart的启动过程。很容易看出,SnapStart简化了冷启动过程,从而使得冷启动的时间消耗大幅降低。
那么,这么一个犹如魔术般的 Lambda SnapStart 是如何做到将冷启动时间降低的呢?这一技术进步,依然是得益于亚马逊云科技在服务器虚拟化上的持续投入。
在re:Invent 2018上,亚马逊云科技推出了一个叫做Amazon Firecracker的高效虚拟机,采用最新的容器化技术,在服务器操作系统内核层面对服务器资源做出了更细颗粒度的抽象,提升了虚拟机的性能以及安全性。
而四年后的2022年,亚马逊云科技更是在Firecracker技术的基础上,采取对Firecracker底层微型虚拟机MicroVM加入快照功能,来实现微型虚拟机的快速启动。这一创新技术为我们带来的,就是Lambda函数将史无前例地可以将启动延迟压缩到亚秒级,在过去的基础上实现了数量级(10倍)上的提升。
目前Lambda SnapStart暂时仅支持运行Java 11代码的Lambda函数,但由于这项技术并不依赖于Java或者任何一门编程语言,未来亚马逊云科技也一定会将这项技术用于所有的Lambda无服务器函数。
所以说,这个Lambda SnapStart的神奇之处就在于在微型虚拟机上的快照功能。微型虚拟机所采用的容器技术在近五年里得到长足的发展,而容器作为服务器操作系统内核提供的资源隔离技术,让亚马逊云科技把云计算平台上的“最小计算单元”向下推进了一层,让微型虚拟机MicroVM以容器的方式被启动和管理。
并且,因为容器本身能够提供快照,将容器的状态定格记录下来,如此一来就能在下次启动微型虚拟机MicroVM的时候,直接载入容器快照,从而绕过繁琐的虚拟机启动和代码、依赖以及计算资源的加载过程。
不过,在工程领域永远都没有银弹。Lambda SnapStart技术虽然神奇,却也不是完美无缺的,它同样有着使用上的限制。亚马逊云科技给予了开发者一个使用Lambda SnapStart的指引,里面列举了三个SnapStart不适用的场景:
1、在Lambda函数里包含具备唯一性的信息,例如独一无二的ID数。当Lambda函数从快照中快速启动,其快照保存的之前的独一无二的ID数字就无法保证其唯一性。亚马逊云科技建议此类型的Lambda函数要在启动后验证该“独一无二”的ID数以确保后续的运行逻辑正确;
2、在Lambda函数中的网络连接。因为网络连接发生于Lambda函数启动以后,因此Lambda函数上一次快照中的网络状态,在从快照恢复后应该检查其网络连接状态;
3、在Lambda函数中存在临时数据。例如在Lambda函数中包含登录token,在从快照中恢复后,其临时的登录token可能已经失效,因此需要Lambda函数来重新建立所需的临时数据。
不难看出,因为Lambda SnapStart依赖于该微型虚拟机MicroVM过去的状态,凡是状态依赖于时间变化的Lambda函数,都需要在引入SnapStart后细致管理那些根据时间变化而变化的状态,而不能默认这些状态维持不变。
re:Invent 2022 全球大会上推出的Amazon Lambda SnapStart是本年度云计算领域的重磅科技进步,Lambda SnapStart进一步巩固了亚马逊云计算在无服务器计算领域的优势。这既是亚马逊云科技的研发实力的体现,也是亚马逊云科技以客户为本的理念的表现。
即刻点击https://www.awsevents.cn/reIn...,观看 INNOVATE 在线大会精彩回放!
SegmentFault_行业快讯
百度,关于技术理想与对未来的期待丨首届搜索技术创新挑战赛 x 冠军团队专访
思否编辑部赞 1阅读 8.9k
Light 技术公益创造营 评选规则
思否编辑部阅读 1.2k
中国开源云联盟 2022 年度评选名单公布!
思否编辑部阅读 1.1k
KubeSphere 开源社区 2022 年度回顾与致谢
KubeSphere阅读 741
从云计算到天空计算(一)
Datenlord阅读 735
Curve 分布式存储在 KubeSphere 中的实践
KubeSphere阅读 695
《Terraform 101 从入门到实践》 第二章 Providers插件管理
南瓜慢说赞 1阅读 300
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。