Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 具有计划任务的可伸缩中间件?_Architecture_Scheduled Tasks_Middleware - Fatal编程技术网

Architecture 具有计划任务的可伸缩中间件?

Architecture 具有计划任务的可伸缩中间件?,architecture,scheduled-tasks,middleware,Architecture,Scheduled Tasks,Middleware,我们正在设计一个中间件,它接受来自客户端的请求。这个中间件应该是可伸缩的,并且在负载平衡器后面 我们的中间件的主要工作是处理请求,并将其转发到外部服务器进行额外处理 我们需要考虑的是计划处理< /强>;例如,可以将特定请求安排为仅在将来的特定时间(例如,3小时后)转发 因此,它引入了持久化计划作业的需求;需要处理一台服务器宕机的情况,然后其他服务器仍然可以接收它 我们考虑过这一方法: 使用数据库存储来持久化计划作业 中间件有后台作业,定期查询数据库是否有任何挂起的作业需要发送 使用某种DB并发性

我们正在设计一个中间件,它接受来自客户端的请求。这个中间件应该是可伸缩的,并且在负载平衡器后面

我们的中间件的主要工作是处理请求,并将其转发到外部服务器进行额外处理

我们需要考虑的是<强>计划处理< /强>;例如,可以将特定请求安排为仅在将来的特定时间(例如,3小时后)转发

因此,它引入了持久化计划作业的需求;需要处理一台服务器宕机的情况,然后其他服务器仍然可以接收它

我们考虑过这一方法:

  • 使用数据库存储来持久化计划作业
  • 中间件有后台作业,定期查询数据库是否有任何挂起的作业需要发送
  • 使用某种DB并发性来处理多个中间件实例,这些实例可能会查看相同的调度作业
  • 然而,我认为这种设计可能不是最优的?特别是在经常性的后台作业中,因为可能会浪费一些处理(例如,如果数据库中总是存在数据争用)

    编辑:另一种替代解决方案

  • 中间件接收预定请求
  • 中间件创建/将计划请求推送到消息队列(具有时间延迟)
  • 从消息队列接收单独的托管函数(例如Azure函数)
  • 函数处理计划的请求
  • 这种方法似乎更具可扩展性?

    您可以使用它。以下是使用Java SDK实现业务逻辑的方式(也支持Go、PHP和Ruby):

    公共作废执行(请求r){
    睡眠时间(3小时);
    活动。转发请求(r);
    }
    
    时态保留函数的完整状态。因此,即使在存在流程和其他基础设施故障的情况下,代码也可以保证执行。因此,任何一段时间(甚至几个月)的同步睡眠都是可以的

    与这个问题没有直接关系,但我仍然认为值得一提的是,Temporal已经是一个中间件,它具有比您尝试实现的中间件更多的特性。所以我相信您实际上不需要实现自己的:)。我建议将应用程序设计为直接使用时态SDK