【发布时间】:2017-02-20 00:05:43
【问题描述】:
我需要创建一个推送通知服务(我通过 SignalR/WebAPI 完成)和一个可以在某个日期/时间或某个重复间隔运行的 Future Task Runner/Scheduler。
一个用例的例子是付款提醒服务,如果付款仍未在到期日支付,系统将向“管理员”发送通知,并向“消费者”发送电子邮件/短信。可以手动或自动将提醒延后到另一个日期或更新到新的日期线。
Scheduler 服务可能可用于其他任何事情,例如设置手动待办事项、定期提醒、未来的电子邮件/SMS 发送日期等...并且我正在查看每个日期时间可能有数千封简报电子邮件等...
我已经研究了几个选项
1) Quartz.net / Hangfire / 后台任务
--> 既可以在 asp.net 中运行,也可以作为 Windows 服务运行。
--> 有计划任务/定期支持等...
--> 对我来说似乎过于复杂,如果与 asp.net 服务相结合,可能效率不高,没有那么大的可扩展性,需要很好地设计以备将来验证...需要设置额外的商店?
2) 任务调度器
--> 在我的焦土/凤凰部署场景中不太可行
3) 外部服务
--> Azure 调度程序
--> AWS Cloudwatch 调度程序/事件(也可以触发 SNS/Lambda 等...)
--> 似乎是一个很好的解耦解决方案,但维护/测试/持久性可能是个问题?需要根据解决方案正确设置...不知道如何获得“12 Factor's App”的产品/开发奇偶校验测试等...
4) 事件驱动的消息总线
--> 巴士具有良好的耐用性和可靠性,但如果我想取消等会变得复杂......?
--> 未来计划的限制,就像我认为 SQS 只有 15 天的限制或类似的东西。
5) 演员模型
--> Akka.net 或 Orleans,似乎设置简单,尚未使用,但似乎有很多符合要求的东西,执行特定任务的小演员,调度程序,高性能,简单为更多工作添加集群(每个逻辑都是每个参与者,其余是配置),易于在本地复制并且很好......单个工作单元参与者对我来说很有意义。
--> 没有这方面的经验,但是对于我的场景来说这会不会有点过头了?对于一个成熟的调度程序来说,这似乎也是一个很好的未来证明。
--> 否定。尚无 dotnet 核心支持
欢迎提出任何其他建议...我需要在 2 周内完成。
附:真的很想知道 Google Now Reminders 的架构是什么……这是一项很酷的服务“提醒我在某个时间做某事”,而且它确实有效。
【问题讨论】:
标签: .net scheduled-tasks scheduler akka.net orleans