AWS中最适合长时间运行的订阅后台服务的最佳位置

3

我目前正在尝试在AWS中设置一个利用EventSourcing和CQRS的系统。我的命令端已经可以工作,并将事件存储到Aurora中。我选择SqlEventStore作为事件源存储,它具有订阅机制,可以监听新事件并适时调用函数。

目前一切都在Lambda中设置完毕,但是我不能把订阅过程放在Lambda中,因为它们并不总是运行。所以我的第一个想法是在Fargate中运行这个部分并使用Docker容器。然而根据我的阅读,这似乎需要由任务触发,而不能直接在容器中侦听订阅。

那么我的问题就是,在AWS中,最好将长时间运行的进程放在哪里,使其只需侦听事件的发生,而不是像Lambda那样对某个推送做出响应。


1
为什么 Lambda 需要一直运行,而不能使用作为 Lambda 事件源的 SQS 队列,每当队列中添加消息时,它就会触发 Lambda 运行? - Ashaman Kingpin
因为EventStore不是SQS。事件被存储到数据库中 - 然后我使用的第三方库具有订阅机制,可以填充读模型。 - James Woodley
明白了,为了自己的学习,你使用的第三方库是什么(假设它是公开的)? - Ashaman Kingpin
@AshamanKingpin 确定,这是 https://github.com/SQLStreamStore/SQLStreamStore - James Woodley
2个回答

2
我的问题是,在AWS中有哪个最适合长时间运行的进程,只需坐着听发生的事情,而不是对类似Lambda的东西作出反应。
我建议使用Fargate或EC2类型的ECS容器,使用Fargate您不需要管理服务器,与Lambda类似但更适合此类长时间运行的进程。
这似乎需要由任务触发,而不是在订阅上的容器中等待。
不,您可以以两种方式运行Fargate。
- 作为长时间运行的服务 - 基于CloudWatch事件或计划时间触发服务(执行任务并终止)
AWS Fargate现在支持定期按计划时间运行任务,并响应CloudWatch事件的功能。这使得更容易启动和停止仅需要在某些时候运行的容器服务。

AWS fargate

在 AWS 中,如果有一个长时间运行的进程只是坐等事件发生而不是响应来自 Lambda 等服务的事件,最好放在哪里?

  • 如果您的任务需要长时间运行,则 Lambda 不适合您,因为 Lambda 会有超时限制。
  • 如果您不想管理服务器,且该进程需要长时间运行,则 Fargate 是适合您的选择,因此可以坐等事件并监听。

我在思考关于Fargate以及将长时间运行的进程放入docker容器中的问题。我会去尝试一下,如果可以使用Serverless Framework进行管理那就太好了! - James Woodley
如果您期望运行时间很长,那么 Lambda 由于 fo 超时行为肯定会失败。 - Adiii
是的,我知道 Lambda 不起作用,因为上下文会消失,所以我正在寻找一个可以放置开放式订阅的地方。 - James Woodley
您也可以探索AWS的其他服务,但我更喜欢使用Fargate。相比Lambda,您可以更多地控制底层系统。 - Adiii

0
你可以探索 AWS Glue Python Shell 以实现长时间运行的服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接