用于跟踪发送提醒的截止日期的设计模式

问题描述 投票:0回答:1

我必须在特定期限前几天将通知发送给用户。我当前的设计是使用Cloud Scheduler定期调用作业,然后在期限内以很小的间隔查找所有匹配记录,然后对它们进行警报。一切正常,除了我需要按时创建索引这一事实,对于按比例缩放不是一个好主意,因为对索引进行单调递增的值会创建热点。那么,对于这种有效的业务需求,最佳的可扩展设计选择是什么?请注意,我已经很熟悉为时间戳加上一些值的前缀,因此可以在分区中跟踪顺序。但是,计划作业需要发现所有截止日期,并且根本不可能对每个分区进行迭代,因为随着时间的推移,即将到来的截止日期数量可能远远小于分区数量。

google-cloud-platform google-cloud-datastore
1个回答
0
投票

您的设计很好。在数据存储区(或其他数据库系统)中,您必须索引下一个触发日期(我建议以timestamp格式)

调度程序在运行您的作业(函数,Cloud Run或其他)时,会在Now()> trigger timestamp处执行查询。对于找到的每个文档,您只需将其发布在PubSub中(根据需要,只需发布​​ID或整个文档)

  • 这里PubSub有助于避免热点,它被用作处理缓冲区

为您的PubSub主题设置推送订阅,以处理消息并有效发送通知。发送后,将根据您的用例和规格更新下一个触发时间戳记

这里,发送通知的过程可能是大规模并行的(使用Cloud Function或Cloud Run->我建议使用此方法,因为在同一实例上进行并发处理,因此成本最低)

注意,调度程序一定不要经常触发您的进程。 (避免每分钟,最好每10分钟或更长时间,以避免重复通知)

© www.soinside.com 2019 - 2024. All rights reserved.