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

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

    负载平衡与传输会话

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

      


你可能感兴趣的:(多线程,负载均衡,tcp,活动,扩展,WCF)