是否有云服务可以可靠地安排在准确的时间执行作业?

问题描述 投票:0回答:7

我正在使用无服务器模型编写服务器,目前是 aws lambda。并要求在准确的日期时间运行作业

目前我正在使用 aws cloudwatch 运行一个 cron 作业,每分钟执行一次我的服务器,找到所有时间戳早于当前的任务,然后执行这些任务。这既浪费时间,又有时会比实际需要的时间延迟或提前一分钟(因为 cloudwatch 的最大频率只有每分钟 1 个 ping)。这不是一个理想的方法

而且每天的工作也不一样。客户端可以使用动态日期时间来 ping 我的服务器

我希望应该有一些像消息队列一样的服务,但可以根据调度时间戳主动调用目标 URL。有这样的事吗?如果可以放置请求的 URL,它可以是 aws 之外的任何服务

非常感谢

web-services cloud job-scheduling serverless-framework
7个回答
2
投票

您是否考虑过获得小型 EC2 实例,然后在那里设置 cron 作业?然后它可以将事件发布到 SNS 或直接调用所需的任务。而且您还应该能够动态安排新作业。


2
投票

为此,您可以将 DynamoDB 与 TTL、DynamoDB Streams 和 AWS Lambda 结合使用。

由于计划是动态的并且来自用户,因此您可以将这些项目保存在 DynamoDB 表中,并将其 TTL 设置为计划的执行时间。

当某个项目达到 TTL 时,它将创建一个 DynamoDB 流,然后您可以使用它来触发 Lambda 函数。

参考文献:


1
投票

作为解决方法,为什么不让 lambda 在 Cloudwatch 警报上唤醒,然后每 5 秒检查一次任务,直到 55 秒过去?


1
投票

您可能已经找到了解决方案,但我的服务 https://posthook.io 可能非常适合您的用例。它可以让您通过 API 调用来安排“挂钩”,如下所示:

curl https://api.posthook.io/v1/hooks \
-H 'X-API-Key: ${POSTHOOK_API_KEY}' \
-H 'Content-Type: application/json' \
-d '{
    "path": "/webhooks/ph/event_reminder",
    "postAt": "2018-07-03T01:11:55Z",
    "data": {
        "eventID": 25
    }
}'

然后,在 lamdba 函数中,您可以使用以

data
形式传入的数据或
hook
的唯一 ID 在数据库中查找内容并执行所需的工作。免费帐户允许您每月安排 500 个此类请求。


1
投票

其他解决方案似乎很有希望,但我发现了另一种解决方案

使用步骤函数等待状态

http://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html

我还不能在我的区域使用它,因为我的区域是新加坡,它不能跨区域使用。目前我会尝试查看上面的 dynamodb 解决方案

截至 2018 年,步进功能已普遍可用并按预期工作


0
投票

截至 2018 年,出现了 Azure 逻辑应用程序。与 azure 上的 aws step 函数等效的服务。它包含延迟连接器,可以安排延迟时间

https://learn.microsoft.com/en-us/azure/connectors/connectors-native-delay


0
投票

另一种解决方案是使用 EventBridge 调度程序 - https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html#one-time

© www.soinside.com 2019 - 2024. All rights reserved.