搜索适当的技术选择,最好是从MS Azure PaaS(所谓的“无服务器”),因为 需要 在Azure中运行。
问题/条件:
运行一组N个完全独立的任务,同时最多执行M个任务。
考虑到该解决方案的相关部分可以在.NET中实现,其想法不是从头开始编写整个系统(即使它可能是最简单的),而是使用一些Azure云功能。
到目前为止,我已经研究过Azure队列/服务总线,功能,Azure批处理。但是例如我在这里看不到对Bacthes非常好的适用性,因为我的任务是异步的,它们将消耗SQL Server(SSIS)之外的计算资源。但可能我只是错了,这仍然是Azure批次的一个很好的使用场景。你能告诉smth吗?
毕竟它可能不一定是Azure解决方案,通过一些适当的.NET技术/框架解决,并作为持久功能(或其他一些无服务器方法)部署到Azure,但这是不太理想的。
答案 0 :(得分:1)
我会构建一个调用SSIS子包的SSIS“主包”。这可以满足您的所有要求:
在控制流上,为每个SSIS子包创建一个执行包任务。保持它们不被Precedence Constraints连接,它们将异步启动。
对于主程序包,设置属性Max Conncurrent Executables:https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.package.maxconcurrentexecutables.aspx
查询SSISDB SQL表以获取进度,例如https://github.com/yorek/ssis-queries
在主包中,将每个执行包任务放在For循环容器中,例如http://microsoft-ssis.blogspot.com.au/2014/06/retry-task-on-failure.html
答案 1 :(得分:0)
不确定它是否完美适合,但您可以考虑使用Service Fabric。您可以将您的作业/任务作为Service Fabric Actors运行,可以由中央服务进行管理。 这将涉及比您可能想要的更多自定义代码,但您可以实现非常复杂的方案而无需处理太多的基础结构。
我暂时发布了一个类似的解决方案: