【问题标题】:How to handle AWS IOT streaming data in relational database如何处理关系数据库中的 AWS IOT 流数据
【发布时间】:2018-10-19 07:54:55
【问题描述】:

通用信息:-我正在为一种物联网问题方法设计解决方案,其中数据从 plc(可编程逻辑控制器)连续流式传输,plc 具有不同的标签,这些标签代表遥测数据和数据将从这些标签中不断流出,每个设备都有警报标签,该标签将为 0 或 1,1 表示设备出现故障 问题陈述:- 如果任何警报标签值为 1,我必须读取警报标签并提出票证,我必须将这些警报流式传输到仪表板,而且我还必须维护票证历史记录,所以运营商也可以更新票状态

我的解决方案:- 我正在使用 aws IOT,我在 dynamo db 中获取数据,然后我正在使用 dynamo db 流来检查是否在警报表中添加了任何新项目以及它是否会触发lambda 函数(我已经在 java 中实现) lambda 函数使用 hibernate 在关系数据库中打开一个新票。

我的方法存在问题:-aws iot 数据以非常快的速度在警报表中持续流式传输,这会在关闭之前打开大量连接,这会导致我的关系数据库停机

请告诉我是否可以采用其他好的设计方法?

【问题讨论】:

  • 因此 PLC 发出警报,DynamoDB 流检查它是否是新警报,如果是,则 Lambda 将一张票添加到关系数据库。只是关系数据库的问题吗?我对这个问题不是 100% 清楚。我们在谈论多少个连接?出于兴趣,为什么会有这么多警报?听起来您应该在 DynamoDB(所有 PLC 数据)中有很多活动,而在您的关系数据库中很少有活动(只是新警报)。

标签: amazon-web-services amazon-dynamodb iot aws-iot


【解决方案1】:

使用 Amazon Kinesis Analytics 处理流数据。 Dynamodb 不适合这个。

阅读更多here

下面的图片会给你一个相同的想法

【讨论】:

  • 我已经看过这个帖子了,问题是我不需要对蒸汽数据进行任何类型的分析,我必须获取数据并检查标志并根据我拥有的标志要打开票证并将票证流式传输到 ui,我还必须流式传输警报
  • 检查数据是一种分析 :) 嘿顺便说一句,你的问题中“降低数据库”是什么意思?
  • 我的意思是“关闭你的数据库”意味着在关闭之前打开了太多的连接,因此它会影响 rds 实例连接限制,并且其他 api 无法访问数据库
  • 哦,知道了,,,发布了另一个答案:)
【解决方案2】:

只是一个建议……

来自 lambda,请勿联系 RDS,

宁愿在 AWS SQS 中推送所有警报

然后您可以使用 AWS CloudWatch 规则为每分钟安排另一个 lambda,该规则将从 AWS SQS 中挑选所有项目,然后将它们立即插入 RDS。

【讨论】:

  • 我还想到了 cloudwatch 规则以外的解决方案,我有一个问题,如果我在 1 分钟轮询 sqs 并假设即使我正在处理队列,数据速率是否小于一秒队列没有溢出?
  • 对于标准队列,最多可以有 120,000 条正在进行的消息。更多关于限制的信息在这里docs.aws.amazon.com/AWSSimpleQueueService/latest/…
  • 我得试试这个
  • 当然,Shashank,我会删除这个和我之前的评论
【解决方案3】:

我同意 raevilman 的设计,即不让 Lambda 直接联系 RDS。 由于创建新工单不是 Lambda 函数正在执行的唯一任务,因此您还将这些警报流式传输到仪表板。根据流式传输速率和 RDS 限制,您可能希望将这些任务拆分到多个队列中。

通用解决方案:我建议您可以将警报推送到扇出交换,然后该交换会根据需要将警报推送到一个或多个队列。然后,您可以批量处理警报并一起执行多次写入,而无需多次执行连接/断开循环。

AWS 特定解决方案:我没有使用过 SQS,因此无法真正评论它的架构。或者,您可以创建一个 SNS 主题并将这些警报发布到该主题。然后,您可以将 SQS 队列作为该主题的订阅者,而这些队列又将用于彼此独立的票务和仪表板目的。

再次,从票务队列中,您可以使用 Lambda 或您自己的调度程序批量轮询消息并处理票证(频率取决于时间紧迫警报的程度)。 您可能想阅读this tutorial 以获得一些指示。

【讨论】:

  • 这种方法可能存在问题是 1 秒内 5 个数据点的数据速率非常高,因此 IOT 规则 -> dynamo->lambda 上已经有很多处理,如果我考虑您的情况,我将包括 sqs 所以流程将是 IOT rule-> dynamo->lambda->sqs->lambda ,不确定 sqs 的轮询率,但我认为数据不会是实时的,因为会有很多处理的,需要检查流程
  • IOT 规则-> dynamo->SNS->SQS->lambda
【解决方案4】:

您可以控制 lambda 函数的并发数。这将减少基于发电机事件旋转的 lambda 的数量。从而减少与 RDS 的连接。

https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency/

当然,这会限制发电机事件。

【讨论】:

  • 我认为当你有一组 lambdas 并且你想管理这些 lambdas 时,并发选项可用,这里我使用单个 lambda 函数
  • 您也可以只为一个功能设置它。假设您将 10 设置为限制。您的最大 rds 连接总数为 10。aws.amazon.com/about-aws/whats-new/2017/11/…
  • 如果我将限制设置为 10,那么由于数据速率非常高,数据延迟会有很多延迟
  • 同意。它只是对您可以为此过程负担多少 RDS 连接以及它们是否足以处理负载进行基准测试。如果是,只需设置 lambda 并发性的限制,您应该会很好,而无需添加 SQS 或 Kinesis 等外部水平可扩展性资源。这有帮助吗?
猜你喜欢
  • 2018-05-24
  • 2013-01-23
  • 1970-01-01
  • 2019-12-03
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多