并发AWS Lambda处理导致问题

时间:2017-09-29 07:03:27

标签: javascript amazon-web-services aws-lambda

我正在构建一个温度传感器应用程序,它可以测量实时传感器的温度,并在温度超出范围时发出警报。我正在使用AWS Lambda和AWS IOT平台。 API网关将传感器数据发布到AWS IOT,触发规则" sensor / temperature"这是一个lambda。此lambda将传感器数据存储在dynamo db中,然后将数据与存储的温度范围进行比较并生成警报。这是温度λ的响应。

{
 "Timestamp": "2017-09-14 19:12:05",
 "Raw Timestamp": 1505416325.907,
 "Mac": "9c:65:f9:1b:f8:3c",
 "Diagnostics": [
    "SensorMon",
    "1/1 Entries"
 ],
 "SensorReadings": {
    "sensor-1": {
       "Door": 0,
       "Temperature": 36,
       "Battery": "3.06",
       "Humidity": 27,
       "SensorModuleId": "sensor-1"
    }
 }
}

现在,如果温度超出范围,我会生成一个警告说" out_of_range"在开始时间'等于'原始时间戳'并设置完成'警报表中的属性为' false'这样,如果数据仍然是“out_of_range”,我会检查数据的每一分钟。和'已完成'属性是“假”'我没有生成新的提醒。现在说温度在范围内,所以我通过设置它的结束时间来结束警报。作为'原始时间戳'和'已完成'属性为' true'。只有现在我才能生成新警报。在此之后,我通过“结束时间”来计算持续时间。 - '开始时间'。

现在我面临的问题是,如果数据变化以较慢的速率发生,如果超出范围长时间超出范围并且如果它在范围内,那么它仍然在一个范围内很久。当数据变化很快时,我开始得到“持续时间”的负值。

我想我已经发现持续时间的负值是由于一个lambda请求仍在处理时发生的死锁,同时又出现了一个新的请求。假设我们的温度超出范围'从开始时间开始提醒' x'。现在传感器显示温度在某个时间范围内,例如' y' (y> x)所以这个处理开始。现在,当这个处理正在进行时,传感器表示温度再次超出范围'因此,会在时间生成一个新的提醒,例如' z' (z> y> x)说温度超出范围'。

现在请求时间' y'还在处理中。在处理过程中,它会设置两个警报的结束时间' x'并且在时间' z'到了'正如我们所考虑的那样,“已完成”'字段,这将导致在开始时间的警报持续时间' z'否定。

那么你能想到一个场景,即只有在前一个请求完成或其他方式通过这个问题时才会发生新的lambda处理请求吗?任何帮助将不胜感激。

0 个答案:

没有答案