我的应用程序中有一个特定的用例,为此我必须构建一个预约系统。它将约会详细信息保存到DynamoDB表中,该表将包含有关约会日期和用户手机号码的信息。系统应在约会日期的前一天向用户发送提醒短信提醒。这也是DB表中的状态属性,当约会日期到来时,该属性应更改为“ TODAY”。
我应该如何构建这个系统,以成功实现这些用例。使该过程自动化的体系结构方法应该是什么?
答案 0 :(得分:2)
解决此问题的一种可能方法是让Lambda在using CloudWatch cron event trigger或scans DynamoDB表的计时器queries上运行,以获取具有适用于SMS警报的日期的值,然后使用SNS publish to SMS相应地发送警报(请注意,SDK的链接适用于javascript,但其他语言也支持这些功能)
答案 1 :(得分:1)
您可以采用以下方法解决用例
| pk | sk | notifyOn | notificationStatus |
| user1 | uuid1234 | 12-5-3019 | Pending | some other metadata
| user1 | uuid2345 | 12-5-2018 | done | some other metadata
| user2 | uuid2645 | 12-5-2028 | Pending | some other metadata
...
There is a GSI created with notifyOn as primary Key and sk as secondary Key
对于通知部分,您可以设置触发lambda功能的cloudwatch警报。在lambda函数中,您可以列出应立即通知的所有用户,并将通知发送给所有用户。
根据您的用例和规模,您可以进行进一步的优化,例如
与其让一个lambda函数发送所有通知,不如将sk放在另一个lambda函数提取并发送通知的sqs中。这样可以解决诸如
a。限制dyanmodb表上的写入。
b。限制您可能用于发送通知的其他资源。
c。由于lambda执行时间的上限为15分钟,因此在发送过多通知时可能会遇到问题。