首页 > 其他分享 >什么是微服务中的断路器设计模式?如何实施?

什么是微服务中的断路器设计模式?如何实施?

时间:2023-05-31 19:33:24浏览次数:38  
标签:服务 Hystrix 模式 断路器 设计模式 httpClient

大家好,微服务设计模式是 Java 开发人员需要学习的非常重要的概念,不仅是为了创建一个健壮的、可扩展的、高性能的微服务架构,也是为了在 Java 开发人员面试中取得好成绩。过去,我分享了几种微服务设计模式,如 eEvent Sourcing、 SAGA、Database Per Microservices、CQRS、 API Gateway,还分享了设计微服务的最佳实践 ,在本文中,我将讨论断路器设计模式,以及如何使用 Spring Cloud Framework 在 Java 中实现。这不仅仅是一个重要的微服务模式 还有一个流行的微服务问题,我在前面关于15 个微服务面试问题的文章中也提到过。如果您还没有阅读那篇文章,我建议您阅读它,特别是如果您正在准备 Java 和微服务面试。

什么是微服务中的断路器设计模式?如何实施?

在微服务架构的世界中,容错性和弹性是需要考虑的两个最重要的因素。断路器设计模式是实现这一目标的重要工具。在本文中,我们将探讨断路器模式是什么、它是如何工作的,以及如何在微服务中实现它。

什么是断路器设计模式?

断路器模式是软件工程中用于处理分布式系统故障的设计模式。它用于检测和处理服务之间通信中的故障,防止它们级联并造成进一步的损害。

什么是微服务中的断路器设计模式?如何实施?_微服务

Circuit Breaker 模式的工作原理是将潜在的危险或错误操作包装在断路器对象中。断路器旨在检测操作何时失败或完成时间太长。

一旦达到阈值,断路器将“跳闸”并停止执行操作,而是返回一个预先配置的回退值。这有助于阻止错误操作在系统中级联,从而防止进一步损坏。

什么是断路器设计模式?

什么是微服务中的断路器设计模式?如何实施?

断路器模式具有三种状态:关闭、打开和半打开。

关闭

在关闭状态下,断路器允许请求流过并正常执行操作。

打开

在打开状态下,断路器返回一个预先配置的回退值,而不是执行操作。

半开

在半开状态下,断路器允许有限数量的请求通过以测试操作是否正常运行。如果这些请求成功,断路器将返回到关闭状态。如果它们失败,断路器将返回打开状态。

什么是微服务中的断路器设计模式?如何实施?_微服务_02

如何在微服务中实现断路器设计模式?

有多种框架和库可用于在微服务中实现断路器模式。在本节中,我们将探讨如何使用 Netflix Hystrix 来实现断路器模式,Netflix Hystrix 是一种广泛用于在微服务中实现断路器的库。

第一步:添加Hystrix依赖

第一步是将 Hystrix 依赖项添加到您的微服务项目中。如果您使用的是 Maven,则可以将以下依赖项添加到 pom.xml 文件中:

<dependency>

<groupId> com.netflix.hystrix </groupId>

<artifactId> hystrix-core </artifactId>

<version> 1.5.18 </version>

</dependency>

第 2 步:创建 Hystrix 命令

接下来,您需要创建一个 Hystrix 命令来代表您要执行的操作。您可以通过扩展 HystrixCommand 类并使用您的逻辑覆盖 run() 方法来实现这一点。run ()方法应该返回操作的结果。

下面是一个使用 Apache HttpClient 库执行 HTTP 请求的 Hystrix 命令示例:

公共类 HttpCommand 扩展 HystrixCommand<String> {

私有 最终 HttpClient httpClient;

私有 最终 HttpUriRequest请求;

public HttpCommand ( HttpClient httpClient, HttpUriRequest请求) {

super ( HystrixCommandGroupKey . Factory .asKey( "HttpGroup" ));

这个.httpClient = httpClient;

这个.request = 请求;

}

@Override

protected String run() throws Exception {

HttpResponse response = httpClient.execute(request);

字符串结果 = EntityUtils .toString(response.getEntity());

返回结果;

}

}

第 3 步:配置 Hystrix 断路器

接下来,您需要为您的 Hystrix 命令配置 Hystrix 断路器。您可以通过创建 HystrixCommandProperties 对象并设置相关属性来完成此操作。

下面是使用以下属性配置 Hystrix 断路器的示例:

HystrixCommandProperties .Setter ()

.withCircuitBreakerErrorThresholdPercentage ( 50 )

.withCircuitBreakerRequestVolumeThreshold ( 10 )

.withCircuitBreakerSleepWindowInMilliseconds ( 5000 )

.withExecutionTimeoutEnabled (false));

第 4 步:执行 Hystrix 命令

最后,您可以通过创建命令实例并调用execute()方法来执行 Hystrix 命令。如果成功,此方法将返回操作结果,如果断路器打开,则返回回退值。

下面是执行 HttpCommand 的示例:

HttpClient httpClient = HttpClients.createDefault();

HttpGet request = new HttpGet( "https://jsonplaceholder.typicode.com/posts/1" );

HttpCommand 命令 = new HttpCommand(httpClient,请求);

字符串结果 = 命令。执行();

而且,这是一个很好的序列图,它解释了断路器模式在微服务架构中的工作原理:

什么是微服务中的断路器设计模式?如何实施?_断路器_03

什么是微服务中的断路器设计模式? 如何实施?

使用断路器设计模式的好处

在您的微服务架构中实施断路器设计模式可以提供多种好处,例如:

容错

断路器模式有助于防止故障级联并在分布式系统中造成进一步损坏。

弹性

该模式允许系统继续运行,即使一个或多个服务出现故障或遇到问题。

提高性能

该模式减少了等待缓慢或错误操作完成所花费的时间,从而提高了整体系统性能。

减少停机时间

通过以更有效和及时的方式处理故障,断路器模式可以减少系统停机时间并提高可用性。

更好的用户体验

该模式有助于确保用户拥有无缝体验,即使系统的某些部分无法正常运行。

实施断路器设计模式的最佳实践

在微服务中实现断路器模式时,您应该遵循几个最佳实践以确保正确实现该模式。这些包括:

1.监控

必须监控系统的性能和断路器模式本身,以确保其正常运行。

2.配置阈值

应根据系统的特定要求适当设置断路器何时应跳闸以及何时应返回闭合状态的阈值。

3. 回退机制

回退机制应该仔细设计以确保它们向用户提供有意义和准确的信息。

4. 测试

断路器模式应该在各种场景中进行彻底测试,以确保它按预期工作。

5. Circuit Breaker 库

使用成熟可靠的 Circuit Breaker 库,如 Netflix Hystrix,可以简化实施过程并减少出错的可能性。

什么是微服务中的断路器设计模式?如何实施?_微服务_04

结论

断路器 设计模式是微服务架构领域中必不可少的工具。它有助于处理分布式系统中的故障,防止它们级联并造成进一步的破坏。使用 Netflix Hystrix 等框架实现断路器模式相对简单,可以为您的微服务架构带来显着优势。

标签:服务,Hystrix,模式,断路器,设计模式,httpClient
From: https://blog.51cto.com/u_15739596/6389089

相关文章

  • 【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client
    问题描述在AzureKubernetes服务中,创建一个InternalLoadBalancer服务,使用以下yaml内容:internallb.yamlapiVersion:v1kind:Servicemetadata:name:ilb-myappannotations:service.beta.kubernetes.io/azure-load-balancer-internal:"true"spec:type:L......
  • 恒创科技:远程进入服务器界面黑屏如何处理? 
    ​远程登录服务器出现黑屏是很常见的问题,可能是由于多种原因引起的。但不管是哪种原因,当远程连接成功,进入桌面显示黑屏都会让用户感到困扰,无法正常使用服务器。下面我们将为您介绍一些常见的解决方法。1.重启远程桌面服务当远程进入服务器界面黑屏时,不要关闭窗口,可......
  • 在 nginx 服务器上发布vue项目 步骤与配置
    1.在vscode中使用yarnbuild:prod进行vue项目的发布2.进入发布文件3.下载nginx的windows版https://nginx.org/en/download.html4.将发布好的文件放入nginx解压后的html文件夹中5.修改nginx的配置文件打开nginx的配置文件配置完成使用命令打开nginx至此发布......
  • 玩转服务器之网站篇:新手使用WordPress搭建博客和静态网站部署
    静态网站部署和WordPress搭建博客都是网站运营中常见的工作。静态网站是一种不需要服务器端脚本的网站形式,通常使用HTML、CSS和JavaScript等静态资源进行构建和显示。而WordPress是一款流行的博客系统,可以帮助用户快速搭建博客网站。在之前的玩转服务器系列文章里,我们介绍了如何构......
  • 服务质量_QOS【管制和拥塞避免机制】
    服务质量_QOS【标记和队列】:https://www.cnblogs.com/good-study/p/16160592.html1.1区分服务模型配置步骤:分类classfication/标记Marking管制Policing/整形Shaping      限速拥塞避免机制REDWRED  防止尾丢弃队列Queuing:PQ、CQ、WFQ、FIFO、CB、WFQ......
  • golang实现设计模式之抽象工厂模式总结-代码、优缺点、适用场景
    抽象工厂模式也是一种创建型的设计模式,其是在工厂模式的基础上实现更高程度的内聚。我们知道在工厂模式中,一种产品类就需要新建个对应的工厂类生成产品的实例,这会有什么问题呢?虽然工厂模式解决了简单工厂模式不好扩展的问题,实现了OCP,但一种产品就需要新建一个工厂类,比如有10000种......
  • 一个由于不同微服务框架混搭导致BeanPostProcessors处理bean异常导致的问题
        前天到昨天晚上,某开发报告了一个问题,我们的一个应用程序接入了腾讯的TSF微服务框架后,使用feign访问接口,会导致token丢失,无法解决。    大体介绍下项目情况,我们的应用使用了某第三方微服务框架,不是源生的springcloud或springcloudalibaba框架,第三方厂家基于s......
  • docker json日志把服务器磁盘占满,日志清理
    定时任务crontab-l03***root/etc/init.d/clean-docker-log.sh103***root/etc/init.d/cleandocker.sh-脚本[[email protected]]#catclean-docker-log.sh#!/bin/shecho"====================startcleandockercontainerslogs=============......
  • 浪潮信息联合中国信通院发布《绿色算力白皮书》,推出业界首个服务器碳排放评测标准
    5月30日,浪潮信息“智算 开新局·创新机”全国巡展济南站开幕。会上,浪潮信息与中国信息通信研究院(以下简称中国信通院)联合发布了《绿色算力白皮书》(以下简称《白皮书》),对绿色算力的内涵和关键技术、政策背景、必要性、标准与评测方法、发展趋势和建议等予以全面阐释。这是业界首个......
  • RabbitMQ在Windows下设置服务启动
    1.管理员模式运行  cmd 2.进入RabbitMQ安装目录下的sbin目录   输入命令: cdrabbitMQ的sbin路径,进入sbin目录输入命令:rabbitmq-service.batinstall进入服务,开启rabbitMQ服务 ......