AWS Lambda - 同步/异步调用,事件源,目标

news2024/11/15 13:40:11

在这里插入图片描述

Hello大家好,我们今天继续讨论AWS Lambda的内容。

同步调用

在这里插入图片描述

Lambda函数有三种调用方式。

第一种方式是同步调用。

当我们使用API、CLI以及API网关等调用函数时,就是同步调用。

当您同步调用函数时,Lambda会运行该函数并等待响应,当函数完成时将结果同步返回,所以您的代码将等待这个响应结果。

如果在这调用过程中需要错误控制,这是需要在您在客户侧实现的。您负责确定处理错误的策略,如可以重试、将事件发送到队列以进行调试,或者忽略该错误。

我们看两个例子:

  1. 第一个,您的SDK要调用Lambda函数,然后Lambda函数会运行,SDK等待响应。如果响应不是您期望的结果,如返回错误时,您希望重试调用函数,这是您需要实现的。
  2. 第二个例子,是客户端通过API网关调用函数。客户端调用RESTAPI,API网关将请求发送给Lambda函数,函数就会执行。然后向API网关返回响应,然后您从API网关收到响应。

这两个例子都是同步调用。在同步调用过程中如果出现了错误,需要您自行处理错误,如忽略、重试、发送到队列进行调试等等。

好,我们继续。

异步调用

在这里插入图片描述

接下来是异步调用。

当事件源是S3、SNS等服务调用函数时是通过异步调用的方式。

在异步调用函数时,您不必等待函数代码的响应。将事件交给 Lambda,剩下的事情由Lambda 进行处理。

在异步调用时, Lambda 会针对函数错误重试两次。比如在上传至S3图片处理缩略图的案例中,如调用函数时发生错误,那么将会在重试两次。

您需要确保这个过程是幂等的,这是非常重要的。假设您的函数重试了2次写入数据库操作,对数据库做了一些更改,您要保证每次的操作结果是一致的。如果不是幂等的,重试2次产生了两次不同的更改,那么可能会出问题。

我们看个例子,上传一个文件到S3,然后其触发一个Lambda函数,这就是一个异步调用,当调用发生错误时会进行重试,如果所有重试都失败了,您可以通过定义一个死信队列,它可以是一个SQS队列,或者SNS主题,保存失败的的事件供近一步处理。

对于我们的这个例子是通过SQS作为死信队列,当所有的重试都失败之后,不是丢弃这些事件,而是将失败的事件发送至死信队列,供后续处理。

好,以上是异步调用。

事件源映射

在这里插入图片描述

第三种调用类型称为事件源映射。

事件源映射是一个从事件源读取并调用 Lambda 函数的Lambda 资源。它从 Amazon SQS 队列、Amazon Kinesis 流或 Amazon DynamoDB 流中轮询批量读取项目,并将它们发送到您的函数。
所有的记录都会按照正确的顺序进行处理,除了SQS标准队列。

  • 对于SQS标准队列,项目不一定按顺序处理,函数可能会处理任意的批次,
  • 对于Kinesis数据流,将按每个Shard的顺序处理记录,
  • 对于SQS FIFO,将按每个消息组的顺序进行处理,
  • 对于DynamoDB流,它将对DynamoDB流的每个分区进行排序处理。

我们举个例子看一下事件源映射,这里是kinesis作为事件源,然后这是您的Lambda函数,Lambda事件源映射会作用在这两者之间,它会轮询kinesis,然后kinesis可能会返回一批记录,事件源映射将调用我们的Lambda函数进行处理,这就是事件源映射的工作原理。

如果在这个过程中您的函数返回错误,那么将重新处理整个批次直到成功,要注意这一点。

这也就是说,如果是Kinesis或DynamoDB Stream,他们将停止分片处理,因为它是按顺序处理的,如果第一批无法处理,将无法获得下一批,直到第一批已成功处理。

对于SQS FIFO,它将会停止处理,除非您定义了SQS 死信队列,在定义了死信队列的情况下,SQS会将失败的批次发送到死信队列,然后继续处理。

再一次强调,您需要确保的您的Lambda函数是幂等的,以防如果发生错误后两次处理同一批次事件出现问题。

配置目标

在这里插入图片描述

目前您还可以配置您的Lambda函数将结果发送到一个称为目标destinations的地方。
目标可以配置在异步调用以及事件源映射,我们下面就来详细讨论下。

对于异步调用,您可以为成功和失败的事件定义目标。如果您没有定义目标,如果您的Lambda函数会返回一些信息,就无法看到,这些信息会被完全忽略。您可以配置将这些信息发送到SQS、SNS、另一个Lambda函数、或者EventBridge bus。

也就是说,Lambda函数从事件队列中获取事件进行异步处理时,如果返回成功,我们可以定义一个成功的目标,如SQS、SNS、Lambda等等;如果处理失败了,我们也可以将这些记录发送到定义的失败的事件目标。

所以可以配置两种destinations,成功事件和失败事件的目标。

好,有的学友可能会问了,那前面的死信队列和这个目标配置的功能是不是有些相似?

是的 ,配置失败的事件目标 和 死信队列的用途非常相似,AWS建议在异步调用您的Lambda函数时,使用目标配置来代替死信队列。当然两者有一些重叠的功能,且他们两个是可以同时使用的。使用目标配置,支持配置更多的目标类型:如SQS、SNS、Lambda、或者EventBridge bus,而死信队列只能配置为SQS和SNS。

接下来,对于事件源映射,只能配置失败事件的目标,用于接收处理失败的事件。如果一批事件处理失败了,则事件源映射将有关该批次的详细信息发送SQS或SNS。

来看一下这个图。事件源映射读取Kinesis的记录,会将其发送给Lambda函数。在这个过程中如果处理这些记录出现失败,我们可以选择将它们发送到SQS或SNS作为失败的事件目标,然后 Kinesis可以继续处理,这样的好处是当有无法处理某些记录时不会一直卡在这里。

如果您是处理SQS队列中的内容,当然也可以直接从SQS创建死信队列,作为上面目标的替代方案。
所以,达成的方案可能会有多种,但是作为解决方案架构师,您需要深入了解需求后,然后选择最佳方案和最佳实践。

好的,以上就是我们今天课时的内容,我们讨论了AWS Lambda - 第三部分的内容,希望能够给大家带来帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/498433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务---Redis入门篇-Redis的常见命令和客户端使用

Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样&#xf…

易视腾iS-E5-NGH_3798MV100_MT7601_卡刷固件包_当贝纯净桌面

易视腾iS-E5-NGH_3798MV100_MT7601_卡刷固件包_当贝纯净桌面 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件&#xff0…

单链表OJ题:LeetCode--206.反转链表

朋友们、伙计们,我们又见面了,今天给大家带来的是LeetCode中206题:反转链表 数 据 结 构:数据结构专栏 作 者:stackY、 C 语 言 :C语言专栏 LeetCode :LeetCode刷题训练营 LeetCod…

TiDB实战篇-数据库热点问题

形成热点的原因 主要是因为数据插入进去的时候是按顺序加数据的。 数据分裂以后还是在一个store上面,就会形成读写热点。 没有走索引全表扫描的情况。 定位热点 如果有热点,那么它的查询语句应该是比较多的,容易在这个地方找到对应的热点问…

Leetcode434. 字符串中的单词数

Every day a leetcode 题目来源:434. 字符串中的单词数 解法1:istringstream 我们知道,C默认通过空格(或回车)来分割字符串输入,即区分不同的字符串输入。 istringstream类用于执行C风格的串流的输入操…

Flowable入门

Flowable初体验 Flowable是什么 Flowable 是一个使用 Java 编写的轻量级业务流程引擎,常用于需要人工审批相关的业务,比如请假、报销、采购等业务。 为什么要使用工作流呢? 对于复杂的业务流程,通过数据库的状态字段难以控制和…

软考信管高级——质量管理

质量管理内容 质量保证QA(过程符合要求/过程改进) (1)按项目计划开展质量活动,使项目过程和产品符合质量要求,即按计划做质量; (2)提高项目干系人对项目将要满足质量要求的信心; (3)按过程改进计划进行过程改进&…

金兰组织 | 2023金兰解决方案集经营管理篇正式发布

为助力企业创新管理、提质增效,人大金仓携手金兰组织成员单位,于近期发布多项经营管理领域的联合解决方案,共享创新应用成果。 /人大金仓高级副总裁宋瑞/ 人大金仓高级副总裁宋瑞在致辞中表示:“联合解决方案创新是指通过把不同领…

利用谷歌云Pub/Sub 实现多任务并行分发处理方案

背景 目前老梁团队负责的Global Data Integration Platform每天有大量文件需要从来自不同地区的上游下载文件并进行处理后再发送到不同下游。老梁的数据集成平台集群有6个服务器节点,老梁希望所有机器的资源都能利用上,提升大量文件并行处理能力&#x…

C# Microsoft.ClearScript.V8脚本使用

1、ClearScript支持的功能和适用场景 微软的.net是非常强大和灵活的,除了C#体系脚本扩展,也支持其他流行的脚本扩展,Microsoft.ClearScript.V8就是一个.NET绑定到Google V8的脚本引擎。它允许.NET应用程序直接从JavaScript代码中调用函数&am…

Redis布隆过滤器的原理和应用场景,解决缓存穿透

目录 专栏导读一、布隆过滤器BloomFilter是什么二、布隆过滤器BloomFilter能干嘛?三、布隆过滤器使用场景1、解决缓存穿透问题2、黑名单3、网页爬虫对URL的去重,避免爬取相同的URL地址四、操作布隆过滤器BloomFilter1、使用布隆过滤器2、删除key3、判断是否存在五、代码实例1…

黑客开始使用双 DLL 侧载来逃避检测

一个名为“Dragon Breath”、“Golden Eye Dog”或“APT-Q-27”的 APT 黑客组织正在展示一种新趋势,即使用经典 DLL 旁加载技术的多种复杂变体来逃避检测。 这些攻击变体从一个初始向量开始,该向量利用一个干净的应用程序,最常见的是 Telegr…

vue_组件基础

单文件组件 Vue 单文件组件&#xff08;又名 *.vue 文件&#xff0c;缩写为 SFC&#xff09;是一种特殊的文件格式&#xff0c;它允许将 Vue 组件的模板、逻辑 与 样式封装在单个文件中 <template><h3>单文件组件</h3> </template><script> ex…

asp.net+c#操作系统课程在线教学平台

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

答疑解惑:开发者必须彻底搞懂的 SSL/TLS 协议

简介 本期答疑解惑将和大家一起认识SSL/TLS 协议。请尝试回答以下几个问题&#xff1a; 使用浏览器访问https网站和http网站有什么不同&#xff1f;SSL协议作用于网络模型的哪一层&#xff1f;你知道CSDN&#xff0c;博客园正在使用的是什么类型的SSL证书吗&#xff1f;SSL&a…

汇编实现LED循环点亮(延时子程序模板)

在单片机P2口外接8个发光二极管(低电平驱动)。试编写一个汇编程序&#xff0c;实现LED循环点亮功能:P2.0-P2.1-P2.2-P2.3-…-P2.7-P2.6-P25-…-P2.0的顺序&#xff0c;无限循环。要求采用软件延时方式控制闪烁时间间隔(约50ms)。 首先进行电路设计 电路原理图设计 利用 Prot…

php+vue影视电影视频点播推荐avxhe系统

影视推荐系统的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;首页、个人中心、用户管理、公告信息管理、电影分类管理、影视推荐管理、付费点播管理、点播信息管理、管理员管理、系统管理&#xff0c;用户&#xff1a;首页、个人中心、付费点播管理、…

数字化转型导师坚鹏:企业数字化领导力提升之道

企业数字化领导力提升之道 ——融合中西智慧&#xff0c;践行知行合一思想&#xff0c;实现知行果合一 课程背景&#xff1a; 很多企业存在以下问题&#xff1a; 不知道如何领导面临的数字化时代&#xff1f; 不清楚企业数字化领导力模型的内涵&#xff1f; 不知道如何…

开关电源基础02:基本开关电源拓扑(1)-BUCK拓扑

说在开头&#xff1a;关于海森堡的矩阵&#xff08;1&#xff09; 我们前面说了&#xff0c;海森堡和泡利到了哥本哈根跟着玻尔混&#xff0c;在哥本哈根海森堡感到了一种竞争的气氛&#xff1a;他在德国少年得志&#xff0c;是出了名的天才&#xff0c;现在突然发现身边的每一…

Python每日一练:圆桌争风吃醋的豚鼠韩信点兵(全一行代码解法)

文章目录 前言一、圆桌二、争风吃醋的豚鼠三、韩信点兵总结 前言 很显然&#xff0c;Python的受众远远大于C&#xff0c;其实笔者本人对Python的理解也是远强于C的&#xff0c;C纯粹是为了假装笔者是个职业选手才随便玩玩的&#xff0c;借着十多年前学的C的功底&#xff0c;强…