Golang Go语言中基于 gobreaker 与 prometheus 实现类似 hystrix 的熔断机制

发布于 1周前 作者 bupafengyu 来自 Go语言

一直想引入 hystrix 实现熔断机制,无奈 hystrix 稍微过重,且无法对接 prometheus,而我们目前的监控系统技术栈用到了 prometheus。

于是尝试基于 gobreaker 与 prometheus 实现了类似 hystrix 的熔断机制。

譬如我们调用 github 的 api,可以这样:

// func Do(name string, run runFunc, fall fallbackFunc) error

err := gobreak.Do(“github”, func() error { // call github api }, nil)

同时,通过 prometheus 暴露出的 metrics 接口,可以实现相关指标的监控,从而画出类似 hystrix-dashboard 的监控图,并加上告警。

链接如下: https://github.com/hnlq715/gobreak

希望有用 :)


Golang Go语言中基于 gobreaker 与 prometheus 实现类似 hystrix 的熔断机制

更多关于Golang Go语言中基于 gobreaker 与 prometheus 实现类似 hystrix 的熔断机制的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

熔断机制是什么,过载保护吗

更多关于Golang Go语言中基于 gobreaker 与 prometheus 实现类似 hystrix 的熔断机制的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


针对多个外部接口如第三方 api 或 redis 等出现异常的场景,可以考虑引入熔断机制,避免因异常导致大量请求拥堵,甚至系统雪崩的问题

看来做到一定程度都是需要 Circuit Breaker 的呀

嗯,高并发系统必备 :-)

README 更新~

在Go语言中实现类似Hystrix的熔断机制,结合gobreakerprometheus是一个常见且有效的方案。gobreaker是一个用于实现断路器模式的库,而prometheus则是一个强大的监控和告警系统,两者结合可以实现对服务的保护和监控。

首先,使用gobreaker可以配置熔断器的各种参数,如请求失败率阈值、熔断器打开后的等待时间等。当服务调用失败率达到阈值时,熔断器会打开,阻止后续的请求继续访问该服务,从而避免服务雪崩。

其次,结合prometheus可以实时监控熔断器的状态和服务调用的各项指标,如请求成功率、请求延迟等。通过prometheus的监控数据,可以及时发现服务的异常情况,并进行告警和处理。

在具体实现时,可以将gobreaker的熔断器封装为一个中间件,对服务调用进行拦截和保护。同时,在每次服务调用时,通过prometheus的客户端库记录相关的监控数据。

此外,为了增强系统的健壮性和可维护性,建议将熔断器的配置和监控数据的展示都进行统一管理。可以使用配置文件或环境变量来配置熔断器的参数,并通过prometheus的Web UI或Grafana等可视化工具来展示监控数据。

综上所述,基于gobreakerprometheus实现类似Hystrix的熔断机制是一种可行且有效的方案,能够保护服务免受异常调用的影响,并实时监控服务的状态。

回到顶部