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