Jef*_*eff 5 sql ssis sql-server distributed-computing
背景:我们公司托管 SaaS DSS 应用程序,客户每天和/或每周向我们提供数据,我们对这些数据进行处理并合并到他们现有的数据库中。在工作时间内,服务器中的负载非常小,因为大多数用户通过网站运行简单的预定义查询,或者运行主要访问 SSAS OLAP 多维数据集的钻取报告。
我管理 IT 运营团队,到目前为止,这给我们带来了一个有趣的“扩展”问题。对于我们每日刷新的客户端来说,服务器仅在晚上“忙碌”约 4-6 小时。对于我们每周刷新的客户来说,服务器每周“繁忙”的时间可能只有 8-10 个小时!
我们已尽力使用一些简单的方法来分配负载,将日常客户端均匀分布在服务器之间,这样我们就不会尝试在夜间连续处理日常客户端。但从长远来看,这种扩展策略会带来两个值得注意的问题。首先,它将消耗大量长时间闲置的硬件。其次,需要大量的生产支持开销来基本上“调度”ETL,以便它们不会重叠,并且在客户端/调度超出特定服务器上的资源或分配的时隙时移动客户端/调度。
正如标题所暗示的,我们尝试过的一个选项是并行运行多个 SSIS 包,但在大多数情况下,这会产生非常不一致的结果。最常见的故障是 DTExec、SQL 和 SSAS 争夺物理内存并引发内存不足错误,以及 ETL 的运行时间比预期长 3、4、5 倍。因此,从我迄今为止的实践经验来看,在同一硬件上运行多个 ETL 包似乎不是一个好主意,但我不能成为第一个不想围绕手动调度和顺序扩展多个 ETL 的人加工。
我们考虑过的一种选择是虚拟化服务器,这显然不会为您提供任何额外的资源,而是将资源争用转移到虚拟机管理程序上,(根据我的经验)管理程序似乎可以同时管理 CPU/RAM/磁盘 I/O这比让 DTExec、SQL 和 SSAS 在 Windows 中展开竞争更加优雅。
向论坛提出的问题:所以我向论坛提出的问题是,我们是否在这里遗漏了一些明显的东西?是否有工具可以帮助管理在同一硬件上运行多个 SSIS 包?如果我们不是在同一台机器上运行 DTExec、SQL 和 SSAS(每台机器都运行该配置),而是在三台机器上运行,SSIS 在一台机器上运行,SQL 在另一台机器上运行,那么在并行执行方面会更“高效”吗? ,第三个是 SSAS?显然,只有当我们能够处理超过我们能够在机器上独立处理的三个 ETL 时,这才有意义。
我们考虑的另一种选择是完全重新构建我们的 SSIS 包,为所有客户端提供一个“主”包,尝试根据服务器在 CPU/内存/磁盘利用率方面的“繁忙”程度智能地选择服务器,但这将是一项艰巨的努力,而且我们似乎正在尝试重新发明一些你认为有人会出售的东西(尽管我没有运气找到它)。
总而言之,我们是否缺少一个明显的解决方案,是否有人知道是否有任何工具(免费或购买,无关紧要)可以促进在多个服务器上并行运行多个 SSIS ETL 包?(我称之为“基于队列和节点”的系统,但这不是官方术语)。最终,VMWare 的分布式资源调度程序解决了这个问题,因为您只需在每个虚拟机上运行一致数量的客户端,您知道这些客户端永远不会在调度方面发生冲突,然后由 VMWare 来移动虚拟机以平衡硬件使用。我绝对不反对使用 VMWare 来执行此操作,但由于我们是 100% Microsoft 应用程序堆栈,似乎有人会通过检查资源在应用程序层而不是虚拟机管理程序层解决此问题操作系统、SQL、SSAS 级别的利用率。
我愿意接受任何有关此问题的讨论,并记住没有任何建议是太疯狂或激进的!:-) 目前,VMWare 是我们发现的摆脱“手动”平衡资源的唯一选择,因此任何能让我们继续使用纯 Microsoft 堆栈的建议都很棒。
多谢你们,
尝试使用平衡数据分发器组件:\xe2\x80\x9cBalanced Data Distributor\xe2\x80\x9d for SSIS。
\n您还可以使用服务代理(或其他消息队列)和侦听器包自行开发一个解决方案,这些侦听器包等待工作并分派到安装了 SSIS 的一组机器中的工作程序包。
\n| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |