高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(下)

简介: 高可用架构(10)-Hystrix隔离策略、Command及资源池大小控制(下)

3 command线程池

ThreadPoolKey代表了一个HystrixThreadPool,用来进行统一监控,统计,缓存

4.png

默认的threadpool key就是command group名称

5.png

每个command都会跟它的ThreadPoolKey对应的ThreadPool绑定

如果不想直接用command group,也可以手动设置thread pool name

public CommandHelloWorld(String name) {
    super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
            .andCommandKey(HystrixCommandKey.Factory.asKey("HelloWorld"))
            .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("HelloWorldPool")));
    this.name = name;
}

command threadpool => command group => command key

command key

6.png

  • 代表了一类command,代表底层的依赖服务的一个接口
  • command group

7.png

代表了某一个底层的依赖服务,合理,一个依赖服务可能会暴露出来多个接口,每个接口就是一个command key


command group

在逻辑上去组织起来一堆command key的调用,统计信息,成功次数,timeout超时次数,失败次数,可以看到某一个服务整体的一些访问情况

推荐是根据一个服务去划分出一个线程池,command key默认都是属于同一个线程池的


比如说你以一个服务为粒度,估算出来这个服务每秒的所有接口加起来的整体QPS在100左右

你调用那个服务的当前服务,部署了10个服务实例,每个服务实例上,其实用这个command group对应这个服务,给一个线程池,量大概在10个左右,就可以了,你对整个服务的整体的访问QPS大概在每秒100左右


一般来说,command group是用来在逻辑上组合一堆command的


举个例子,对于一个服务中的某个功能模块来说,希望将这个功能模块内的所有command放在一个group中,那么在监控和报警的时候可以放一起看

command group,对应了一个服务,但是这个服务暴露出来的几个接口,访问量很不一样,差异非常之大

你可能就希望在这个服务command group内部,包含的对应多个接口的command key,做一些细粒度的资源隔离

对同一个服务的不同接口,都使用不同的线程池

command key -> command group
command key -> 自己的threadpool key

逻辑上来说,多个command key属于一个command group,在做统计的时候,会放在一起统计


每个command key有自己的线程池,每个接口有自己的线程池,去做资源隔离和限流


但对于thread pool资源隔离来说,可能是希望能够拆分的更加一致一些,比如在一个功能模块内,对不同的请求可以使用不同的thread pool


command group一般来说,可以是对应一个服务,多个command key对应这个服务的多个接口,多个接口的调用共享同一个线程池


如果说你的command key,要用自己的线程池,可以定义自己的threadpool key,就ok了


4 coreSize

设置线程池的大小,默认是10

HystrixThreadPoolProperties.Setter()
               .withCoreSize(int value)

一般来说,用这个默认的10个线程大小就够了


5 queueSizeRejectionThreshold

控制queue满后reject的threshold,因为maxQueueSize不允许热修改,因此提供这个参数可以热修改,控制队列的最大值


HystrixCommand在提交到线程池之前,其实会先进入一个队列中,这个队列满了之后,才会reject


默认值是5

HystrixThreadPoolProperties.Setter()
   .withQueueSizeRejectionThreshold(int value)

线程池+queue的工作原理

8.png

6isolation.semaphore.maxConcurrentRequests

设置使用SEMAPHORE隔离策略的时候,允许访问的最大并发量,超过这个最大并发量,请求直接被reject


这个并发量的设置,跟线程池大小的设置,应该是类似的

但是基于信号量的话,性能会好很多,而且hystrix框架本身的开销会小很多


默认值是10,设置的小一些,否则因为信号量是基于调用线程去执行command的,而且不能从timeout中抽离,因此一旦设置的太大,而且有延时发生,可能瞬间导致tomcat本身的线程资源本占满

9.png

目录
相关文章
|
18天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
18天前
|
运维 负载均衡 监控
深入探索微服务架构的核心要素与实践策略
在当今软件开发领域,微服务架构已成为构建灵活、可扩展企业级应用的首选模式。本文旨在剖析微服务架构的设计理念,通过实例阐述其核心组件如服务注册与发现、配置管理、熔断机制等如何协同工作,以提升系统的敏捷性和维护性。同时,探讨了在实践中应对分布式系统复杂性的最佳策略,包括负载均衡、服务监控和日志聚合等关键技术,旨在为后端开发者提供一套完整的微服务实施指南。
33 1
|
16天前
|
监控 安全 API
深入探索微服务架构的核心要素与实践策略
在当今软件开发领域,微服务架构以其独特的优势——高度的模块化、灵活性以及可扩展性,已经成为构建复杂、大型应用系统的不二选择。不同于传统的单体架构,它能够显著提升开发效率,促进技术生态的多样化发展。本文将从微服务架构的核心特性出发,探讨其设计理念、关键技术及在实践中的应用策略,旨在为后端开发者提供一份详尽的指南,帮助他们理解和掌握这一现代软件架构的精髓。
|
18天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
22天前
|
缓存 算法 安全
深入探索现代操作系统架构及其优化策略
本文旨在探讨现代操作系统的架构设计及其在性能优化上的关键技术。通过对操作系统的核心组件和调度机制的分析,揭示其背后的设计理念与技术挑战,同时提出针对性的优化措施,以提升系统效率和用户体验。
|
2月前
|
Kubernetes API 持续交付
构建高效微服务架构:策略与实践
【8月更文挑战第30天】 在当前软件开发领域,微服务架构已经成为促进系统灵活性、扩展性及维护性的关键设计哲学。本文将深入探讨构建高效微服务架构的实用策略和具体实践,旨在为开发者提供一套系统的方法论,以优化其服务的分解、部署与管理过程。我们将从微服务的核心优势出发,分析设计原则,并结合实际案例来展示如何克服常见的挑战。
|
2月前
|
运维 监控 关系型数据库
【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
|
2月前
|
设计模式 关系型数据库 持续交付
构建高效可靠的微服务架构:策略与实践
【7月更文挑战第60天】在现代软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发者将应用程序拆分成一组小型、松散耦合的服务。本文将深入探讨如何构建一个高效且可靠的微服务系统,涵盖关键设计原则、技术选型以及实践中的注意事项。我们将通过分析具体案例来揭示微服务的优势与挑战,并提供实用的解决方案和最佳实践。
|
2月前
|
消息中间件 Java 网络架构
AMQP与微服务架构的集成策略
【8月更文第28天】在微服务架构中,各个服务通常通过HTTP/REST、gRPC等协议进行交互。虽然这些方法在很多场景下工作得很好,但在需要高并发、低延迟或需要处理大量消息的情况下,传统的同步调用方式可能无法满足需求。此时,AMQP作为异步通信的一种标准协议,可以提供一种更为灵活和高效的消息传递机制。
26 1
|
19天前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
下一篇
无影云桌面