【go-micro实践】hystrix熔断及dashboard展示

gRPC 视频课程笔记06 gin 调用rpc && Hystrix P18 熔断器Hystrix 下面的go 使用Hystrix的例子 P18 Hystrix降级实现 先实现一个降级后的函数,简单处理返回结果 然后降级fallback函数调用这段降级处理逻辑,如下图 P19 整合Hystrix 到 go-micro里面 熔断实现放到wrapper中 然后main函数调用wrapper的实现 P23 熔断器的参数配置 P25 微服务工具箱 ... 阅读详情

github完整代码地址
个人博客

hystrix-go

hystrix是Netflix开源的一个JAVA项目,不过GitHub也有golang的实现版本hystrix-go

hystrix-dashboard

hystrix并没有自带一个仪表盘,无法直观的查看接口的健康状况。所以,我们采用GitHub的一个开源实现hystrix-dashboard。

docker run --name hystrix-dashboard -d -p 8081:9002 mlabouardy/hystrix-dashboard:latest

micro API网关插件

关于hystrix的工作原理,可以查阅相关资料,这里只讲解如何封装插件在micro API网关中使用。

err := hystrix.Do("my_command", func() error {
	// talk to other services
	return nil
}, nil)

使用hystrix.Do() 同步API,第一个参数是command, 应该是与当前请求一一对应的一个名称,如入“GET-/test”。第二个参数传入一个函数,函数包含我我们自己的错误逻辑,当请求失败时应该返回error。hystrix会根据我们的失败率执行熔断策略。

封装Handler

// BreakerWrapper hystrix breaker
func BreakerWrapper(h http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		name := r.Method + "-" + r.RequestURI
		log.Println(name)
		err := hystrix.Do(name, func() error {
			sct := &status_code.StatusCodeTracker{ResponseWriter: w, Status: http.StatusOK}
			h.ServeHTTP(sct.WrappedResponseWriter(), r)

			if sct.Status >= http.StatusBadRequest {
				str := fmt.Sprintf("status code %d", sct.Status)
				log.Println(str)
				return errors.New(str)
			}
			return nil
		}, nil)
		if err != nil {
			log.Println("hystrix breaker err: ", err)
			return
		}
	})
}
...
// 注册插件
plugin.Register(plugin.NewPlugin(
		plugin.WithName("breaker"),
		plugin.WithHandler(
			hystrix.BreakerWrapper,
		),
	))
...

在 hystrix.Do 中,首先执行 h.ServeHTTP,该函数返回后,即请求执行完成。我们判断HTTP状态码,如果大于StatusBadRequest,则认为这次请求失败,返回一个错误,hystrix会收集错误,如果错误率达到某个阀值,就会触发断路器。
在做实验时,可以直接在main函数里设置hystrix的几个默认配置参数,方便看效果

// hystrix-go/hystrix/settings.go

	// DefaultTimeout is how long to wait for command to complete, in milliseconds
	DefaultTimeout = 1000
	// DefaultMaxConcurrent is how many commands of the same type can run at the same time
	DefaultMaxConcurrent = 10
	// DefaultVolumeThreshold is the minimum number of requests needed before a circuit can be tripped due to health
	DefaultVolumeThreshold = 20
	// DefaultSleepWindow is how long, in milliseconds, to wait after a circuit opens before testing for recovery
	DefaultSleepWindow = 5000
	// DefaultErrorPercentThreshold causes circuits to open once the rolling measure of errors exceeds this percent of requests
	DefaultErrorPercentThreshold = 50

hystrix-go库还提供为每个commond动态设置配置的接口,我们可以通过这个接口结合配置中心,动态调节服务。

hystrix.ConfigureCommand("my_command", hystrix.CommandConfig{
	Timeout:               1000,
	MaxConcurrentRequests: 100,
	ErrorPercentThreshold: 25,
})

接入hystrix-dashboard

docker run --name hystrix-dashboard -d -p 8081:9002 mlabouardy/hystrix-dashboard:latest

打开 http://localhost:8081/hystrix , 输入 http://{ip}:81/hystrix.stream , 此处ip为本机ip,因为hystrix-dashboard是容器启动的,无法直接访问本机127.0.0.1。

Enable dashboard metrics
In your main.go, register the event stream HTTP handler on a port and launch it in a goroutine. Once you configure turbine for your Hystrix Dashboard to start streaming events, your commands will automatically begin appearing.

hystrixStreamHandler := hystrix.NewStreamHandler()
hystrixStreamHandler.Start()
go http.ListenAndServe(net.JoinHostPort("", "81"), hystrixStreamHandler)

在这里插入图片描述
项目完整代码地址

服务器本质:从localhost三行命令到云原生协作网络 服务器是Client-Server架构中承担响应请求角色的逻辑实体,其核心在于服务契约而非硬件形态。它基于TCP/IP协议栈实现请求-响应循环,依赖socket系统调用(bind/listen/accept)构建通信基础,技术价值在于解耦协作与资源抽象。广泛应用于Web服务、API网关、数据库中间件及CDN边缘节点等场景。理解服务器,需穿透物理机箱、虚拟机镜像与容器封装,回归到进程监听端口、处理HTTP/TCP连接的本质——正如用python3 -m http.server在localhost启动的简易服务 阅读详情

相关推荐

go-micro讲解--Go Micro编写微服务

一、什么是go-micro Go Micro是一个插件化的基础框架,基于此可以构建微服务。Micro的设计哲学是『可插拔』的插件化架构。在架构之外,它默认实现了consul作为服务发现,通过http进行通信,通过protobuf和json进行编解码。我们一步步深入下去。Go Micro是:一个用Golang编写的包一系列插件化的接口定义基于RPcGo Micro为下面的模块定义了接口:服务发现编解...

chen 4万+

go-micro学习日记(四)--熔断

一. 创建熔断Wrappers中间键。 package Wrappers import ( "github.com/micro/go-micro/client" "context" "github.com/afex/hystrix-go/hystrix" "go-micro-grpc/Services" "strconv" ) //熔断后默认方法 func defaultProds(rsp interface{}) { models := make([]*Services.ProdMode

qq_36453564的博客 727

五、go-kit微服务熔断机制

介绍 go-kit 提供了三种熔断 1、 gobreaker 2、 handy 3、 hystrix-go hystrix在java中用的比较多,我们来介绍下go-kit中hystrix的使用方法 go-kit的hystrix Middleware的实现 1、 Hystrix返回Middleware 此中间件会在原来的endPoint包一层Hystrix的endPoint ...

lihao19910921的专栏 4367

Go微服务: 服务熔断hystrix原理

go 微服务保稳三剑客:熔断,限流,负载均衡微服务熔断(hystrix-go) 与 服务雪崩效应在服务里面,有服务A调用服务B, 会有依赖调用关系,同时服务C被B依赖如果依赖关系在生产环境中多的话,C挂了之后服务B原本正常,也会因为C导致不正常同时,A因为依赖B导致A也出了问题这时候,会级联反应,就是服务雪崩效应,如下图微服务熔断 (hystrix-go) 目标组织故障的连锁反应快速失败并迅速恢复它会走一个熔断的逻辑回退并优雅降级。

Wang的专栏 1432

golang hystrix 熔断器

golang hystrix 熔断器 熔断器是为了保护被调方健康的一种方式。通过错误率,超时,并发等机制来使第三方处于一个健康且提供性能最佳的方式。hystrix 是比较通用的熔断器库。以下为介绍该熔断器源码以及处理思想。 核心思想 先看看需要配置什么参数,都是从参数玩出的花。 Timeout: 执行command的超时时间。默认时间是1000毫秒 MaxConcurrentRequests...

lcf枫的博客 1960

Go-Naftis是一个小米开源基于web的Istiodashboard

Naftis 是一个基于 web 的 Istio dashboard,通过任务模板的方式来帮助用户更方便地执行 Istio 任务。 用户可以在 Naftis 中定义自己的任务模板,并填充变量来构造单个或多个构造任务实例,从而完成各种服务治理功能。

go-micro使用熔断器(hystrix)

go-micro使用熔断器(hystrix)

qq_53267860的博客 561

基于vue多种项目框架

基于vue多种项目框架

go-micro项目实战五 服务监控

服务监控 可能读者会问,链路追踪和服务监控不是一个东西么?以下知识普及来源于网上。 我这里从网上找到一张图 很形象。 Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。 Metrics - 用于记录可聚合的数据。例如,队列的当前深度可被定义为一个度量值,在元素入队或出队时被更新;HTTP 请求个数可被定义为一个计数器,新请求到来时进行累加。 Tr...

一个不靠谱的程序员 5677

hystrix-go:使用hystrix-go的示例项目

hystrix-go 这是使用示例项目。 该存储库还包括主进程尝试发送请求的子系统。 因此,您可以手动尝试其功能。 安装 要使用 hystrix-go, $ go get github.com/afex/hystrix-go/hystrix 用法 要运行 main(使用 hystrix 断路器), $ go run main.go 要运行子系统,需要时间来响应, $ cd sub $ go run main.go 要访问主系统, $ for i in $( seq 5 ) ; do curl -x ' ' localhost:8080 &; done 断路器将在一定数量的请求 ( RequestVolumeThreshold ) 和错误率更高的 atn 阈值 ( ErrorPercentThreshold ) 后ErrorPercentThreshold 。 打开时,所有请

魔改xjar支持springboot3,

其实这里基本就没问题了,实际项目中只要把这个spring-core包从私仓中替换,项目加密也就没有太大的毛病,但是这样对于追求完美的我来说,方便性还差点。原因找到了,看了下springboot github的issue,官方确实变更了,原因是因为springboot2中的。xjar项目文档还是不错的,clone下来,跟着文档,很容易就测试并通过了我的测试项目,于是便推给其他同事使用了。方法,那么问题来了,为啥springboot2没问题,spring3读取出来的却又是加密的,这是为毛?

jioulongzi的专栏 1540

微服务之Go-Micro(十)服务熔断和降级 hystrix-go 介绍

介绍 使用说明 以命令模式执行 Hystrix 代码 定义依赖外部系统的业务程序逻辑(即运行外部业务逻辑的入口),将功能传递给hystrix-go 系统正常时,就只会运行这个业务程序逻辑 hystrix.Go("my_command", func() error { // talk to other services return nil }, nil) 定义回退行为 如果你想要你的外部业务代码在服务中断期间运行,那你就把第二个函数,也就是运行外部业务逻辑的入口,传给hystrix-go.

JaysenLeo 857

芯片设计中的“隐形杀手”:手把手教你理解并优化互连寄生参数(以SPEF/DSPF为例)

本文深入探讨了芯片设计中互连寄生参数的影响及优化策略,特别关注SPEF/DSPF文件解析与静态时序分析。通过实际案例展示了耦合电容对时序收敛的关键影响,并提供从定位到优化的完整解决方案,助力工程师应对先进工艺下的设计挑战。

weixin_30687051的博客 599

go-micro V2 从零开始(七)集成断路器Hystrix

本文相关代码:gitee 文章目录前言步骤一、hystrix-go二、go-plugins包三、引入Hystrix插件四、自定义Hystrix Wrapper总结支持一下 前言 断路器是微服务体系中的保险丝,避免小的故障通过连锁反应造成整个系统瘫痪甚至损坏,这一章我们演示如何在项目中集成知名断路器Hystrix。 为了实现集成,本章会涉及到go-micro wrapper的概念。 简单说,wrapper是一个函数装饰器,类似java springMVC中拦截器,或者gin 中间件的概念,可以无侵入的设定函

hotcoffie的博客 1139

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

pagerank算法详解

目录一、pagerank定义两个重要假设二、pagerank算法公式定义计算演示矩阵化计算三、存在的两个问题问题1.Dead Ends问题2.Spider Traps 一、pagerank定义 入链数:指向该节点的链接数 出链数:由该节点指出的链接数 以上图为例:A的入链数为1,出链数为3,所以将由A指向其他节点的边权重设置为1/3,表示A访问B、C、D节点的概率均为1/3 两个重要假设 数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。 质量假设:指向

gary101818的博客 4万+

go-micro 自定义熔断时间与服务降级

package main import ( "context" "fmt" "github.com/afex/hystrix-go/hystrix" "github.com/micro/go-micro" "github.com/micro/go-micro/client" "github.com/micro/go-micro/registry" etcd2 "github.com/micro/go-micro/registry/etcd" "github.com/micro/go-mi.

weixin_44540711的博客 580

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2801

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

1 )目录结构 可以看到这是基于领域模型搭建的框架,默认是通过 go-micro生成的模板,之后进行修改的 proto 下的 pb.go 和 pb.micro.go 是通过 Makefile 中配置的 protoc 命令生成的 $ 2 ) 核心 main.go 以下是一些注意事项 服务初始化需要借助mysql,mysql的一些连接信息是从consul配置中心获取的 在初始化的时候,需要先运行一次 和 上面 中的参数50, 100可以写入环境变量来获取,这个可以根据具体资源情况进行调节

Wang的专栏 2360

手把手教你学PCIE--固件与BIOS配置 - BIOS设置对PCIe性能的影响

本文详细分析了BIOS设置对PCIe性能的影响,并提供了优化建议。通过合理调整链路参数、功耗管理策略和高级功能配置,可以显著提升系统的性能和稳定性。本文将进一步分析BIOS设置如何影响PCIe设备的性能,并提供优化建议。BIOS(或UEFI)是系统启动时的第一个控制层,其设置直接决定了PCIe设备的工作状态和性能表现。BIOS中的功耗管理选项(如C-States、P-States)会影响PCIe链路的低功耗模式(L0s/L1)。MSI/MSI-X中断具有更高的性能和更好的可扩展性,应作为首选方案。

MHD0815的博客 997

AI穿透式智慧粮仓

本报告基于 2025-2026 年全国多地智慧粮储实践案例,系统分析了 "AI + 穿透式" 智慧粮储体系的技术架构、AI 算法应用、提质增效成效、区域差异化特点及未来发展趋势。该体系通过多模态感知、智能算法与管控平台的深度融合,实现粮食存储全流程精准感知、智能预警与科学调控,显著降低储粮损耗与运营成本,大幅提升储粮安全水平与管理效率。报告梳理了各地差异化实践路径,提出针对性发展建议,为推动我国粮食仓储高质量发展、筑牢国家粮食安全防线提供参考。

reset2021的博客 231

go-micro + consul

https://www.jianshu.com/p/a94ca773342a(还没有完全理解透) 验证而tls下使用http2协议(抓包分析) ------------------------------------------------ 1.启动micro web服务(这个类似micro的dashboard,可以看到注册的服务,有一个简单的请求发起测试功能) micro --reg...

xiaoxiaoyu85的专栏 1063

Linux | Ubuntu18.04安装WIFI6 AX201驱动完整教程

本节介绍了如何在Ubuntu18下安装AX201驱动的教程。

九七的博客 8883

hystrix-go 源码分析

阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力。 之前的帖子说了一下微服务的雪崩效应和常见的解决方案,太水,没有上代码怎么叫解决方案。github上有很多开源的库来解决雪崩问题,比较出名的是Netflix的开源库hystrix。集流量控制、熔断、容错等于一身的java语言的库。今天分析的源码库是 hystrix-go,他是hystrix的的g...

weixin_34362790的博客 631

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 【go-micro实践】jaeger分布式链路追踪
下一篇: 【go-micro实践】健康检查
惜朝_
博客等级 码龄10年 9粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值