typescript 使用aws和serverless实现事件调度的最有效方法

6pp0gazn  于 2022-11-18  发布在  TypeScript
关注(0)|答案(2)|浏览(98)

用例:用户创建会议约会,并应在约会前24小时/1小时/5分钟通知用户。当前实施:
1.创建约会时,将其保存在DynamoDB中,并带有ttl(约会时间- 24小时)
1.当ttl过期时,DynamoDB会移除此项目。
1.有一个lambda侦听DynamoDB流事件,并由上一个操作触发。项中有3个附加的布尔标志:24hours,1hour,5 minutes.当项目在24小时之前被移除时,该lambda将24hours标志设置为true(以便在下一步中知道在24小时之前推送通知已经被发送),并且利用新的ttl(预约时间-1小时)再次保存它,推送通知被发送。
1.与2和3相同:TTL到期,λ将1小时标志设置为真,并设置新TTL(约定时间-5分钟),并再次保存项目,发送推送通知。
1.再次:ttl过期,发送推送通知。
关注:DynamoDB不保证在ttl到期时准确删除项目。
有没有别的解决办法:比我的更有效率
当前堆栈:AWS/无服务器框架/NodeJS。

plicqrtu

plicqrtu1#

最近(2022年11月10日)AWS推出了一个新的服务,名为EventBridge Scheduler。我希望这将满足您的所有要求,而且它也是无服务器的。您需要做的是在EventBridge Scheduler中创建3个一次性计划。然后将目标设置为您当前的AWS Lambda功能。这样您就不再需要Amazon DynamoDB了。我希望这将解决您的问题。

insrf1ej

insrf1ej2#

如果你只想使用无服务器堆栈,那么这是最好的方法之一。但是如果你想使用更多功能,那么你可以创建一个bull queue服务器[https://www.npmjs.com/package/bull][1],并将其托管在EC2中。它提供延迟的作业和队列。
我想给予的一个建议是不要直接使用lambda发送通知,而是创建一个队列并通过它发送通知,因为如果您的系统扩展,当必须在单个时间点发送数千个通知时,您的lambda将开始受到限制。

相关问题