使用 API 网关/Lambda/DynamoDB 的 AWS 心跳服务

AWS heartbeat service using API Gateway / Lambda / DynamoDB

我正在使用本地 windows 应用程序,我希望能够知道此应用程序何时离线(延迟不超过一分钟)。

我正在考虑创建一个名为 HeartbeatControllerAPI 的 api 网关,这个 api 将调用一个 lambda,它反过来将设置 dynamodb table 中应用程序的最后一个心跳 table =35=] 看起来像这样:

机器名 |最后一次心跳

一个2:00上午

乙2:10上午

C 2:05 AM

因此,如果我有 3 台机器如下:

机器 1 - 安装了应用程序。

机器 2 - 安装了应用程序。

机器 3 - 安装了应用程序。

然后我虽然每分钟所有机器都会按照我上面描述的那样做工作然后我就能知道哪台机器离线/在线。

这个方法对吗?我很担心(从计费和过载的角度来看)如果我有 100 万台这样的机器会发生什么,而每分钟它们都会访问 api 网关并更新 dynamodb table

通常心跳是相反的,在你的情况下你会做一些事情,比如让 Lambda 由 CloudWatch 事件触发(cron 事件,每 X 分钟触发一次),Lambda 会调用你的机器并确认他们起床了 运行。这样,您的机器就可以完成它们的任务,并且您的心跳功能(Lambda)将每隔 X 分钟确认它们正在工作。

这也意味着你只需要一个 Lambda 用于很多机器(取决于性能,如果你达到 50 台机器可能会增加 Lambda 的数量)。

因此,如果您采用这种方法,您的 Lambda 将被 CloudWatch cron 事件触发,检查机器是否 运行 然后对于每台机器,如果它们 运行 将更新 table 状态,如果不是,您可以向 SNS 主题发送消息(并订阅该主题),这样您就可以收到机器停机的通知(这也是如果机器是调用者,则要复杂得多,因为如果机器停机,则必须扫描 table 以获取上次更新时间,这可能会变得成本高昂且效率低下)。