我们有客户使用的Web应用程序,他们可以选择创建报告。报告包含电子邮件和预定时间(例如:每天上午9点)。
当预定时间与当前时间匹配时,网络应用会执行一些工作并将结果发送到电子邮件中。
我有一个要求,我需要在swf之上实现可扩展的cron架构。
我所需的架构如下:
据我了解,SWF服务是我们可以创建cron作业和SWF自动缩放。如何使用SWF创建可扩展的cron微服务?
打开任何建议...
P.S。 Web应用程序是用nodejs编写的,因此最好用nodejs编写微服务。
更新1:花了一些时间研究可能的解决方案之后, 我找到了https://github.com/capside/CloudCron项目。但这取决于cloudwatch事件。对于许多计划任务,可能要收取很多IMO费用。
更新2: Banjo Obayomi建议将Lambda函数与SQS和CWE一起使用。
解决方案1:
限制: 我们每个区域只能创建 100条CWE规则。这意味着webapp不能按预定日期生成100多个报告。
答案 0 :(得分:2)
听起来像您可以使用AWS Lambda作为您的摄取点,从传入的SQS消息中触发功能,进行处理,然后将SQS消息发回。
答案 1 :(得分:2)
仅将SWF用于步骤3可能会过大。但是,将SWF用作单个工作流程来实现步骤2到4是很有意义的。这样,您就不需要SQS依赖关系,应用程序更简单,并且可以更好地了解过程。
不幸的是,SWF不提供受支持的nodejs客户端库。它还不支持自动缩放,因为您必须运行辅助进程。但是自动缩放可以在其之上实现。
答案 2 :(得分:2)
我没有找到解决问题的确切方法,但是找到了另一种通过CloudWatchEvent和SQS服务实现目标的方法。
与其使用 params 从cron微服务接收单个cron SQS消息,而是进行分析,通知工作。 我们将逻辑移至后端应用程序,如下所示:
答案 3 :(得分:0)
您不需要cron,只需使用正确的队列类型即可。
使用SQS和其他队列(即RabbitMQ),它们具有所谓的“死信交换”,您可以向特定队列添加生存时间(TTL)。 SQS的解决方案称为“延迟队列”,当您向其发送消息时,直到延迟过去,订户才收到它们。
创建队列时必须声明延迟间隔,但这非常简单。我相信您必须首先选择一个FIFO类型队列,然后设置延迟间隔。
其他队列,您可以在消息上设置TTL并声明交换死信(这意味着消息过期后,它将把它推送到目标队列)。这是创建延迟的好方法,您的订户正在侦听队列中的新消息,该消息在延迟后被推送到该队列。