在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
随着微服务的流行,服务之间的调用可能变得越来越复杂,一个业务流程可能需要调用五六个甚至更多服务,这就会导致,假设某个服务出现问题,严重可能出现服务器负载过高,导致服务雪崩的现象。 因此为了防止此现象的发生,决定了解下服务熔断机制,根据自身业务的需求,将其应用到服务中。
什么是熔断:可以联想到我们家里的电表的保险丝,当电压负载过高后,保险丝熔断,确保家里的电器等其他安全。 在我们的服务中,当我们当用第三方服务时失败到达一定的失败次数或者超时等问题时,我们将熔断机制融入到我们的客户端调用方,当失败次数等达到阈值时,开启熔断器,及时进行弥补处理,或者给上层友好提示。
在熔断器中有三种状态:
hystrix内部处理逻辑
go-hystrix example: package main import ( "fmt" "github.com/afex/hystrix-go/hystrix" "net/http" "time" ) func main() { hystrix.ConfigureCommand("get_baidu", hystrix.CommandConfig{ 500, 100, 50, 3, 1000, }) for i:=0; i<100; i++ { TestHystix() time.Sleep(1*time.Second) } time.Sleep(2 * time.Second) // 调用Go方法就是起了一个goroutine,这里要sleep一下,不然看不到效果 } func TestHystix() { // 根据自身业务需求封装到http client调用处 hystrix.Go("get_baidu", func() error { // 调用关联服务 res, err := http.Get("https://www.baidu.com/") if err != nil { fmt.Println("get error") return err } fmt.Println("请求成功:",res.Status) return nil }, // 失败重试,降级等具体操作 func(err error) error { fmt.Println("get an error, handle it") return nil }) }
|
请发表评论