当前位置: 首页 > 图灵资讯 > 技术篇> 什么是微服务中的断路器设计模式?如何实施?

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

来源:图灵教育
时间:2023-06-01 09:43:15

大家好,微服务设计模式是 Java 开发人员需要学习的一个非常重要的概念,不仅是为了创建一个强大、可扩展、高性能的微服务架构,也是为了 Java 开发人员在面试中取得了良好的成绩。过去,我分享了几种微服务设计模式,比如 eEvent Sourcing、 SAGA、Database Per Microservices、CQRS、 API Gateway,还分享了设计微服务的最佳实践 ,本文将讨论断路器的设计模式,以及如何使用 Spring Cloud Framework 在 Java 中实现。这不仅仅是一种重要的微服务模式 还有一个流行的微服务问题,我在前面关于15 文章还提到了微服务面试的问题。这不仅仅是一种重要的微服务模式 还有一个流行的微服务问题,我在前面关于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, Htttpurirequest请求) {

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 实现断路器模式的框架相对简单,可以给您的微服务架构带来显著的优势。