none
高并发的情况下通过principalContext.ValidateCredentials验证域用户缓慢 RRS feed

  • 问题

  • 你好,我有一个ASP.NET的网站需要验证用户身份,所有的用户账户都是建立在微软活动目录中,两台域控制器,约50万多用户,一万组织单元。

    我有一个静态类,其中打的一个方法用来验证用户

    DateTime time0 = DateTime.Now;
                    PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, StsDomainName, StsAdRootOu + "," + StsDomainDn , ContextOptions.SimpleBind,StsAdUserName, StsAdUserPswd);
                    if (principalContext.ValidateCredentials(StsDomainShrotName +"\\" + userName, password,ContextOptions.SimpleBind))
                        result = "1";
                    else
                        result = "0";
                    log.Debug("验证耗时:" + (DateTime.Now - time0).TotalMilliseconds + "验证服务器:" + principalContext.ConnectedServer);

    在高并发的情况下,记录的日志发现用户身份验证花费的时间高达10多秒。

    如果将principalContext 定义为该静态类的静态成员,验证时间得到了改善,但是服务器的CPU使用率猛增,超过90%,有什么更好的办法来处理这种情况吗?


    ...

    2015年8月27日 5:37

全部回复

  • 你好,我有一个ASP.NET的网站需要验证用户身份,所有的用户账户都是建立在微软活动目录中,两台域控制器,约50万多用户,一万组织单元。

    我有一个静态类,其中打的一个方法用来验证用户

    DateTime time0 = DateTime.Now;
                    PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, StsDomainName, StsAdRootOu + "," + StsDomainDn , ContextOptions.SimpleBind,StsAdUserName, StsAdUserPswd);
                    if (principalContext.ValidateCredentials(StsDomainShrotName +"\\" + userName, password,ContextOptions.SimpleBind))
                        result = "1";
                    else
                        result = "0";
                    log.Debug("验证耗时:" + (DateTime.Now - time0).TotalMilliseconds + "验证服务器:" + principalContext.ConnectedServer);

    在高并发的情况下,记录的日志发现用户身份验证花费的时间高达10多秒。

    如果将principalContext 定义为该静态类的静态成员,验证时间得到了改善,但是服务器的CPU使用率猛增,超过90%,有什么更好的办法来处理这种情况吗?


    ...

    一个方法是升级硬件,增加CPU的运算能力。还有一个办法是建立分布式系统,用load balance来分配请求到多台计算机。一般来说用第二种方法比较多,采购新的硬件比提升硬件计算能力要便宜许多,但是建立分布式系统比较麻烦,对技术能力要求高。

    还有一个解决办法就是把验证平台迁移到云端,比如microsoft Azure。Azure自己就支持load balance,这样用户就不用采购和维护硬件,也不需要自己建立和维护load balance相关的技术,只要管好自己的业务代码就可以了。

    有兴趣可以通过下面的链接看下Azure, http://www.windowsazure.cn/home/features/identity/


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年8月28日 6:29
  • 我并不认为是硬件支撑的问题。

    我如果不把PrincipalContext作为一个静态成员,在搞并发的情况下,域控并没有出现高CPU,高内存占用的情况,但是验证出现了耗时过长,所以我想知道是什么原因造成这种情况,可以通过性能查看器查看那个来监视这种情况。在域控制器上是否是需要做什么设置来应对高并发的身份验证。


    ...

    2015年9月2日 2:14