我应该在我的网络服务上使用持久连接吗?

时间:2014-08-12 16:06:10

标签: mysql asp.net web-services scalability persistent-connection

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

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

服务器访问数据库并给出一个带有数据的简单xml作为答案(xml约为0.2 kb到2kb)

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

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

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

在这种情况下,我应该保持此连接的持久性吗? 这有助于提高我的应用程序的可伸缩性吗? 我应该做些什么来使其更具可扩展性?

1 个答案:

答案 0 :(得分:-1)

几点:

  • 请记住Premature Optimization is the Root of All Evil。如果目前这不是性能瓶颈,我不会花太多时间在上面。

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

  • ADO.NET, the underlying database provider behind entity framework and most other db libraries on Windows, already performs connection pooling,可显着降低连接数据库的开销。在您的应用程序中重新实现该功能(通过尝试在应用程序层(而不是数据层)保持连接打开而实际上正在执行的操作)不太可能提高性能。

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