1

我有一个用 asp net mvc4 编码的 WebService,它在云服务器中运行。这个云服务器有一个 IIS 8 和一个 mysql 服务器。此服务器专用于此应用程序。

我对此服务器的请求越来越多。每个请求都需要连接到数据库(70% 的查询是简单的“选择”,25% 是与 2 或 3 个表的连接,5% 是插入)。

服务器访问数据库并给出一个简单的 xml 作为答案,其中包含获取的数据(xml 大约为 0.2 kb 到 2kb)

Web 服务始终在服务器中运行。

对于每个请求,我的网络服务器都会打开一个数据库连接(存储在同一台机器上),操作,关闭连接,然后用 xml 响应。

现在它每分钟只发生几次。我的连接器类是单例。

在这种情况下,我应该让这个连接持久吗?这将有助于提高我的应用程序的可扩展性吗?关于我应该怎么做才能使其更具可扩展性的任何建议?

4

1 回答 1

0

几点:

  • 请记住,过早的优化是万恶之源。如果目前这不是性能瓶颈,我不会花太多时间在上面。

  • 单例在多线程应用程序中非常非常糟糕。它们代表了可扩展性的对立面。在高流量应用程序中,您会看到竞争条件以及其他问题。访问静态对象或方法可能涉及会严重降低性能的上下文切换/修改。我已经看到应用程序通过摆脱单例和其他静态对象并用非单例替换它们(“多吨?”:/)获得了 10 倍的加速

  • ADO.NET 是实体框架和 Windows 上大多数其他数据库库背后的底层数据库提供程序,已经执行连接池,这显着降低了连接到数据库的开销。在您的应用程序中重新实现该功能(这实际上是您通过尝试在应用程序层而不是数据层保持连接打开的实际操作)不太可能提高应用程序的性能。

  • WCF本质上支持持久连接,因此如果您确实需要此功能,您可能需要考虑在 WCF 中实现 Web 服务,而不是 RESTful 或 SOAP (asmx) 服务。然而,我觉得 WCF 是一种相当繁重的 Web 服务实现方法,并且(在我看来)会导致不必要的复杂性。

于 2014-08-12T16:21:13.900 回答