【问题标题】:Best architecture for time triggered events in serverless architecture无服务器架构中时间触发事件的最佳架构
【发布时间】:2021-12-28 23:32:29
【问题描述】:

我目前正在设计一个无服务器系统,我想在其中存储将在用户定义时使用的对象。例如,用户可以说“这个对象将在 3 天内完成 x”。该对象被存储在数据库中,然后 3 天后,该对象将发生一个动作。

我希望它尽可能实时。 Time driven events architecture 这个答案建议使用优先级队列,我认为这是个好主意。但是在无服务器架构中,如何仅在用户集通过后才将对象从优先级队列中拉出?我现在能想到的唯一方法是每隔一段时间轮询一次队列,但如果优先级队列可以自行弹出并在队列前面的对象过期时采取行动似乎会更好。

这似乎可以工作https://aws.amazon.com/blogs/mt/build-scheduler-as-a-service-amazon-cloudwatch-events-amazon-eventbridge-aws-lambda/,但我担心它是矫枉过正或者它不是一个完美的配合会遇到扩展问题。

【问题讨论】:

  • 看看 temporal.io。它允许将您的用例建模为基于代码的工作流。

标签: amazon-web-services design-patterns architecture serverless system-design


【解决方案1】:

我建议使用 AWS DynamoDB 的 TTL 功能。 参考 - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html

当您存储对象时,向 DynamoDB 添加一条记录,其中包含对象的详细信息和纪元时间(现在 + 用户提供的时间)。 一旦您给的时间到期,DynamoDB 将删除该记录。

创建一个触发 lambda 函数的 DynamoDB 流,该函数现在可以处理它在事件中收到的记录信息。

参考-https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/time-to-live-ttl-streams.html

【讨论】:

  • 这似乎是一个非常好的选择。但我不想在一天结束时从数据库中删除记录。我只是想更新它。所以 TTL 会被删除,然后对象会被处理、更新并返回给数据库。这是一个低效的过程吗?
  • 好吧。我不会说它效率低下。 DynamoDB 是无服务器的,您主要为存储和容量单位付费。无论您使用同一张表还是不同的表,您都会消耗几乎相同的资源。有一个“待处理事务”表和一个“已完成事务”表也很常见。
猜你喜欢
  • 2018-06-20
  • 2020-01-15
  • 2019-10-25
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2020-04-07
  • 2011-10-02
相关资源
最近更新 更多