wcf并发性,实例限流,负载均衡,故障转移

 

wcf并发性,实例限流,负载均衡,故障转移

分类: wcf   137人阅读  评论(0)  收藏  举报

wcf    并发性

wcf服务缺省会保护并发性访问

并发性的模式

ConcurrencyMode枚举Singal(缺省)、Reentrant、Multiple

1、Single并发模式

      并发的请求不会被同一个服务实例处理

      当服务实例处理请求时,会对其加锁,其他的线程将会排队,除非超时

      请求结束时,锁被释放,队列在那个的下一个线程可以访问该对象

    Single并发与实例模型的关系

                   Single与PerCall

     对于PerCall服务,每个线程都将分配新的服务实例,不会产生并发性问题

     Single模式不会对吞吐量产生影响

      可以处理并发访问

                  Single并发与PerSession

      对于PerSession服务,保护服务实例不会受到多线程客户端的影响

      Single模式会对单一客户端的吞吐量产生影响

      多客户端可以并发访问

      可以处理并发访问

               Single并发与单件(Singleton)

      对于单件服务,保护服务实例不会受到任何并发访问的影响

      Single模式会对单件的吞吐量产生影响

      多线程和多客户端无法同时访问

       限制并发访问的处理

2、Reentrant并发模式

      Reentrant是可重入的单线程模式

      Reentrant模式主要用于当服务发起回调到客户端时的场景,当回调操作不是one-way操作时

      服务在推出时释放锁以发起回调操作,使得另一个线程能够获得锁,从回调返回的线程会进入队列

      Reentrant与不同的实例模型的关系

                    与PerCall的关系

      PerCall服务也可能需要重入

      在Single模式中,会产生死锁

       在Reentrant模式中,没有问题

                    与PerSession和SingleTons的关系

        PerSession服务允许多线程客户端访问服务实例

        SingleTon服务允许任何线程访问该服务实例

3、Multiple并发模式

      Multiple并发模式可以增加吞吐量,带有多线程客户端的PerSession服务,处理大量客户端的Singleton服务

      当服务实例处理请求是,不会自动加锁

      多线程同时访问服务实例,共享资源必须得到保护,需要自定义实现多线程保护

      自定义实现多线程的方式(信号量,加锁(lock),Monitor,Interlocked)


wcf 实例限流  

     允许多并发访问以增加服务的整体吞吐量

     吞吐量受到很多因素的影响:实例模式,并发模式,限流模式

      ServiceThrottleBehavior

     ServiceThrottleBehavior提供了很多吞吐量的控制的设置

                 MaxConcurrencyCalls:限制某一个服务的并发请求数量,缺省为16

                 MaxConcurrentInstances:限制服务实例的数量,缺省为int.MaxValue

                 MaxConcurrentSession:限制活动会话数量,包括传输,可靠性与安全会话和应用程序会话,缺省为10

      配置ServiceThrottleBehavior,宿主的配置文件中或者代码中

     限流与实例模型的关系

             限流与PerCall

      MaxConcurrencyCalls与MaxConcurrentInstances控制每个服务的吞吐量。

     MaxConcurrentSessions支持传输,可靠性,或者安全会话

          限流与PerSession

 MaxConcurrencyCalls控制吞吐量

MaxConcurrentInstances应该大于等于MaxConcurrentSessions,后者支持传输,可靠性或者安全会话

         限流与单件(Singleton)

   MaxConcurrencyCalls控制吞吐量

MaxConcurrentInstances与该模式无关

MaxConcurrentSessions依赖于对于传输,可靠性,安全以及应用程序会话的支持

  

负载均衡与故障转移

        跨服务主机的负载平衡能力会对可扩展性产生影响

       会话影响负载平衡,没有会话时,请求能够被直接分配到任何主机上,对于传输层会话,如TCP,需要sticky IP

      对于可靠性与安全会话,或者应用程序会话,需要sticky会话

      缺省情况下不支持故障转移

负载平衡与实例模型关系

     负载平衡与PerCall

    负载平衡与PerSession

    负载平衡与传输会话

负载平衡与可靠性或者安全性会话

       


你可能感兴趣的:(WCF)