温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用常用的架构设计模式之熔断器模式

发布时间:2021-10-26 11:29:09 来源:亿速云 阅读:198 作者:iii 栏目:开发技术

本篇内容主要讲解“如何使用常用的架构设计模式之熔断器模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用常用的架构设计模式之熔断器模式”吧!

熔断器

分布式系统在设计时应考虑到故障问题。目前微服务已经得到了广泛应用,这些服务大多依赖于其他远程服务。远程服务可能会因为网络、应用负载等各种原因而不能及时响应。在大多数情况下,通过重试应该可以解决这些问题。

但也有极端情况,比如服务降级或服务本身完全失效。在这种情况下,继续重试是没有意义的。因此熔断器模式就可以派上用场了。

如何使用常用的架构设计模式之熔断器模式

熔断器

上图展示了熔断器模式的实现,当服务1了解到在调用服务2时有连续的故障/超时时,服务1不再重试,而是跳过调用服务2,并立即返回响应。

有一些流行的开源库,比如 Netflix 的 Hystrix,可以用来非常容易地实现这种模式。

如果你使用的是 API 网关或像 Envoy 这样的 sidecar 代理,那么可以在代理级别本身实现。

注意:非常重要的一点是,当熔断器打开时,要有足够的日志记录和警报,以便跟踪这段时间内收到的请求,并让运维团队了解到这些信息。

你也可以在半开的情况下实现熔断器,以继续为能容忍服务降级的客户提供服务。

何时使用此模式

  • 当一个服务依赖另一个远程服务,并且在某些情况下很可能失败时;

  • 当一个服务有很强依赖性时(例如:主数据服务)。

何时不使用此模式

  • 当你在处理本地依赖关系时,熔断器可能会产生开销。

命令和查询责任隔离(CQRS)

CQRS 对于现代使用数据存储的应用来说是一个非常有用的模式。它的原理是将数据存储中的读(查询)和写/更新(命令)操作分开。

假设你正在构建一个应用程序,需要将数据存储在 MySQL/PostgreSQL  数据库中。大家都知道,当向数据存储中写入数据时,一个操作需要经过几个步骤,比如验证、模型和持久化,因此典型的写/更新操作比简单的读操作需要更长的时间。

当使用单个数据存储同时执行读和写操作,并且访问量很大时,那么可能会开始遭遇性能问题。

在这种情况下,CQRS 模式可能很有用。CQRS 模式建议使用单独的数据存储来进行读和写操作。

如何使用常用的架构设计模式之熔断器模式

CQRS

注:现在大多数 PaaS 数据库都提供了创建数据存储的读复制(Google Cloud SQL、Azure SQL DB、Amazon  RDS等)的能力,这有助于更容易实现CQRS。

如果你处理的是私有数据库,很多企业数据库也提供了这个功能。

注:如今有些人也喜欢为读复制使用速度快、性能好的 NoSQL 数据库,比如 MongoDB 和 Elasticsearch。

什么时候使用这种模式

  • 当你正在考虑扩展一个期望有大量读和写的应用程序时。

  • 当你想分别调整读和写操作的性能时

  • 当你的读操作可以接受接近实时或最终一致性时

何时不使用此模式

  • 当你正在构建一个常规的 CRUD 应用程序,并不是每次都有大量的读和写的时候

事件溯源(Event Sourcing)

事件溯源是一种有意思的设计模式,在这种模式下,域事件的序列被存储为日志,日志的聚合视图给出了应用程序的当前状态。

这种模式通常用于那些无法承受数据存储锁的系统,并且需要维护事件的审计和历史记录,例如,酒店/会议/座位预订等应用。

如何使用常用的架构设计模式之熔断器模式

事件溯源

比如一个酒店客房预订系统,其中用户需要预订或取消预订。在这里,你需要将预订和取消预订存储为一系列事件。在每次预订之前,通过查看事件日志,聚合视图显示可用房间。

注:大多数云服务提供商都支持消息服务,如 Google Pub/Sub、Azure Service Bus、AWS SQS  等。这些服务与强大的一致数据存储相结合,可以用来实现这个模式。

何时使用此模式

  • 常规的 CRUD 操作不能很好的满足需求时。

  • 通常适用于座位预定系统,如公交车、火车、会议、电影院等,或由购物车操作、支付等事件组成的电商系统。

  • 当需要强大的审计和事件回放来创建应用的当前和过去的状态时。

何时不使用此模式

  • 常规的 CRUD 操作足以满足用户需求时。

到此,相信大家对“如何使用常用的架构设计模式之熔断器模式”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI