一系列更新旨在改进功能,即服务平台处理异步工作流和数据流的方式。新发布的功能是在年度AWS re:创建前一周发布的。
同步调用函数意味着Lambda执行函数并返回响应。异步调用被发送到内部队列,一个单独的进程运行该函数。如果开发人员想在异步函数完成后向代理发送消息,他们的选择是使用step函数或者在函数中编写自己的代码。有了新的AWS Lambda目标,开发人员不需要编写任何代码来将异步调用函数的结果路由到端点。支持的目的地包括其他Lambda功能、亚马逊SQS、亚马逊社交网站或亚马逊活动桥。用户可以将成功的响应指向一个目标,将失败的响应指向另一个目标。异步函数的Json编码结果作为“消息”发送给SNS和SQS,作为有效载荷发送给Lambda函数。AWS解释了这个新特性如何改进事件驱动架构。
您不再需要将长时间运行的Lambda函数同步链接在一起。以前,您必须在lambda函数的15分钟超时内完成整个工作流,支付空闲时间,并等待响应。目标允许您返回对调用函数的成功响应,然后异步处理剩余的链接函数。
图像:https://AWS。Amazon.com/blogs/compute/introduction-AWS-lambda-destinations/
无服务器团队表示,Lambda destination也为开发人员提供了比以前更好的解决方案。
考虑到Step函数等服务的相对成本,事件目的地似乎是降低无服务器应用程序复杂性和成本的好方法。它应该允许您使用详细的工作流,这些工作流以前是留给那些愿意将这些细微差别写入自定义Lambda函数的人,或者那些愿意花钱创建阶跃函数工作流的人的。这并不是说Step函数没有用。它仍然是可视化和管理复杂工作流的好工具,但是对于更简单的架构需求,事件目的地似乎是一个不错的选择。
虽然有些人认为像destination这样的特性是供应商锁定的,但其他人认为Lambda与其他AWS服务的集成更紧密。
AWS还发布了三个与AWS Lambda数据处理相关的新功能。首先,Lambda现在在SQS使用FIFO队列。Lambda从2018年开始支持标准的SQS队列,现在支持这种队列类型(2016年首次发布),它保留了消息顺序。SQS先进先出队列依靠一对属性发送的信息:消息组标识符来创建一组消息进程,这些进程用重复的消息标识符唯一地标识消息,并允许SQS消息具有相同的标识符。据AWS报道。使用多个MessageGroupId来扩展和处理更多条目,并在队列中使用更大的并发限制。该模型至少提供一次交付。Aws说如果你需要送货,一定要设计清楚。
亚马逊SQS先进先出队列确保处理顺序遵循消息组中的消息顺序。但是,当用作Lambda触发器时,不能保证只传递一次。如果在您的无服务器应用程序中只有一个传递很重要,建议您将此函数设置为幂等函数。您可以通过使用一个可扩展的低延迟控制数据库来跟踪消息的独特属性,例如amazon DynamoDB。
Lambda的第二个数据处理函数将影响如何扩展无服务器函数,从Amazon Kinesis数据流和Amazon DynamoDB流中读取事件。并行化因子可以根据需要增加或减少。AWS解释了这个属性的功能。
现在,您可以使用新的并行化因子来指定Lambda从单个片段轮询的并发批处理的数量。这个特性在Lambda和Kinesis的缩放选项中引入了更多的灵活性。默认因子1表示正常行为。两个因素允许对100个驱动程序数据进行多达200次并发调用。并行化因子可以扩展到10。
每个并行拆分包含具有相同分区键的消息。这意味着录制处理顺序仍然保留,并且每个并行剪辑必须在处理下一个剪辑之前完成。
与此相关,Lambda开发人员现在可以设置一个批处理窗口属性,该属性指定在调用函数收集记录之前要等待多少秒。AWS指出,当“数据稀疏,批处理数据需要时间构建”时,这非常有用。它减少了原始函数调用的数量,使每个函数调用更加有效。
AWS Lambda中增加的最后一个数据处理功能,让开发人员在处理批处理数据中的错误时有了更多的发言权。当Lambda从亚马逊驱动程序或亚马逊DynamoDB流中读取数据时,它将被分段。到目前为止,如果在批处理过程中出现错误,Lambda将重试整个批处理,直到成功或者数据过期。这意味着当有问题的批处理尝试重试时,片段中的其他数据将不会被处理。Lambda用户现在可以更好地控制如何处理错误和重试。通过设置maximumretrytries值,开发人员可以指定跳过批处理之前的重试次数。在这种情况下,MaximumRecordAgeInSeconds指定在跳过批处理之前要等待多长时间。将批处理函数一分为二的错误意味着失败的批处理被分割并在较小的批处理上重试。