AWS Lambda重大更新,跨越编程语言差异之门?

北京时间11月30日凌晨,在美国拉斯维加斯召开的AWS re: Invent 2018上,和往年一样,AWS CTO Werner·Vogels博士又发布了AWS多项重要的更新,包括数据库、编程工具、架构等多个方面,而在其中,有两项针对于AWS Lambda的更新引爆了现场众多开发者的欢呼,这就是Lambda Layers和Lambda Runtime API的发布。而在著名的Haker News网站,关于这个主题的评论已经超过了205条。那么,为什么这两项关于Lambda的更新,却吸引了那么多开发者的关注呢?想要搞清这个问题,那就要从Lambda本身开始讲起。

AWS Lambda是什么?

AWS Lambda重大更新,跨越编程语言差异之门?

AWS Lambda是AWS于2014年推出的一项计算服务,通过它,可以无需预配置或管理服务器即可运行代码。AWS Lambda只在需要时执行代码时会消耗相应资源,代码未运行时则不产生费用。借助AWS Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且无需执行任何管理。AWS Lambda是在可用性很高的计算基础设施上运行代码,执行计算资源的所有管理工作,包括服务器和操作系统维护、容量预置和自动扩展、代码监控和记录。只需要以 AWS Lambda支持的一种语言提供代码。 用户就可以使用AWS Lambda运行代码以响应事件,例如更改Amazon S3存储桶或Amazon DynamoDB表中的数据;以及使用Amazon API Gateway运行代码以响应HTTP请求;或者使用通过AWS SDK完成的API调用来调用代码。借助这些功能,可以使用Lambda轻松地为Amazon S3和Amazon DynamoDB等AWS服务构建数据处理触发程序;处理Kinesis中存储的流数据,或创建按AWS规模、性能和安全性运行的后端。

Lambda为什么这么火?

实际上,AWS Lambda是Serverless(无服务器计算)的典型代表,它与Microsoft Azure Functions和Google Cloud Functions等都可以被称为所谓的功能即服务(FaaS)技术。虽然还有其他无服务器技术(如无服务器数据存储和数据库),但这些功能计算服务通常就是我们所理解的“无服务器计算”。

无服务器计算对于开发人员最大的好处,简单来说,就是使得开发人员可以更多的关注与应用程序功能本身,而无需关心例如虚拟机调配这样的配置方面的工作。与容器相比,无服务器具有许多优点。与执行业务功能相比,它更多地用于可执行功能,并且可以根据需求的高峰自动扩展,并且具有精细的成本模型。此外,由于程序可以随时运行和终止,因此带来了操作简单性和成本节省。重要的是,它可以提高产品生命周期的效率并降低管理费用。它还为云更加实用铺平了道路,因为它不需要任何虚拟机配置或预先承诺。企业只需要为他们使用的东西付费。

而这也是为什么以AWS Lambda为代表的无服务器计算技术为什么如此火热的原因。

这是什么样的两项更新?

30号AWS发布的两项更新是:

Lambda Layer,一种集中管理跨多个函数共享的代码和数据的方法。

Lambda Runtime API,一个使用任何编程语言的简单接口,或用于开发函数的特定语言版本。

这两个特性可以一起使用,运行时可以作为层来共享,以便开发人员可以在编写Lambda函数时选取并使用它们最喜欢的编程语言。

那么,这两项更新对开发人员为什么如此重要呢,下面,我们就来一一详细讲来。

Lambda Layers

AWS Lambda重大更新,跨越编程语言差异之门?

在构建无服务器应用程序时,在Lambda函数之间共享代码是很常见的,开发人员可以通过添加由多个函数或标准库使用的自定义代码,以简化业务逻辑的实现。但以前,必须打包和部署这个共享代码以及使用它的所有函数。而现在,开发人员只需将公共组件放入ZIP文件中,并作为Lambda Layer上传即可。函数代码不需要更改,并且可以像通常那样引用层中的库。同时,层可以被版本化来管理更新,每个版本都是不可变的。当一个版本被删除或者它的使用权限被撤销时,以前使用它的函数将继续工作。

在函数的配置中,最多可以引用五层,其中之一可以是运行时。当调用函数时,按照开发人员提供的顺序在/opt中安装层。顺序很重要,因为所有层都是在相同的路径下提取的,所以每个层都有可能覆盖前一层。这种方法可以用来定制环境。例如,第一层可以是运行时,第二层添加所需的库的特定版本。函数和层的总体未压缩大小受通常未压缩的部署包大小限制。层可以在AWS帐户中使用、在帐户之间共享或与广大开发人员社区公开共享。

使用层时有很多优点。例如,可以使用lambda层来:

在依赖项和自定义业务逻辑之间实现关注点的分离。

使函数代码更小巧,更专注于想要构建的东西。

加速部署,因为必须打包和上载的代码更少,并且可以重用依赖项。

AWS还透露,基于用户的反馈,并且为了提供一个如何使用Lambda层的示例,正在发布一个公共层,其中包括NumPy和SiciPy,两个流行的Python科学库。这个预先构建和优化的层将可以帮助开发人员快速地开始数据处理和机器学习应用程序。

除此之外,开发人员还可以从AWS合作伙伴(如Datadog、Epsa.、IO.、NodeSource、Thundra、Protego、PureSec、Twistlock、Serverless和Stackery)中找到用于应用程序监控、安全性和管理的层。

Lambda Runtime API

AWS Lambda重大更新,跨越编程语言差异之门?

通过Lambda Runtime API,现在,开发人员可以在创建或更新函数时选择自定义运行时,也就是说,开发人员可以使用任何编程语言并共享公共组件,这对开发者而言无疑是一个非常令人兴奋的功能。

要想使用此选择,函数必须(在其代码或层中)包含一个名为bootstrap的可执行文件,负责代码(可以使用任何编程语言)和Lambda环境之间的通信。运行时引导程序使用一个简单的基于HTTP的接口来获取新调用的事件有效负载,并从函数返回响应。关于接口端点和函数处理程序的信息作为环境变量共享。

对于代码的执行,可以使用在Lambda执行环境中运行的任何东西。例如,可以为任何编程语言带来解释器。如果想管理或发布自己的运行时,只需要知道运行时API是如何工作的即可。这使得开发人员可以快速使用共享的运行时作为层。

目前,以下这些开源运行时已经获得支持:

C++

Rust

此外,在合作伙伴的帮助下,还将提供对以下运行时的支持:

Erlang (Alert Logic)

Elixir (Alert Logic)

Cobol (Blu Age)

Node.js (NodeSource N|Solid)

PHP (Stackery)

Runtime API将是未来Lambda支持新语言的主要方式。例如,就是通过它,Lambda现在已经可以支持Ruby语言了。

AWS Lambda重大更新,跨越编程语言差异之门?

开发人员可以通过控制台或AWS命令行接口(CLI)在Lambda可用的所有区域中使用运行时和层,还可以使用AWS无服务器应用程序模型(SAM)和SAM CLI使用这些新特性测试、部署和管理无服务器应用程序。而且,使用运行时和层是不会产生任何额外的成本。

总结

AWS此次发布的Lambda Layers和Lambda Runtime API,使得开发人员可以使用自己喜欢的编程语言编写并共享公共组件,这对广大开发人员来说无疑是一件喜闻乐见的事情,而在此次大会上,AWS还公布了Lambda对譬如PyCharm、IntelliJ和Visual Studio等IDE的支持,这毫无疑问也是令广大开发者普大喜奔的消息。而这些看起来改动不大,但对开发者却极其贴心的功能则无一不体现了AWS用户为先的理念和思想。

AWS Lambda重大更新,跨越编程语言差异之门?

实际上,据Werner介绍,AWS 95%的新功能和新服务都是建立在直接用户的反馈之上,而像Lambda Layer、Lambda Runtime API,正是AWS真真切切站在开发者角度,认认真真分析开发者所遇到的困难和挑战而适时推出的新服务、新功能,就像AWS全球基础设施和客户支持副总裁Peter Desantis所说的那样,以客户为先的理念绝对是AWS快速发展的重要源泉。在这种理念长期引领下的AWS,能够每年都推出如此众多的新功能和新服务,并且常年稳坐云计算市场第一把交椅,也就不足为奇了!

而AWS为开发者不断提供的新功能和新服务,将为开发者提供构建更美好的未来新世界所需要的更简单,更高效、更强有力的工具!而对于开发者们而言,当今他们所担当的责任,用Werner在本次大会上的一句话总结,就是Let‘s Go Build!

AWS Lambda重大更新,跨越编程语言差异之门?

相关推荐