当前位置: 首页 > 网络应用技术

在微服务下以下框架:hyStrix-go

时间:2023-03-07 23:23:00 网络应用技术

  与微服务架构一起,它像茶一样被推广,并将某些概念推向了我们。当它用于微服务时,这些词是密不可分的:高内部团聚和低耦合;微服务的架构设计的最终目的是实现这些单词。在微服务体系结构中,微服务是完成单个业务功能。每个微服务都可以独立发展。一个应用程序可能具有多个微服务组成。微观服务之间的数据相交可以通过远程呼叫完成。在微服务体系结构下,将形成这种依赖性:

  微服务A调用微服务C,D,微服务B依赖于微服务B,E,微服务D取决于服务F。这只是一个简单的小示例。实际业务中服务之间的依赖关系比这种方式更为复杂,如果微服务的呼叫响应时间太长或不可用,那么对上游服务的呼叫(由调整关系命名)将占据越来越多的系统资源,这将导致系统崩溃。这是微服务的积雪效应。

  为了解决微服务的Xueju效应,提出了使用保险丝机制来提供微服务链接的保护机制。每个人都应熟悉保险丝机制。电路的财政保险丝是保险丝机制。微服务中的保险丝机制是什么?

  当链接中的微服务不可用或响应太长时,将降级服务,然后熔化节点的微服务的呼叫,并迅速返回错误的响应信息。正常情况下,请恢复呼叫链接。

  在本文中,我们将介绍一个开源保险丝框架:HyStrix-Go。

  Hystrix是一个延迟和故障 - 耐受库,旨在隔离远程系统,服务和第三方服务的访问点,停止故障水平并在不可避免的错误的复杂分布式系统中实现弹性。为了允许GO程序员轻松地使用基于Java的HyStrix库的类似执行语义构建应用程序。

  HyStrix-Go确实在框中使用。它相对较简单。它主要分为两个步骤:

  调用方法也是调用方法,即参数不同,并根据您自己的代码样式进行选择。

  区别在于,该方法异步或同步处理呼叫方法中的异步过程,他们最终调用该方法。我们稍后分析。

  例如:我们在框架中添加了一个接口 - 级别的熔化中间件

  指令:WRK -T100 -C100 -D1S http://127.0.0.0.1:8080/api/ping/baidu

  操作结果:

  错误分析:

  只需分析上述示例:

  我想分析源代码,并且代码有点大,因此对该过程进行了分析,顺便说一下,我查看了一些核心代码。

  由于配置熔化规则是保险丝,因此必须有一个熔化规则。我们可以调用两种配置保险丝规则的方法,最终不会调用。这里没有特殊的逻辑。如果我们没有配置,则系统将使用默认的保险丝规则:

  配置规则如下:

  这些规则根据命令的名称存储在一个中。

  命令执行的执行主要可以调用四种方法,即:

  内部调用方法,内部调用是方法,该方法中的最终调用仍然是方法,但是在该方法中进行了同步逻辑:

  因为它们最终是呼叫的方法,所以我们执行分析方法的内部逻辑。该代码有点长,我们以逻辑进行分析:

  创建对象引入的数据结构:

  现场简介:

  先前代码的重点是方法。此步骤的目的是获得保险丝并使用动态加载方法。

  解释这些领域:

  实现和实施实现的逻辑将在稍后分别分析。

  定义方法和变量相关的方法和变量,因为我们的条件是最大并发控制,该条件使用令牌来控制流量。必须获得每个请求。LET采取此代码:

  使用条件变量协调通知您可以返回令牌。

  然后定义返回令牌的方法,调用返回令牌的方法。

  在报告事件执行事件的方法之前,我们还提到了。我们还提到,执行状态的事件将在我们的fuse.data set上报告。因此,定义了一种报告方法:

  输入公司1:执行应用程序逻辑 - 公司的主要目的是执行应用程序逻辑:

  总结这个Coroutine:

  打开校正二:同步Coroutine监视不正确性并首先查看代码:

  这种Coroutine的逻辑相对清楚,目的是取消并进行监视业务。

  命令执行过程的绘图摘要都通过代码分析。它看起来仍然有些混乱。最后,画一张图片以总结:

  我们分析上面的整个特定过程,然后分析一些核心点并分析它

  报告状态事件为每个级别设置一个默认统计控制器,以保存保险丝的所有状态,包括呼叫数,故障数,被拒绝时间等等。存储索引结构如下:

  使用该结构保存状态指示器以使用保存时间指示器。

  最终的监视报告全部依赖于实施,数据结构如下:

  信息结构报告:

  说了很多话,每个人仍然有些尴尬。实际图可以显示它们之间的关系:

  我们可以看到该类提供了一种方法。该方法的主要逻辑是监视状态事件,然后编写指标,因此整个报告过程就是这样:

  流量控制使用令牌算法进行交通控制。那些可以获得令牌的人可以执行。执行后,必须返回令牌。结构是特定的实现。该字段是每秒最大的并发值。

  这里还有一个报告指标。

  报告编号的逻辑与报告状态事件的逻辑相同。如果数据用于数据通信,则报告和返回令牌在方法中:

  主要逻辑两个步骤:

  我们最终分析了分析保险丝的更重要方法:我们将根据此方法确定是否可以执行它。接下来,让我们看一下这一判断的主要逻辑:

  内部正在调用,这两种方法:

  首先解释为什么有这种方法,并记住我们之前已经设置了保险丝规则。如果我们在打开熔化后尝试它,则该方法的目的是这样做:

  在这里,我们只看到打开的保险丝设置,但是保险丝的逻辑没有关闭,因为关闭保险丝的逻辑是在报告状态指标的方法中实现的。我们最终研究了实施:

  可视化的报告信息通过上述分析,我们知道数字事件的状态事件和执行。那么我们如何查看这些指标呢?

  设计师很久以前就想到了这个问题,因此他们可以检查报告信息,使用方法只需要在服务启动时添加以下代码:

  然后打开浏览器:http://127.0.0.0.1:81/hystrix-dashboard,让我们观察。

  这个故事终于结束了。保险丝机制的实现确实并不容易。要考虑的因素是所有方面。尤其是在微观服务结构下,融合机制是必不可少的。业务场景的保险丝机制值得我们体贴。本文中介绍的熔融框架仍然是完美的。这个出色的设计理念值得我们学习。

  文章中的代码已上传:github地址

  作者:Golang Dream Factory