什么是AWS Lambda?——事件驱动的函数执行环境

AWS CTO Werner Vogels在AWS re:Invent 2014大会的第二场主题演讲上公布了两个新服务和一系列新的实例,两个新服务都相当令人瞩目:第一个宣布的新服务是Amazon EC2 Container Service,跟Docker紧密联合的管理服务,令人兴奋,不过不是本篇报道的重点。

本篇报道主要想向大家介绍一下今天宣布的第二个服务:AWS Lambda

什么是AWS Lambda?

根据Jeff Barr在博客上的描述,Lambda是一个“可简单创建Lambda函数、无需管理的计算平台”。不过我们也可以这么理解:Lambda是一个针对AWS计算资源的IFTTT脚本创建器和管理器。

举个例子:你有一个照片类应用。照片上传到S3之后,需要在DynamoDB上记录新照片的元数据。Lambda的作用就是可以有一个地方放一个触发脚本来执行这个任务,而不用关心这个脚本运行在什么机器或者虚拟机上。

Vogels在专访中表示,也可以将Lambda理解为将functions(函数)从计算资源层抽象出来的服务。

Lambda的设计理念

Werner Vogels在主题演讲上简要叙述了Lambda设计思路的由来。

Vogels首先抛出一个问题:什么是云计算的根本(primitives)?

答案:云计算是一个执行环境。

Vogels再抛出第二个问题:什么是应用的根本?

答案:函数(functions,即业务逻辑的载体)+数据(data,即跟业务相关的输入与输出),以及这两者之间的交互——即事件(events。常见的事件如增加、变更、删除等)。

换言之,对于一个应用来说,除了functions、data、events这三个东西是根本之外,其他无论什么代码和框架,无非都是胶水或者UI罢了。

既然如此,理想的情况是用最少的时间写胶水,将做多的时间投入到应用的核心当中。

而最常见的胶水代码,就是触发器(trigger):当发生一个事件(event)时,执行某个函数(function),输出新的数据 (data)。Vogels以Excel表单为例:在一个表单当中,一个单元格数值的变更,触发总和列对应单元格数值的变更,就是一个事件触发函数将新的 变量纳入计算得出新的数值的过程。这个过程是自动的,还可以是并发的,即一处变更同时触发多个函数。

基于这个思路,AWS做了Lambda服务。

Lambda的用法

以下内容来自于Jeff Barr的博文

Lambda服务的核心概念是Lambda function(简称function,函数),目前仅支持Node.js。围绕function可以定义情景,包括执行环境(语言、内存、超时、 IAM角色)以及这个function要触发的另一个function。function的代码和有关情景的元数据均存储在AWS中,以ARN(Amazon Resource Name)的方式被外部识别。如需包含第三方库,可以放在ZIP文件中上传。

function上传之后,开发者可以将其指定到指定的AWS资源(如某个S3 bucket,某个DynamoDB表,某个Kinesis流),然后Lambda就会建立该资源跟你的function之间的关联。当资源方面发生变 动,Lambda就会去自动张罗资源去执行你的function。用于运行function的资源的创建分配和释放都有Lambda自动来做,开发者完全 不需要去干预。

每一个function默认会指定一个比较短的执行时间上限,不过这个上限最高可以调整到60秒。

每一个function具有双重的IAM角色:一个是触发角色(invocation role),决定Lambda执行某个function的权限;另一个是执行角色(execution role),决定该function操作AWS资源的权限。

Lambda会监控每个function的执行情况,并将请求数、延时、可用性、错误率等指标记录在CloudWatch里。控制台里可以看到过去30日的指标。

使用Lambda的两点须知:

  • 情景信息设置了该function的可用内存,可设置到128MB到1GB之间的任何数值。Lambda会这个数值选择相应的CPU能力、网络带宽和IO带宽。
  • 每个function的触发可以使用最多256个进程或线程,占用本地512MB存储空间,1024个文件描述符,以及10个出口网络连接。
  • Lambda对每个AWS账户设置了一系列管理限制。预览版期间,每个function最多可同时触发另外25个function。

Lambda服务的定价见官网,由请求数、function运行期间使用的存储、运行期间使用的内存三部分组成。预览版期间有一部分免费的用量。

总结

Lambda是让开发者们兴奋的服务,在Twitter上激起了大量讨论。Jeff Barr表示Lambda后续还会有很多更新,比如对更多AWS资源的支持和对更多语言的支持。

除了Amazon EC2 Container Service和AWS Lambda之外,本次主题演讲还宣布了高性能EC2实例C4,可挂载的EBS卷(SSD)可支持到16TB的尺寸。

转自:http://www.infoq.com/cn/news/2014/11/aws-lambda-summary

时间: 2024-10-13 17:13:27

什么是AWS Lambda?——事件驱动的函数执行环境的相关文章

AWS Lambda&Fargate 无服务底层技术是如何实现的

一.AWS Serverless 服务 近些年 AWS 非常推崇无服务器模式,自从2014年 Lambda 发布之后,无服务器大受欢迎,随之 2017 年推出 AWS Fargate 服务,应用于自家的容器服务平台 ECS.在 2019 年,EKS 也相继支持 AWS Fargate. 现在,更多的用户使用无服务器计算来构建应用程序,AWS 旨在打造让用户无需担心基础设施的预置或管理问题.开发人员可以使用 AWS Fargate 将其代码封装为无服务器容器,或使用 AWS Lambda 封装为无

javascrip高级程序设计的学习笔记【作用域和执行环境】

javascript变量可以用来保存两种类型的值:基本类型和引用类型.基本类型包括以下5种:undefined.Null.string.Boolean.Number等, 引用类型是object:基本类型和引用类型都具有几下特点: 1.基本类型值在内存中占据固定大小的空间,因此基本类型的值被保存在栈内存中: 2.从一个变量向另一个变量复制基本类型的值,会创建这个值的副本. 3.引用类型的值是对象,保存在堆中: 4.包含引用类型值的变量实际并不是包含对象本身,而是一个指向该对象的指针: 5.从一个变

深入理解javascript中执行环境(作用域)与作用域链

相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行环境分为全局执行环境和局部执行环境,其中局部执行环境我们又可以称之为函数执行环境.那么究竟什么使执行环境呢?通俗的说,执行环境即为代码执行时所处的环境.我们下来看一看如下代码,再进一步分析之. 1 2 3 4 5 6 7 8 9 10 11 <script><br>var name="zhuzhenwei"; functio

Javascript中的执行环境及作用域

执行环境(exectution context)定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它. 全局执行环境是最外围的一个执行环境.在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的.某个执行环境中的所有代码执行完毕后,该环境

深入理解闭包系列第二篇——从执行环境角度看闭包

× 目录 [1]图示 [2]说明 [3]总结 前面的话 本文从执行环境的角度来分析闭包,先用一张图开宗明义,然后根据图示内容对代码进行逐行说明,试图对闭包进行更直观的解释 图示 说明 下面按照代码执行流的顺序对该图示进行详细说明 function foo(){ var a = 2; function bar(){ console.log(a); } return bar; } var baz = foo(); baz(); [1]代码执行流进入全局执行环境,并对全局执行环境中的代码进入声明提升(

深入理解javascript作用域系列第五篇——一张图理解执行环境和作用域

× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已.但实际上,它们并不相同,却相互纠缠在一起.本文先用一张图开宗明义,然后进行术语的简单解释,最后根据图示内容进行详细说明 图示 查看大图 概念 [作用域] 作用域是一套规则,用于确定在何处以及如何查找标识符.关于LHS查询和RHS查询详见作用域系列第一篇内部原理. 作用域分

JavaScript执行环境

执行环境(Execution Context,也称为"执行上下文")是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其它数据,决定了各自的行为.当JavaScript代码执行的时候,会进入不同的执行环境,这些不同的执行环境就构成了执行环境栈. JavaScript中主要存在三种执行环境: 全局执行环境 JavaScript代码执行的默认环境.通常被默认为window对象,所有的全局变量和函数都作为window对象的属性和方法存在.当执行环境中的代码执行完毕

Javascript高级程序设计——执行环境与作用域

Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中. 全局执行环境是最外围的一个执行环境.全局执行环境被认为是window对象,所有全局变量和函数都作为window对象的属性和方法创建的.某个执行环境中的所有代码执行完后,该环境被销毁,保存在其中的所有变量和函数定义也随之销. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,而在函数执行完

浅谈JS执行环境及作用域

 今天刚刚开通博客,也是第一次写博文,略感紧张.作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习对语言的组织能力并记录学习笔记与大家一起交流. 进入正题>> 首先,相关的概念定义如下: 1. 执行环境: 所有 JavaScript 代码都是在一个执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生存期等方面的处理,它定义了变量或函数有权访问的其他数