【问题标题】:The most effective way to implement event scheduling using aws and serverless使用aws和serverless实现事件调度的最有效方式
【发布时间】:2022-11-14 08:15:20
【问题描述】:

用例: 用户创建会议预约,应在预约前 24 小时/1 小时/5 分钟收到通知。 当前实现:

  1. 创建约会时,它使用 ttl 保存在 DynamoDB 中(约会时间 - 24 小时)
  2. 当 ttl 过期时,DynamoDB 会删除此项。
  3. 有一个 lambda 监听 DynamoDB 流事件并由之前的操作触发。项目中还有 3 个额外的布尔标志:24 小时、1 小时、5 分钟。当项目在 24 小时之前被删除时,此 lambda 将 24hours 标志设置为 true(以便在下一步中知道 24 小时之前的推送通知已经发送)并使用新的 ttl 再次保存(预约时间 - 1 小时),推送通知已发送。
  4. 与 2 和 3 相同:ttl 已过期,lambda 将 1hour 标志设置为 true 并设置新的 ttl(约会时间 - 5 分钟)并再次保存项目,发送推送通知。
  5. 再次:ttl 过期,发送推送通知。

    关注点:DynamoDB 不保证项目将在 ttl 过期时准确删除。

    还有其他解决方案:比我的更有效吗?

    当前堆栈:AWS/无服务器框架/NodeJS。

【问题讨论】:

    标签: node.js typescript amazon-web-services aws-lambda serverless


    【解决方案1】:

    如果您只想使用无服务器堆栈,那么这是最好的方法之一。但是,如果您想要功能更强大的东西,那么您可以创建一个 bull 队列服务器 [https://www.npmjs.com/package/bull][1] 并将其托管在 EC2 中。它提供延迟的作业和队列。

    我想给出的一个建议是不要直接使用 lambda 发送通知,而是创建一个队列并通过它发送通知,因为如果您的系统扩展,当它必须在一个点发送数千个通知时,您的 lambdas 将开始受到限制的时间。

    【讨论】:

    • 谢谢赫曼特。是的,我考虑过使用 ec2,但就我而言,我没有使用 ec2 资源的权限。对于推送通知:是的,我正在使用队列。
    【解决方案2】:

    最近(2022 年 11 月 10 日)AWS 推出了一项名为 EventBridge Scheduler 的新服务。我希望这将满足您的所有要求,并且它也是无服务器的。您需要做的是在EventBridge Scheduler 中创建3 个One-time schedule 计划。然后将目标设置为您当前的AWS Lambda 函数。那么你就不再需要Amazon DynamoDB了。我希望这能回答你的问题。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      相关资源
      最近更新 更多