.NET和负载均衡器?

时间:2014-07-09 17:35:54

标签: c# .net caching web-applications load-balancing

我们目前正在运行一个Web应用程序,并且一直遇到性能问题。具体来说,用户正在等待#34;经常记录,一整天,几乎没有警告。我们还无法确定问题,但经过一些研究后我们认为它可能与我们的负载平衡配置和.net框架有关。我们想知道我们是否正在丢失导致缓存问题的应用程序中的会话。供应商声称这是我们配置负载均衡器,但我们已经尝试了很多东西,无法解决问题。

到目前为止,我们唯一的解决方案是让用户离开浏览器并重新打开浏览器并重新开始。不用说,他们对我们很生气。

系统规格(据我所知):

  1. 4包含应用程序的节点Web服务器群集。使用循环格式的负载均衡器。

  2. 应用程序正在使用.Net Framework v4.0.30319。

  3. SQL Server在不同的服务器上单独运行。

  4. 我检查了错误日志,我们经常收到这些类型的错误:

    1. ASP.NET会话已过期或无法找到

    2. 无法缓存密钥....

    3. 无法创建缓存工厂。请验证是否在此客户端上正确设置了Microsoft AppFabric。

    4. 感谢您的快速回复。我们只是客户而且没有写这个软件,所以请耐心等待,因为我仍在收集尽可能多的信息。为了给情况多一点颜色:

      1. 会话状态是MVC下的InProc,主网站以此sessionState模式运行=" Custom" customProvider =" AppFabricCacheSessionStoreProvider

      2. 我提到负载均衡器的唯一原因是因为我在论坛上看到了很多关于会话状态和"粘性"的信息。也就是说,在使用.net框架和负载均衡时维护会话。我们目前已将负载均衡器设置为根据用户发布cookie并且具有" sticky"设置已打开。

      3. 我们已将错误日志发送给供应商,但未收到大量回复,这就是我转向论坛寻求答案的原因。 我们一直在尝试识别破碎缓存的来源,但一直无法这样做。

      4. 4.用户表现非常参差不齐。总体而言,与先前版本相比,此版本的应用程序速度较慢。最令人担忧的是,用户偶尔会被“挂断”"执行基本任务(进行搜索,打开大型记录)时。 我忘了提到当系统生成其中一些错误消息时,它不会识别发生错误时登录的用户。以下是日志示例:

          

        异常消息

             

        ASP.NET会话已过期或无法找到

             

        登录为

             

        Stack Trace at   Microsoft.Reporting.WebForms.ViewerDataOperation..ctor()at   Microsoft.Reporting.WebForms.HttpHandler.GetHandler(字符串   operationType)at   Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext的   上下文)   System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)


        我们只是客户而且没有写这个软件,所以请耐心等待,因为我仍在收集尽可能多的信息。为了给情况多一点颜色:

        1. 会话状态是MVC下的InProc,主网站以此sessionState模式运行=" Custom" customProvider =" AppFabricCacheSessionStoreProvider
        2. 我提到负载均衡器的唯一原因是因为我在论坛上看到了很多关于会话状态和"粘性"的信息。也就是说,在使用.net框架和负载均衡时维护会话。我们目前设置的负载余额设置为根据用户发布cookie并且具有"粘性"设置已开启。
        3. 我们已将错误日志发送给供应商,但未收到大量回复,这就是我转向论坛寻求答案的原因。
        4. 我们一直在尝试识别已损坏缓存的来源,但一直无法这样做。
        5. 用户的表现非常不稳定。总体而言,与先前版本相比,此版本的应用程序速度较慢。最令人担忧的是,用户偶尔会被“挂断”"执行基本任务(进行搜索,打开大型记录)时。
        6. 我忘了提到当系统生成其中一些错误消息时,它不会识别发生错误时登录的用户。以下是日志示例:
        7.   

          异常消息

               

          ASP.NET会话已过期或无法找到

               

          登录为

               

          Stack Trace at   Microsoft.Reporting.WebForms.ViewerDataOperation..ctor()at   Microsoft.Reporting.WebForms.HttpHandler.GetHandler(字符串   operationType)at   Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext的   上下文)   System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)

2 个答案:

答案 0 :(得分:0)

对于#1,使用负载均衡器,如果用户碰巧被交换到另一台服务器,那么他们现有的会话就会丢失。

答案 1 :(得分:0)

会话错误告诉您最终未正确维护或过期。由于会话状态是自定义的,并且您已为其提供了自定义提供程序,因此如果正确保存在该自定义位置,请查看会话数据。

如果您可以将会话状态模式从自定义状态交换到状态服务器,则可以查明问题并向供应商指定更多信息。

您可以阅读以下链接,了解不同的会话状态模式。

http://msdn.microsoft.com/en-us/library/vstudio/ms178586(v=vs.100).aspx