【问题标题】:Simulating a slow DB connection模拟慢速数据库连接
【发布时间】:2011-08-16 11:27:53
【问题描述】:

我们正在开发一个胖客户端应用程序,它使用实体框架连接到 SQL Server 数据库。

我们显然是使用本地数据库进行开发的,但其中一项要求是,在运行具有高延迟(例如 200 毫秒)的 VPN 连接时,性能需要是可以接受的 *

我认为测试这个的一个好方法是注入 一些东西,这会给每个命令执行增加 200 毫秒的延迟,所以它会“感觉”就像真实的交易,并且可以轻松启用/禁用。

关于如何实现这一点的任何想法?

旁注:会采取不同的做法,使用面向服务的架构,在应用服务器上使用数据库访问和更粗粒度的接口,但这不是我的决定 em>

【问题讨论】:

  • 您如何与数据库对话?您使用的是内部服务、数据访问层对象、存储库还是什么?
  • @Lasse:一个精简的 dao/repository,它只委托给 DbSet 调用。但我不能只在那里引入延迟,因为许多数据访问都是由延迟加载引起的。

标签: sql-server performance entity-framework testing ado.net


【解决方案1】:

在数据库服务器和客户端之间放置一个Wanem 的实例。 Wanem 允许您模拟具有大量配置选项的广域网。不要忘记,除了相当大的延迟之外,您还必须考虑降低的网络速度。

这种设置的最大优势可能是您不必对测试机器进行任何更改。

【讨论】:

  • 听起来很有趣。我试试看!
  • 我终于安装了它,但我无法让它工作...... VM从路由器获取IP,但无法从任何地方访问......
  • 我也遇到了同样的问题,但是我使用 Wanem 命令“reset”手动设置 IP 地址而不是使用 DHCP,之后它就可以正常工作了。
【解决方案2】:

另一种方法是将您的数据库托管在虚拟机中,例如VMware,然后您可以调整虚拟机的网络性能,以便获得您想要测试的确切环境。

【讨论】:

  • 这需要完整安装 Windows + SQL Server,并将其分发给所有开发人员(更不用说潜在的许可问题),维护它...
  • 每个开发人员都需要两台虚拟机,一台用于您的应用程序,另一台用于 SQL 服务器。这不是一个不合理的要求。许可证不应该成为问题,因为无论如何您都需要每个许可证的 MSDN 许可证,理论上可以为单个开发人员提供无限的非生产用途。如果他们想在一个 MSDN 席位上,每个人可以有 10 个 VM。
【解决方案3】:

如果您正在寻找编程解决方案并且您正在使用 ObjectContext API,您也可以查看EF Provider wrappers。提供者包装器创建DbCommand 的实例。命令由DbCommandWrapper 包装,因此您可以将简单的Thread.Sleep 引入ExecuteScalarExecuteNonQueryExecuteDataReader。您只能在测试中使用提供程序包装器。

但我同意@fvu 提供的解决方案要好得多,并且也适用于 DbContext API。

【讨论】:

  • 是的,我正在使用 DbContext,所以我会尝试 Wanem。
【解决方案4】:

为每个开发人员购买一台小型服务器(比如带有硬件 raid1 和 16G 内存的机架式单元;如果您有多个开发人员,请使用刀片服务器)。无论如何,他们真的应该有一个用于实验目的。将您最喜欢的虚拟化平台放在上面(例如 Vmware)。让每个开发人员在此环境中运行多个 VM,一个用于 DB,一个用于应用程序,以及您需要的任何其他 VM。然后,您可以根据需要添加框来模拟应用服务器和数据库之间的延迟。

这不是不合理的,它不再需要任何软件许可证;无论如何,每个开发人员都需要 MSDN 订阅许可证才能在 Microsoft 世界中做任何事情。此类订阅允许您运行几乎任意的 Microsoft 软件以供个人非生产用途使用。

为开发人员提供一个体面的开发环境并不昂贵,而且在我看来是值得的。


当然,开发人员不应该在他们的正常开发平台上进行性能测试。性能测试需要一个专用的基于硬件的环境,该环境的配置与生产环境相同。

【讨论】:

  • 听起来不错,但在大多数公司,这只是童话。我曾在几家知名公司工作,但我们从未获得过像样的开发环境。实际上,我 90% 的开发工作都是在笔记本电脑或在笔记本电脑上运行的虚拟电脑上完成的。目前我第一次在公司工作,我们有刀片可用于测试和一些开发,但可以说这是非常特殊的情况......
  • 对...除了这不是性能测试:它只是有一个与生产环境相似的环境,以便及早发现性能问题.而且我们在预算紧张的情况下与离岸承包商(我是其中之一)合作,所以不幸的是,这一切都不可行。
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2011-03-14
  • 2011-04-01
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
相关资源
最近更新 更多