Java之断路器模式

简介: 本文从断路器模式产生的时机,场景, 原理阐述!

什么是断路器模式

在分布式环境中,对远程资源和服务的调用可能会由于临时性故障(如网络连接缓慢、超时、资源过载或资源暂时不可用)而失败。 这些故障通常会在短时间内自行更正,而且,应该会准备一个可靠的云应用程序,通过重试模式这样的策略来处理它们。

但是,也可能遇到由于意外事件而导致的故障,且需要更长的时间来进行修复。 这些故障轻则导致部分连接中断,重则导致服务完全瘫痪。 这类情况下,让应用程序持续重试不可能成功的操作是毫无意义的。相反,应用程序应该快速认识到操作已失败,并相应地处理此故障。

此外,如果服务十分繁忙,那么系统一个部分的故障可能会导致连锁故障。 例如,调用服务的操作可以被配置为实现超时,并且在服务未能在此期间内响应时返回失败消息。 但是,此策略可能导致同一操作的许多并发请求受到阻止,直至超时期间到期。 这些阻止的请求可能占用了关键的系统资源,如内存、线程、数据库连接等。 因此,这些资源可能被耗尽,从而导致需要使用相同资源的系统其他不相关部分出现故障。 在这些情况下,更有益的做法便是让操作立即失败并只在服务可能成功时才尝试调用服务。 请注意,设置较短的超时可能有助于解决此问题,但为避免操作在大多数时间内失败,超时不应太短(即使对服务的请求最终会成功)。

为什么要用断路器模式

对远程资源和服务的调用由于意外事件发生了故障,并且该故障需要一段较长的时间来进行修复。这类情况下,让应用程序持续重试不可能成功的操作是毫无意义的。相反,应用程序应该快速认识到操作已失败,并相应地处理此故障。

怎么使用断路器模式

什么场景适用

由于意外事件而导致的故障,且需要更长的时间来进行修复。 这些故障轻则导致部分连接中断,重则导致服务完全瘫痪

什么场景不适用

对远程资源和服务的调用可能会由于临时性故障(如网络连接缓慢、超时、资源过载或资源暂时不可用)而失败。 这些故障通常会在短时间内自行更正

使用不当的后果

如果错误的使用断路器,导致一些可以通过重试机制恢复正常的异常,也被断路器阻断,会降低系统的稳定性。

如何正确使用

  • 和超时一起使用
  • 当断路器被触发时,一般意味着严重的情况发生,要记录,告警,并通知相关干系人。

实现原理

逻辑图.png

相关文章
|
4月前
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
83 11
|
5月前
|
消息中间件 Java
【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
84 2
|
4月前
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
5月前
|
Java
"揭秘Java IO三大模式:BIO、NIO、AIO背后的秘密!为何AIO成为高并发时代的宠儿,你的选择对了吗?"
【8月更文挑战第19天】在Java的IO编程中,BIO、NIO与AIO代表了三种不同的IO处理机制。BIO采用同步阻塞模型,每个连接需单独线程处理,适用于连接少且稳定的场景。NIO引入了非阻塞性质,利用Channel、Buffer与Selector实现多路复用,提升了效率与吞吐量。AIO则是真正的异步IO,在JDK 7中引入,通过回调或Future机制在IO操作完成后通知应用,适合高并发场景。选择合适的模型对构建高效网络应用至关重要。
102 2
|
5月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
5月前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
4月前
|
JSON Java UED
uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现
以上展示了使用Java结合DCloud的uni-push进行在线消息推送的基本步骤和实现方法。实际部署时,可能需要依据实际项目的规模,业务场景及用户基数进行必要的调整和优化,确保消息推送机制在保证用户体验的同时也满足业务需求。
253 0
|
9天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
11天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
11天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。