• Hystrix资源隔离


    线程池隔离

      一个服务有多个接口,在提供服务时,使用了线程池,多个接口共用这一个线程池,如下图所示:

       

      那么当某个接口处理效率缓慢,当对该接口的请求量上升时,由于该接口处理效率慢,对于该接口的请求就会占用公用的连接池,并且如果长时间没有释放连接,就会造成其他接口没有线程池来处理请求,于是就会出现因为一个接口的问题,导致整个服务的多个接口都不可用。

      为了解决这种问题,Hystrix提供了线程池隔离,可以为每个接口设置单独的线程池,当该接口的线程池被占满时,只是该接口收到影响,而不会对其他接口造成影响,如下图所示:

       

      另外,可以让一部分service共用线程池的同时,另一部分service做线程池隔离,如下图:

       

    信号量隔离

      信号量隔离的方式,和线程池隔离的方式相似,如下图所示:

      

      信号量隔离的原理:会设置一个信号量值(计数器),当一个接收到一个请求后,信号量减1;当请求处理完后,信号量加1;当信号量减为0的时候,表示不能再接受请求,则会拒绝处理。

    线程隔离与信号量隔离的区别

    线程池隔离

      优点:

        1.可以设置coreSize和MaxQueueSize,也就是说,支持排队;

        2.可以设置调用超时时间;

        3.支持异步调用;

      缺点:

        1.创建线程池会产生额外的开销,且开销比信号量大;

      适用场景:

        1.调用其他服务(不受信的服务,不能保证其他服务的服务质量);

        2.适合调用的服务比较少的情况(扇出少),如果比较多,则线程池也要加大;

    信号量隔离

      优点:

        1.轻量,开销可以忽略不计;

      缺点:

        1.不支持任务排队,只要信号量减为0,立即就会被拒绝;

        2.不支持设置超时,在执行过程中,只能等待调用拿到结果或者抛出异常,操作才会继续;

        3.不支持异步调用;

      适用场景:

        1.网关(扇出多);

        2.受信服务(被调用服务能够保证不超时);

        3.高频高速调用(比如查cache这种操作,基本能保证在很多时间内响应)

  • 相关阅读:
    知多少进程?
    提高.NET应用性能
    战术设计DDD
    win7下exe文件设置为开机启动
    CQRS项目
    DDD总览
    ML.Net Model Builder
    MySQL主主复制搭建教程收集(待实践)
    MySQL主从复制搭建教程收集(待实践)
    MySQL集群方案收集
  • 原文地址:https://www.cnblogs.com/-beyond/p/12856421.html
Copyright © 2020-2023  润新知