Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 当一只羔羊死了怎么办?_Amazon Web Services_Aws Lambda - Fatal编程技术网

Amazon web services 当一只羔羊死了怎么办?

Amazon web services 当一只羔羊死了怎么办?,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我是AWS的新手,所以我不确定发生以下情况时的行为是什么 假设我有一个包含JSON数据的Kinesis流(假设每隔几分钟就会插入几千条消息) 现在有一个Lambda函数,每当一个新的msg被插入到Kinesis中时就会被调用,该函数读取msg并在插入到Redshift之前进行一些处理 那么,如果在处理过程中出现一些错误,Lambda函数崩溃,需要几分钟甚至几个小时(我不知道这是否可能)才能恢复,会发生什么呢。它将继续从最后一条未读消息中读取驱蚊信息,还是从最近插入的消息中读取驱蚊信息(因为这是调

我是AWS的新手,所以我不确定发生以下情况时的行为是什么

假设我有一个包含JSON数据的Kinesis流(假设每隔几分钟就会插入几千条消息)

现在有一个Lambda函数,每当一个新的msg被插入到Kinesis中时就会被调用,该函数读取msg并在插入到Redshift之前进行一些处理

那么,如果在处理过程中出现一些错误,Lambda函数崩溃,需要几分钟甚至几个小时(我不知道这是否可能)才能恢复,会发生什么呢。它将继续从最后一条未读消息中读取驱蚊信息,还是从最近插入的消息中读取驱蚊信息(因为这是调用事件)

提前谢谢

Lambda函数在执行处理时崩溃

这是可能的

需要几分钟甚至几个小时(我不知道这是否可能)才能恢复

这完全不可能

Lambda函数只允许在返回响应、抛出错误或触发超时计时器(以先到者为准)之前运行。这永远不会是几个小时

Lambda将在每次调用函数时创建一个新容器,除非它已经有一个容器为您准备,或者您达到了并发限制(通常为1000+)

然而。。。对于运动流,由于需要顺序处理,所发生的情况略有不同

基于流的基于轮询(或拉模型)的事件源:这些事件源由Kinesis数据流或DynamoDB组成。当Lambda函数调用失败时,AWS Lambda将尝试处理出错的一批记录,直到数据过期为止,最长可达七天

异常被视为阻塞,AWS Lambda将不会从碎片中读取任何新记录,直到失败的记录批过期或成功处理。这确保AWS Lambda按顺序处理流事件

因此,您的Lambda函数抛出异常或超过其超时运行只会导致Lambda服务立即销毁容器并立即创建一个新的容器,然后再次使用完全相同的数据重试调用,直到数据过期为止(由Kinesis config指定)

延迟通常不会超过您的超时时间,或者异常发生所需的时间,再加上一些毫秒数(对于冷启动,最多几秒钟)。在Lambda函数本身上可以单独配置超时,最长可达15分钟(但这个最大值可能太长)

记住一个隐藏的细节可能很重要——Lambda服务的一部分有一个系统正在读取您的Kinesis流,然后告诉Lambda服务的另一部分调用您的函数,以及批记录。Lambda服务(不是您的Lambda函数)通过拉取数据来检查流——从技术上讲,流并不是将数据推送到Lambda。DynamoDB streams和SQS的工作原理类似——Lambda提取数据,并通过重新调用函数来处理重试。另一个服务不负责推送数据

Lambda函数在执行处理时崩溃

这是可能的

需要几分钟甚至几个小时(我不知道这是否可能)才能恢复

这完全不可能

Lambda函数只允许在返回响应、抛出错误或触发超时计时器(以先到者为准)之前运行。这永远不会是几个小时

Lambda将在每次调用函数时创建一个新容器,除非它已经有一个容器为您准备,或者您达到了并发限制(通常为1000+)

然而。。。对于运动流,由于需要顺序处理,所发生的情况略有不同

基于流的基于轮询(或拉模型)的事件源:这些事件源由Kinesis数据流或DynamoDB组成。当Lambda函数调用失败时,AWS Lambda将尝试处理出错的一批记录,直到数据过期为止,最长可达七天

异常被视为阻塞,AWS Lambda将不会从碎片中读取任何新记录,直到失败的记录批过期或成功处理。这确保AWS Lambda按顺序处理流事件

因此,您的Lambda函数抛出异常或超过其超时运行只会导致Lambda服务立即销毁容器并立即创建一个新的容器,然后再次使用完全相同的数据重试调用,直到数据过期为止(由Kinesis config指定)

延迟通常不会超过您的超时时间,或者异常发生所需的时间,再加上一些毫秒数(对于冷启动,最多几秒钟)。在Lambda函数本身上可以单独配置超时,最长可达15分钟(但这个最大值可能太长)


记住一个隐藏的细节可能很重要——Lambda服务的一部分有一个系统正在读取您的Kinesis流,然后告诉Lambda服务的另一部分调用您的函数,以及批记录。Lambda服务(不是您的Lambda函数)通过拉取数据来检查流——从技术上讲,流并不是将数据推送到Lambda。DynamoDB streams和SQS的工作原理类似——Lambda提取数据,并通过重新调用函数来处理重试。其他服务不负责推送数据。

谢谢您的回答。我想我明白你想说什么。所以lambda服务(不是函数)使用shard迭代器提取数据,对吗?这项服务可以取消吗