zvvq技术分享网

如何监控golang框架中限流和熔断的性能?(gola

作者:zvvq博客网
导读如何监控 golang 框架中限流和熔断的性能?设置 redis 创建限流创建熔断监控指标 如何监控 Golang 框架中限流和熔断的性能 介绍 限流和熔断是确保应用程序稳定性的至关重要的技术。在

怎样监管 golang 框架中限流和融断性能?设定 redis建立限流建立融断监控指标 内容来自samhan

本文来自zvvq

怎样监管 Golang 框架中限流和融断性能

zvvq好,好zvvq

介绍 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. 建立限流

本文来自zvvq

您可以使用 redigo 里的 redigo.Limit 方式建立限流:

zvvq

limiter:=redigo.Limit{ zvvq好,好zvvq

Key:"my-limiter", 内容来自samhan666

Limit:10,

内容来自zvvq,别采集哟

Period:60time.Second,

copyright zvvq

} 本文来自zvvq

3. 建立融断 本文来自zvvq

您可以使用 redigo 里的 redigo.Breaker 方式建立融断:

内容来自samhan666

breaker:=redigo.Breaker{

内容来自samhan

Key:"my-breaker", 内容来自samhan

Interval:10time.Second, 内容来自samhan

Timeout:60time.Second, 本文来自zvvq

}

内容来自samhan

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"

本文来自zvvq

"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

copyright zvvq

conn, err := redis.Dial("tcp", "localhost:6379") copyright zvvq

if err != nil {

内容来自samhan666

log.Fatal(err) 内容来自samhan

}

内容来自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++ {

内容来自zvvq,别采集哟

// 获得限流和融断指标 copyright zvvq

counts, err := redis.IntMap(conn.Do("HMGET", "my-limiter:count", "my-breaker:count"))

内容来自zvvq

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,别采集哟

// 导出指标

本文来自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

内容来自samhan

time.Sleep(100 time.Millisecond) zvvq好,好zvvq

} 内容来自samhan

}

内容来自zvvq,别采集哟

以上就是怎样监管golang框架中限流和融断性能?的详细内容,大量请关注其他类似文章! 内容来自samhan666