调度程序/通知服务建议/架构决策

Scheduler / Notification Service Recommendations / Architecture Decision

我需要创建一个推送通知服务(我已经通过 SignalR/WebAPI 完成)和一个可以在特定日期/时间或在 运行 的未来任务运行器/调度程序一些重复间隔。

用例的一个示例是付款提醒服务,如果在到期日仍未付款,系统将向 "admin" 发送通知,并向 Email/SMS 发送通知"consumer"。提醒可以延后到更远的日期或更新到新的日期线,手动或自动。

Scheduler 服务可能用于其他任何事情,例如设置手动待办事项、重复提醒、未来 email/SMS 发送日期等...并且我正在查看每个日期时间可能有数千封时事通讯电子邮件等。 .

我研究了几个选项

1) Quartz.net / Hangfire / 后台任务

--> 可以在 asp.net 中 运行 或作为 windows 服务。

--> 有计划任务/经常性支持等...

--> 对我来说似乎过于复杂,如果与 asp.net 服务结合使用可能效率不高,可扩展性差,需要为将来的验证设计好...需要额外设置商店?

2) 任务计划程序

--> 我的焦土/凤凰部署场景不太可行

3) 外部服务

--> Azure 调度程序

--> AWS Cloudwatch Scheduler / Events(也可以触发 SNS / Lambda 等...)

--> 似乎是一个很好的解耦解决方案,但维护/测试/耐用性可能是个问题?需要根据解决方案正确设置...不知道如何获得“12 Factor's App”的 prod/dev 奇偶校验等...

4) 事件驱动消息总线

--> 巴士具有良好的耐用性和可靠性,但如果我想取消等会很复杂..?

--> 限制在未来的时间表中,就像我认为 SQS 只有 15 天的限制或类似的东西。

5) 演员模型

--> Akka.net 或 Orleans,设置起来似乎很简单,还没有使用过,但似乎有很多符合要求的东西,执行特定任务的小演员,调度程序,高性能,易于为更多工作​​添加集群(每个逻辑都是每个演员,其余的是配置),易于在本地复制并且很好......单个工作单元演员对我来说很有意义。

--> 没有这方面的经验,但它对我的场景来说会不会太过分了?对于一个成熟的调度程序来说,这似乎也是一个很好的未来证明。

--> 否定。尚无 dotnet 核心支持

欢迎任何其他建议...我需要在 2 周内完成。

P.S。真的很想知道什么是 Google Now Reminders 的架构...那是一项很酷的服务 "Remind me to do something at sometime",而且很管用。

您是否注意到 Orleans 有一个名为“提醒”(也称为“持久计时器”)的内置机制,这听起来正是您所要求的。

https://dotnet.github.io/orleans/docs/grains/timers_and_reminders.html

.NET Core 支持即将到来。