在 golang 分布式架构中,限流和融断技术的实践手册包含:限流:应用 gin-gonic 中间件限定要求速度,避免系统负载。融断:应用 gobreaker 库完成融断,在服务不可用时停止发送请求,防止进一步失败。实战情景:在 api 网关、微服务和消息队列中应用限流和融断,以确保系统弹性和可靠性。
本文来自zvvq
Golang 分布式架构里的限流和融断实践手册分布式架构在如今当代APP开发中变得越来越流行。限流和融断技术在保证分布式架构的弹性和可靠性层面发挥着至关重要的作用。下列是一个应用 Golang 完成限流和融断的实践手册。
限流限流是一种技术,根据限定每秒要求的总数来保护系统免遭负载。在 Golang 中,我们可以使用 [gin-gonic](https://github.com/gin-gonic/gin) 中间件来达到限流。 copyright zvvq
import( zvvq
"github.com/gin-gonic/gin"
内容来自zvvq
"github.com/juju/ratelimit" zvvq
)
内容来自zvvq
funcmain(){
zvvq好,好zvvq
r:=gin.New()
内容来自samhan
bucket:=ratelimit.NewBucket(time.Second10,10)
r.Use(gin.LimitBy(bucket))
本文来自zvvq
r.GET("/",func(cgin.Context){
内容来自samhan
//解决要求
}) zvvq好,好zvvq
r.Run()
}
内容来自samhan666
融断熔断是一种技术,当检测出服务不可用时,他会停止向该服务发送请求一段时间。在 Golang 中,我们可以使用 [go-circuitbreaker](https://github.com/sony/gobreaker) 库来完成融断。 内容来自zvvq,别采集哟
import( copyright zvvq
"context"
"time"
"github.com/sony/gobreaker"
内容来自samhan
)
内容来自samhan666
funcmain(){
内容来自zvvq
cb:=gobreaker.NewCircuitBreaker(gobreaker.Settings{ 内容来自samhan666
Name:"my-circuit-breaker", 内容来自zvvq
MaxRequests:5, 内容来自samhan
Interval:time.Second10,
Timeout:time.Second5, zvvq.cn
OnStateChange:func(namestring,fromgobreaker.State,togobreaker.State){ 内容来自zvvq
//处理状态更改 内容来自zvvq,别采集哟
},
内容来自samhan
})
for { 本文来自zvvq
err := cb.Execute(context.TODO(), func() error {
// 实行需要保护操作
return nil 内容来自samhan666
}) copyright zvvq
if err != nil {
内容来自zvvq
// 假如操作失败,断路器将处于打开状态
} zvvq.cn
} 本文来自zvvq
}
实战案例在以下场景下应用限流和融断技术:
API 网关:在 API 网关中获得限流,以避免恶意攻击或负载。 微服务:在微服务中获得融断,以自动识别失败的服务并防护他们。 消息队列:在消息队列中获得限流,以避免顾客解决消息时发生短板。以上就是分布式架构中,golang架构限流和融断的实践手册?的详细内容,大量请关注zvvq技术分享网其他类似文章!
zvvq.cn