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