2024精选推文|十年,Amazon Lambda对开发者最长情的告白

459d731dac7b4ab1e7d19e6636d97c0d.gif

ea17944ff06856c966379e41b2eebfe3.png

在亚马逊云科技工作的一大优势在于,在将基础模块交到客户手中的同时,我们可以长期关注他们的使用方式,然后就经常会看到很多出其不意的操作。有时客户是为了行业创新,有时则是为了突破现有的桎梏——这时就意味着我们又要提供新的工具了,以化繁为简。Amazon Lambda就是这样诞生的。

我们发现有的客户的整个Amazon EC2集群处于相对闲置的状态,只是用来等待写入数据库或等待处理文件。这太浪费了!因此我们下定决心,要构建一项服务,让客户专注于他们的业务程序,而非服务器配置、自动扩展、打补丁和日志记录等简单重复的工作。于是,我们就写了一份Doc(文档)。

只要是亚马逊云科技的员工,无论职位与职级,想法都要诉诸纸面——1页纸、2页纸,最多6页纸,用清晰、简洁、具体的文字回答问题。最为外界所熟知的当属“公关新闻稿与常见问题文档”(PR/FAQ),它要求逻辑清晰且完整、观点立场鲜明、有数据支撑,目的是确保我们可以明确地定义要交付的服务。这非常难!还从未见过谁能一稿过,而是需要不断收集反馈并一次又一次的修改。但事实证明,一个清晰的文档加上一个好想法,就是能创造卓越的产品——从“一键购买”到Amazon Prime,再到Kindle,皆如此。

当然,启动Amazon Lambda同样有一份PR/FAQ。2013年Jeff Barr与Tim Wagner会面时,Serverless一词还不存在,当时聊到很多种能让开发者专注于写代码而非基础设施的方法,特别是如果代码能够被云抓取、存储和运行,那就太棒了!经过多次会议探讨之后,Tim撰写了一份PR/FAQ,建议构建能实现这一想法的服务,Amazon Lambda便由此应运而生。

此逢Amazon Lambda十周年,我们首次公开这份启动Amazon Lambda的PR/FAQ。考虑到篇幅和可读性,我们做了修改,但仍然可以窥见我们在2010初期看到的问题,以及我们在Serverless领域的远见。

正如文章《Amazon Lambda十年变革,重塑代码运行方式》介绍,过去十年,Amazon Lambda不断迭代。在阅读本篇文档时,您会发现有些想法最终成为功能,有些变化已悄然发生,比如以1毫秒为单位计费,以及支持10GB内存函数。这篇文章是用于提醒我们自己,铭记我们所追求的是什么:我们要极尽可能的力争完美,但我们也要承认,我们从来都不是无所不能的;写Doc的目的不是为了“写得”完美,而是将尽可能“接近完美”的产品交到客户手中,要长期关注他们的使用方式,并与之一起持续创新。

正如马克布鲁克(Marc Brooker)在一集Amazon Developer Podcast阐述的那样:亚马逊云科技的客户总能出其不意地创造出我们在PR/FAQ 中意想不到的使用场景,比如Amazon Lambda。作为工程师,我们太爱看到这种挑战了。它会激励我们有更远大的想法,打开更广阔的思路。这些出其不意驱动了一系列创新,比如Amazon SnapStart、FireCracker和用于Amazon Lambda函数容器——才使得所有使用亚马逊云科技产品的人更易于构建。

谨以此文庆祝Amazon Lambda的十周岁!也同样祝福所有曾用它解决复杂问题,突破Serverless边界的客户!

亚马逊云科技推出Amazon Lambda

可扩展、安全可靠的云服务

轻松运行任何代码

(西雅图时间2014年11月)今天,亚马逊云科技宣布推出Amazon Lambda——云代码运行的最简单方式。以前在云上运行代码意味着,创建云服务来托管应用,然后再运行该服务,这就要求开发者成为各个方面的专家:从自动故障切换到安全、可靠性等等。Amazon Lambda可在数秒内将任何代码转化为安全、可靠、高可用的云服务,并提供可访问的网络端,降低运维成本。Amazon Lambda能确保服务瞬时扩展,且性能或行为不变,开发者能够专注于应用本身。Amazon Lambda几乎没有学习成本,它支持Java、Node.js、Python和Ruby等语言,并支持每种语言的标准库和三方库。Amazon Lambda每个请求XX美元,执行时间每250毫秒XX美元,因此在任何使用量下都具有成本优势。要开始使用,请复制链接访问aws.amazon.com/lambda。

如今,已有超150万的Amazon Lambda用户每月调用十万亿次函数:应用Amazon Lambda进行文件处理、流处理(与Amazon Kinesis和Amazon MSK结合)、Web应用程序、物联网后端、移动后端(与Amazon API Gateway和Amazon Amplify结合)等等场景。

用户规模增长的背后,是客户快速体验到了Amazon Lambda能将创意想法转变为商业成果的价值:比以前更快地将想法转化为行动,并将行动转化为业务价值,还能以可扩展的模块化的方式构建系统。

Werner批注:Serverless引入了客户只需为其用量付费的理念。我们的目标是按250ms的执行时间收费,而在发布时,我们已降至100ms!

Amazon Lambda的使用方式非常简单。开发者可自己选择应用程序的逻辑。准备就绪后,将代码以ZIP文件的形式上传。Amazon Lambda可在数秒内将上传或编写的代码转化为安全、高可用的服务,可以从任何设备或应用程序中调用,无需更改代码或配置,使用Amazon Lambda控制台及Amazon CloudWatch Logging。

Werner批注:对ZIP文件的支持也是2014年的一件大事!如果没有ZIP,构建者将不得不单独添加文件。

外部常见问题

一般问题

1.什么是Amazon Lambda?

Amazon Lambda是一种安全、可靠和可扩展的Serverless服务,允许开发者运行代码而无需管理服务器,适合专注于代码而非云运维的专业人员。自2014年推出以来,Amazon Lambda在十年间不断演进迭代,以持续为客户提供前沿服务。您可点击阅读《Amazon Lambda十年变革,重塑代码运行方式》,了解Amazon Lambda的十年演进变革。

Werner批注:安全性是不容讨价还价的。在Firecracker发布之前,我们一直使用单租户Amazon EC2实例——没有两个客户共享一个实例。这样做成本非常高,但不得不这么做,因为我们知道创新迟早会发生,会有更好的解决办法。如今,我们可以将数千个虚拟机安全地打包到一个裸机上。创新从来不是一蹴而就的,有意义的变革往往是循序渐进的。正如杰夫·贝索斯所说:“如果要做任何创新的事情,那您必须承受被误解。如果您不愿意被误解,那就不要做任何创新的事。”

2.谁应该使用Amazon Lambda?

Amazon Lambda适合不具备架构知识的开发者,Amazon Lambda直接将云上运行代码给抽离出来,开发者不需要再考虑选什么样的实例类型、跨可用区切换、runtime、库、给操作系统打补丁等等……对于需要更多控制权和自定义环境的开发者,用Amazon Elastic Beanstalk部署管理应用程序,还是可以保留对云资源的绝对掌控。

3.Amazon Lambda可托管哪些应用程序?

Amazon Lambda可用于托管无需高度定制、长期状态或持久数据库连接的应用程序,无论其流量、语言、大小。

开发和部署应用程序

4.如何创建和部署应用程序?

使用Amazon Lambda开发和部署应用程序非常简单:

  • 将应用程序代码和任何所需库,以ZIP文件的形式,存储在Amazon S3中。

  • 使用亚马逊云科技控制台、命令行或Amazon Lambda invoke API部署应用程序。

Werner批注:2020年,我们添加了函数容器支持。这简化了依赖关系,让开发者用熟悉的容器工具,甚至超越250MB函数限制,部署10GB的容器镜像。将大型容器镜像作为函数而不产生延迟,并非易事。我建议大家观看Marc Brooker在USENIX ATC '23上发表的关于按需加载容器的2023演讲,了解我们是如何做到的。

5.如何调用应用程序?

文件命名规范(如“main.py”)和可选的代码注释,可轻易地从移动端用SDK调用程序,响应Amazon S3或Amazon DynamoDB的更新。这使得应用程序调用异常简单,无需学习、部署和维护复杂的框架。同时还支持Python WSGI、Ruby Rack和Node.js的调用模式。

6.如何更新应用?

将新版本保存在Amazon S3中,或使用简单部署直接从Git存储库中更新。部署过程都是相同的:只需使用代码的URL调用Amazon Lambda上的更新应用程序API,几秒钟即可完成更新。

7.如何在桌面端开发和测试应用程序?

Amazon Lambda使用的是运行时和标准库的通用版本,开发者可在桌面或自己的Amazon EC2实例上轻松开发、测试和调试代码,其环境与在Amazon Lambda上运行相同。

Werner批注:2020年推出的Serverless应用程序模型CLI,那就变得更简单了。

8.如何优化在Amazon Lambda上运行的应用程序?

开发者可以尽量减少启动和关闭开销,来降低成本和提高性能。使用标准(默认)版本的库可以最大限度地减少部署和启动开销。

语言和库

9.支持哪些语言和库?

Amazon Lambda支持您使用Java、JavaScript、Ruby和Python编写应用程序。

Werner批注:正如我在前面所说,我们在推出Node支持后,一直关注客户使用Amazon Lambda的情况,并根据这些经验添加了对其他运行时的支持。以下是时间表:

  • Node支持(2014年11月)

  • Java支持(2015年6月)

  • 支持Python(2015年10月)

  • .NET支持(2016年12月)

  • Go支持(2018年1月)

  • Ruby支持(2018年11月)

  • 自定义运行时(2018年11月)

10.如何访问其他亚马逊云科技服务?

无需学习或使用特殊的API,Amazon Lambda托管的应用程序可访问互联网的任何服务。为了方便起见,我们还预装了亚马逊云科技产品的客户端SDK。

11.如果没有想使用的库怎么办?

可以加载第三方库,同时支持本地自定义库。

Werner批注:虽然我们并不知道客户会如何使用Amazon Lambda,但我们知道支持本地自定义库是必需的。2018年,我们推出了Amazon Lambda Layers,让开发者能够创建多层可重用代码、自定义库,亦或是创建应用监控或安全层

12.Amazon Lambda如何维护运行时环境?

Amazon Lambda负责更新操作系统、运行时、标准库和预装三方库,同时确保高可用性。自动运维让开发者无需做更多的动作。而且应用程序代码和库都不会被更改。

13.如何响应重大更新?

Amazon Lambda为每种语言提供最通用的版本作为默认运行时,也可以在配置文件中选择其他版本。

14.运行的代码有限制吗?

由Amazon Lambda托管的应用程序是无状态的;持久状态应存储在Amazon S3、Amazon DynamoDB或其他可用存储服务中。入站网络连接由Amazon Lambda管理。出于安全考虑,限制某些级别低的系统调用,但语言功能和大多数库都能正常运行。本地文件系统访问仅用于临时存储数据,在每次调用之后都会被清空。这些限制让Amazon Lambda代替开发者启动和扩展应用程序多个副本,以应对快速增加的请求。

调用应用程序

15.如何调用Amazon Lambda上的应用程序?

一旦部署了应用程序,就可以通过Amazon Lambda的invoke API、命令行或亚马逊云科技控制台调用。开发者还可以通过移动客户端调用,在Amazon Simple Workflow Service的crontab文件中引用它,将其设置为Amazon S3或Amazon DynamoDB更新的处理程序,或将它命名为Amazon Simple Notification Service发布目标。

16.如何响应Amazon S3 PUT或COPY操作?

使用Amazon S3的SetUpdateHandler API,确定Amazon Lambda需要处理的应用程序、存储桶和路径,并确认PUT、COPY的更新。之后,每次PUT或COPY更新都会触发应用程序,以及相应的Amazon S3的操作。

17.如何响应Amazon DynamoDB的更新?

使用Amazon DynamoDB的SetTableHandler API,确定要跟踪的表格。之后,相关表格的每次成功写入都会触发相应的应用程序,使其能够响应Amazon DynamoDB的更新。

Werner批注:使用过Amazon Lambda触发器的客户肯定注意到,这项功能比PR/FAQ里写的还要简单得多。

18.如何以cron托管的形式调用应用程序?

开发者有两种选择:在大多数情况下,只需使用Amazon Lambda控制台UI、命令行工具或API配置应用程序,并指定运行时间即可。在极少数更复杂的情况下,Amazon Simple Workflow支持crontab指定作业的功能,并允许开发者使用Amazon Lambda确定其活动。

19.如何批处理应用程序?

可以用Amazon Lambda API和应用程序代码,进行Amazon Lambda应用程序的批处理;还可以用Amazon Simple Queue Service(SQS)维护作业队列,用Amazon Lambda集成SQS监控运行。

安全

20.如何确保应用程序的安全?

应用程序在沙箱中执行,彼此隔离,保护代码和数据的完整性。

21.如何控制应用程序可访问的服务和数据?

Amazon Lambda与Amazon IAM的集成,使开发者和管理员能够按照安全角色控制其可访问的数据和服务。确保只授予所需的最小权限,并且权限有时效性。

22.如何保护我的源代码?

Amazon Lambda的文件隔离确保每个应用程序只能对自己可见。应用程序的传输始终是加密的。固定性测试分层进行,防止开发者意外更改代码,代码加密备份在服务器端并存储在Amazon S3中。

容量和规模

23.如何快速扩展以响应请求?

低延迟,Amazon Lambda几乎瞬时调度底层计算资源——每次调用应用程序时,Amazon Lambda都会快速找到空闲资源并安全运行代码,而且只对实际执行时间收费,所以对非经常性或周期性的调度操作有很高的成本优势。面对突发不可预测的工作负载,如移动应用突然出现的流量激增,开发者也无需预测:按秒计费,即便在负载忽高忽低的情况下,Amazon Lambda也能同时兼顾高度响应和成本效益。

24.如何保护程序免受流量拥堵的影响?

当调用应用程序时,会将其放置到有足够容量的Amazon EC2实例上。Amazon Lambda会持续监控每个应用程序及其计算集群的性能,如有需要则自动获取额外容量。

25.扩容和缩容的速度如何?

应用程序启动时,Amazon Lambda的扩展速度与启动速度匹配。应用程序是按CPU用量计费,Amazon Lambda的费用在下一秒程序启动完成后立即结束,没有预热或冷却期,也不收费。

26.Amazon Lambda的可用性?

Amazon Lambda为其上运行的应用程序提供99.99%的可用性。没有维护窗口或计划停机时间。

限制和配额

27.应用程序可以运行多久?

批处理和定时作业的应用程序会在连续(挂钟)运行约4小时后终止,但出于维护或安全需要有时会提前终止。由HTTP请求启动的应用程序必须在请求期间完成,通常是30秒内,但有时会调用批处理,这使得比原始请求时间长。

Werner批注:批量和定时作业是在后来才出现的,但我们当时已经知道这是客户想要的。

28.应用程序可以使用多少内存?

每个运行应用最多可分配1GB的虚拟内存

性能

29.使用Amazon Lambda API调用应用程序的延迟是多少?

根据Amazon EC2托管的客户端调用echo应用程序的时间,典型延迟时间在20-50ms之间。首次部署应用程序和调用近期未使用应用程序,延迟会高一些。

Werner批注:在过去十年,我们一直改善延迟,主要是通过Firecracker microVMs实现的。我们在2022年推出了SnapStart,将冷启动延迟(尤其是Java函数)降低了90%。

30.我的代码运行在什么CPU上?

在Amazon Lambda上运行的应用程序在vCPU上执行,最低额定值为1 ECU。

31.Amazon Lambda如何支持并行处理?

开发者可以同时运行多个应用程序或同一应用程序的多个副本。开发者还可以使用亚马逊云科技客户端SDK以编程方式访问Amazon Lambda API,以协调运行其他应用程序。

举例来说,当原始图片存储在Amazon S3上时,要创建图片的十种不同形式,单个应用程序可以串行生成所有十种形式。或者,可以注册十个处理程序,每个处理程序只处理一个任务。后一种方法通常能让Amazon Lambda和Amazon S3并行工作,从而更快地完成。

内部常见问题

1.什么情况下“不”建议客户使用Amazon Lambda?

移动后端和任何亚马逊云科技服务内嵌的脚本,Amazon Lambda会在“幕后”发挥作用,有这样需求的客户会自然地选择该服务。

亚马逊云科技的事件处理程序、可以轻易表达为应用程序的批处理或实时作业,是Amazon Lambda擅长的任务。Amazon Lambda以近乎无限的能力来并行运行多个应用程序,兼具易用和简洁的特质,快速完成任务。Amazon Lambda还具备超强的性价比,最大限度地降低成本。

希望访问底层Amazon EC2实例的客户、希望使用服务更多语言编写代码的客户、需要“有状态”代码的客户,则应该使用Amazon Beanstalk或Amazon EC2。

2.Amazon Lambda的原则是什么?

除非您能提出更好的原则,否则截至当前Amazon Lambda的原则是:

  • 安全而不复杂——亚马逊云科技的服务将保护客户数据拒绝未经授权的访问,并抵御攻击。开发者无需采取更多行动,即可从操作系统、运行时和库中享受最新的安全性保护。

  • 简单易用——“无运维”(NoOps)服务,通过为开发者提供无差别的管理,用户也可以自助部署和管理自己的应用程序。

  • 弹性扩展(直至为零)——在不更改代码或配置的情况下扩展应用程序,可以支持从“每月一次”到“每秒一千次”的应用调用。

  • 任何规模下都具有成本效益——精细化的按需收费,开发者无需为闲置时间付费。我们努力实现成本和计费粒度的最小化。

  • 服务集成——使开发者轻松地从应用程序内部访问亚马逊云科技的服务。

  • 可靠——我们为亚马逊云科技的服务和在其上运行的应用程序,提供可预测和可靠的运行。

Werner批注:在亚马逊云科技,“原则”(Tenet)是指导团队决策和整体战略的根基。您可以在每个文档中找到它,它让我们忠于自己的初心。在发展变化中,原则是我们的唯一指南,在共识很难达成时,原则帮助我们简化决策。

3.为改善客户体验,我们考核和优化哪些指标?

我们将努力优化客户体验的三个关键指标:延迟、吞吐和可用性;并将监控第四个指标——抖动,以保障客户体验。

  • 延迟:通过运行在Amazon EC2上的金丝雀客户端,反复调用托管在Amazon Lambda上的echo应用程序来公开监测延迟,并公开延迟图表。我们还在内部监测服务器端延迟、进程和代码缓存的有效性,以及从进程调用到执行客户代码的延迟。

  • 吞吐量:用分页速率、CPU利用率和网络带宽,衡量每台主机的资源使用情况,确定出现延迟的应用程序;并在日志和Amazon CloudWatch中展示挂钟执行时间。

  • 可用性:Amazon Lambda服务本身和应用程序的可用性,由Amazon CloudWatch监控和报告。

4.Amazon Lambda如何为客户节约成本?

Amazon Lambda按需付费的定价模式为客户节省成本,为实际使用的计算资源付费,特别适合中小型客户和对程序调用不频繁的用户。对大客户而言,Amazon Lambda可以优化工作负载,减少专用实例,以此降低成本和满足IT管理需求。Amazon Lambda为客户提供操作系统和运行时维护,与其他云服务协作,确保应用程序的安全性、可扩展性和高可用性,并降低成本。

7a744eb99f4140c4688c969bc9d9ce52.png

2c7d8c6a49f63dabe59952e4474cb105.png

14a2bb15423da5ff27d0e24931ef34ed.png

45e0a50912b0189106362c41958e7466.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

f00807f0c9886442948d2fdf681fd28e.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值