怎样监管 golang 框架中限流和融断性能?设定 redis建立限流建立融断监控指标 内容来自samhan
怎样监管 Golang 框架中限流和融断性能
介绍 zvvq好,好zvvq
限流和融断是保证应用软件稳定性的非常重要的技术。在 Golang 框架中,有很多库能够帮助你执行这些技术。本文将介绍怎么使用 [redigo](https://github.com/gomodule/redigo/tree/master/redis) 库监管限流和融断性能。
内容来自samhan666
执行 本文来自zvvq
1.设定Redis 内容来自zvvq,别采集哟
要存放限流和融断指标,你需要一个 Redis 案例。您可以使用下列指令运行一个 Redis 案例:
zvvq.cn
redis-server
内容来自samhan
2. 建立限流
您可以使用 redigo 里的 redigo.Limit 方式建立限流:
zvvq
limiter:=redigo.Limit{ zvvq好,好zvvq
Key:"my-limiter", 内容来自samhan666
Limit:10,
Period:60time.Second,
copyright zvvq
} 本文来自zvvq
3. 建立融断 本文来自zvvq
您可以使用 redigo 里的 redigo.Breaker 方式建立融断:
breaker:=redigo.Breaker{
Key:"my-breaker", 内容来自samhan
Interval:10time.Second, 内容来自samhan
Timeout:60time.Second, 本文来自zvvq
}
4. 监控指标 内容来自zvvq
您可以使用下列指令监管 limit 和 circuit breaker 指标: copyright zvvq
redis-cliKEYS"my-limiter"
copyright zvvq
redis-cliKEYS"my-breaker"
zvvq
这种指令将输出与限流和融断关联键。您可以使用下列指令获得特殊键的值:
copyright zvvq
redis-cliGETmy-limiter:count 内容来自samhan666
redis-cliGETmy-limiter:time zvvq
实战案例 内容来自samhan666
下列是一个应用 redigo 监控限流和融断特性的实用实例: zvvq好,好zvvq
packagemain 内容来自zvvq,别采集哟
import( copyright zvvq
"fmt"
"log" zvvq好,好zvvq
"time" zvvq
"github.com/gomodule/redigo/redis" zvvq
redigolimit"github.com/gomodule/redigo/redis/limit"
内容来自zvvq
) copyright zvvq
funcmain(){ zvvq好,好zvvq
//传送到 Redis
conn, err := redis.Dial("tcp", "localhost:6379") copyright zvvq
if err != nil {
log.Fatal(err) 内容来自samhan
}
// 建立限流器
内容来自samhan666
limiter := redigolimit.Limit{ 内容来自zvvq
Key: "my-limiter",
内容来自zvvq
Limit: 10, zvvq
Period: 60 time.Second, 内容来自zvvq
} 本文来自zvvq
// 建立断路器 内容来自zvvq,别采集哟
breaker := redigolimit.Breaker{ zvvq.cn
Key: "my-breaker",
内容来自zvvq
Interval: 10 time.Second, copyright zvvq
Timeout: 60 time.Second,
zvvq好,好zvvq
}
zvvq
// 运作模拟要求的循环 内容来自samhan
for i := 0; i < 100; i++ {
// 获得限流和融断指标 copyright zvvq
counts, err := redis.IntMap(conn.Do("HMGET", "my-limiter:count", "my-breaker:count"))
if err != nil { copyright zvvq
log.Fatal(err)
内容来自zvvq
} 内容来自zvvq,别采集哟
times, err := redis.IntMap(conn.Do("HMGET", "my-limiter:time", "my-breaker:time")) zvvq.cn
if err != nil { 内容来自zvvq
log.Fatal(err) 内容来自zvvq,别采集哟
}
// 导出指标
本文来自zvvq
fmt.Printf("循环%d",i)
本文来自zvvq
fmt.Printf("Limit:count=%d,time=%d",counts["my-limiter:count"],times["my-limiter:time"])
zvvq.cn
fmt.Printf("Breaker:count=%d,time=%d",counts["my-breaker:count"],times["my-breaker:time"])
本文来自zvvq
//要求外界 API
time.Sleep(100 time.Millisecond) zvvq好,好zvvq
} 内容来自samhan
}
内容来自zvvq,别采集哟
以上就是怎样监管golang框架中限流和融断性能?的详细内容,大量请关注其他类似文章! 内容来自samhan666