在 AWS 上构建“实时”数据集成平台

在我担任云架构师的多个项目工作期间,我注意到一个反复出现的挑战:

整合多种数据源并向多个客户端提供实时更新

无论是监测智能农业中的环境条件、跟踪物流中的资产,还是管理智能城市中的连接设备,即时处理和处理数据的能力都可以产生重大影响。

在这篇文章中,我将分享使用 AWS 无服务器应用程序模型 (SAM) 构建无服务器近实时数据集成平台的经历。

所有基础架构代码均可在 GitHub 存储库中找到:

https://github.com/agriado-dev/sam-real-time-websockets

概述

了解实时与近实时

在深入研究细节和架构组件之前,有必要澄清平台的一个核心概念,这个概念有时会引起混淆。在数据处理的背景下,“实时”和“近实时”之间有什么区别?

  • 实时:数据在生成后立即处理并交付,几乎没有延迟。这在需要立即采取行动的情况下至关重要。示例包括工业自动化、联网汽车和医疗保健监控。

  • 近实时:这指的是数据处理略有延迟,通常从几毫秒到几秒不等。示例包括数据分析、CDN 和社交媒体监控。

关于此项目

要回答这个问题,

这个平台是实时的还是近实时的?

我们必须考虑到,真正的实时意味着数据在严格的时间限制下以最小的延迟(通常是微秒或毫秒)进行处理和传输。此项目实施所使用的云资源无法实现这种即时性,让我们分析一下最重要的云资源:

  • AWS Lambda:由于冷启动和函数执行时间,引入了一些延迟。虽然这种延迟通常很小(通常在几毫秒到几秒内),但这确实意味着它不能被视为“真正的”实时,而是以近实时的方式运行。

  • WebSocket API:该组件允许低延迟通信,更接近实时,但总体延迟受所连接服务的处理时间的影响。

  • DynamoDB 和 Streams:提供非常快速的数据检索和存储功能,但由流触发的 Lambda 仍然会引入额外的处理时间。

考虑到这些因素,该平台最准确的描述应该是“近实时”。然而,这种方法有一些好处,从成本效益到可扩展性和简单性,但请记住,根据您应用程序所面临的用例,近实时可能是最佳决策。

建筑学 冷库 www.cqzlsb.com

我将探索该项目的架构,详细介绍各种组件,并解释无服务器方法如何提供合适且有效的解决方案。此外,还将描述一个工作流示例,以便更好地理解该项目的工作原理:

成分:

  • 客户端集成:能够连接到 WebSocket API 并接收实时数据更新的前端应用程序(移动和 Web 应用程序)。

  • WebSocket API 网关:应用程序的入口点。它负责处理 WebSocket 连接和发送到客户端的消息。

  • OnConnect Lambda 函数:当客户端连接到 WebSocket API 网关时触发。将连接信息存储在 DynamoDB 表中。

  • OnDisconnect Lambda 函数:当客户端与 WebSocket API 网关断开连接时触发。从 DynamoDB 表中删除连接信息。

  • OnReceiveRealTimeItem Lambda 函数:当新项目添加到 DynamoDB 表时触发。将实时数据更新发送给对该项目感兴趣的客户端。

  • RealTimeData DynamoDB 表:用于存储实时数据项。每个项都有一个唯一的键和一个代表发送给客户端的数据的值。

  • WebSocketConnectionManager DynamoDB 表:存储连接到 WebSocket API 网关的客户端的连接信息。每个项目都有一个唯一的 connectionId 和一个 realTimeItemKey,代表客户端感兴趣的项目。

  • 集成源:负责向平台发送实时数据更新的数据源。对于此项目,已考虑以下来源:

    • SDK:与任何语言兼容的 AWS SDK 和 CLI。

    • 数据传输:任何能够将数据发送到平台的数据传输机制。例如,从其他数据库复制数据。

    • 设备位置和传感器:物联网设备主要发送传感器数据和遥测数据。例如,车辆的 GPS 位置。

    • REST API:例如,将天气数据发送到平台的天气 API。

    • 异步(SNS、SQS):能够将数据发送到平台的异步机制。例如,将数据发送到平台的 SNS 主题。

    • S3 事件:由 S3 存储桶触发的事件。例如,当新文件上传到存储桶时。

工作流程:

接下来,我们将描述图中标记的不同编号的步骤:

  1. 客户端集成连接到 WebSocket API 网关。

  2. WebSocket API 网关触发 OnConnect Lambda 函数。

  3. OnConnect 和 OnDisconnect Lambda 函数存储和删除 WebSocketConnectionManager DynamoDB 表中的连接信息。

  4. RealTimeData 项目从集成源添加到 RealTimeData DynamoDB 表中。

  5. OnReceiveRealTimeItem lambda 函数通过 DynamoDB Streams 触发。

  6. OnReceiveRealTimeItem lambda 函数将实时数据更新发送给对该项目感兴趣的客户端。

  7. 客户端集成从 WebSocket API 网关接收实时数据更新。

设置并测试平台

为了相应地测试平台,我们将使用 wscat 实用程序模拟 API 客户端并监控 websocket API。这样我们就可以让每个 tes 客户端立即接收数据。

复制
npm install wscat

我们可以在 AWS 控制台中检索 WebSocket API 端点,尽管将其作为 SAM 项目的输出很有用:

端点应具有以下组成:

复制
wscat -c wss://[api-id].execute-api.[aws-region-id].amazonaws.com/[environment]?realTimeItemKey=[item-key]

请注意,realTimeItemKey查询参数是连接到 WebSocket API 所必需的。此参数用于过滤发送到客户端的消息。此参数的值必须与realTimeItemKey要接收更新的项目的属性相同。

根据项目规范,这realTimeItemKey是一个动态值,可以根据客户/集成需求进行调整。

在我们的示例中,我们将使用 vehicleId 作为实时项目来接收来自多个客户端的更新,那么,应该realTimeItemKeyvehicleId,并且连接的命令应该是:

复制
wscat -c  wss://svcz00plil.execute-api.eu-central-1.amazonaws.com/develop?vehicleId=3

让我们看一下该平台三个主要事件的一些示例:

  • 连接时:

  • 断开连接时

  • 接收实时项目时

结论

该项目是无服务器架构中简单的近实时集成的绝佳示例。它可以作为实现更复杂集成的起点,也可以添加到另一个项目中以进行实时处理。

我认为,优化这类数据集成并使其尽可能高效非常重要。许多项目过度使用轮询,这可以被视为正确实时实施的反模式。

此外,请注意,该项目的一个特殊部分专注于 IaC,因为实现可以在任何云环境(在本例中为 AWS)中重复使用和复制的工作负载至关重要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值