熊喵君的博客

Thinking will not overcome fear but action will.

Go-redis with Metrics:关键指标采集

魔改 go-redis 实现 Metrics + Prometheus 关键指标上报

0x00 前言 本文总结下,工作中使用 go-redis 库的一些高级用法。 0x01 回调钩子 WrapProcess V7 版本之前提供了 WrapProcess 和 WrapProcessPipeline 方法,用于在 RedisAPI 执行方法前后进行自定义处理,下面的例子中,使用 time.Since() 来计算 Redis 操作的耗时代码: 注意:err := ol...

Prometheus 应用接入:使用 Prometheus 开发 Exporter

如何在项目中使用 Prometheus 及 Exporter 开发基础

0x00 前言 Prometheus 主要用于应用服务的监控,尤其是基于 Docker/Kubernetes 部署的应用服务,这里的监控是服务层面的(细粒度),以 Golang 开发的服务为例,如 runtime 信息,接口延迟,某个操作的延迟及接口调用成功率等等,只要是能够收集的信息,都可以作为 Prometheus 的监控指标。 0x01 应用接入 Prometheus 的应用接...

GoIM 源码分析(四):一些细节

GOIM

0x00 前言 0x01 数据结构:Ring Ring的使用场景 Ring本质上是一个环形缓冲区,其中保存的是空闲的protocol.Proto对象,主要用于长连接下TCP数据的拆包封包(每个连接都会初始化自己的Ring结构) 为什么要设计如此的结构呢?这里有个issue,思考下,长连接的场景,连接上不断有报文收发,使用一个可复用协议包体的数据结构是一个不错的优化手段(避免...

GoIM 源码分析(三):Logic


GoIM 源码分析(二):Job


GoIM 源码分析(一):Comet

分析 GoIM 对外服务模块 Comet

0x00 前言 本篇文章,分析下 GoIM 的 Comet 模块。 Comet 主方法 Comet 主要数据结构 Comet 管理服务(与 Job 模块通信) Comet模块的位置: 0x01 Comet 模块 Comet 模块为用户代理 Server(主要提供对外服务),用于客户端的连接,根据情况可部署多个 Comet-Server(扩展)。Comet 模块支持 Tc...

开源限流组件分析(一):Uber 的 Leaky Bucket

分析 Uber 的基于 Leaky Bucket 的限流器

0x00 前言 前一篇文章了解了微服务中限流的基础概念,这篇文章来分析下基于漏桶(Leaky Bucket)的一个典型开源实现 Uber:ratelimit 及其一般应用场景。 0x01 概念回顾 漏桶算法是对计数器算法的一种改进。 漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。 0x02 Uber-ratelimiter...

Kratos 源码分析:Warden 负载均衡算法之 P2C

分析 Warden 实现的负载均衡算法 P2C(Power of Two Choices)

0x00 前言 Warden 框架默认实现了两种负载均衡算法: WRR:Weight Round Robin(Dynamic) P2C:Power of Two Choice 之前的文章Kratos源码分析:分析 Kratos 中的 Dynamic-Wrr 负载均衡算法的实现,简单分析了WRR算法的实现思路及解决的场景。那么WRR算法存在哪些问题呢? 从B站的实践经验来...

Kratos 源码分析:Metrics 与 Prometheus 的集成与使用

分析 Kratos 的数据指标采集与使用

0x00 前言 前面已经分析过 Kratos 中的滑动窗口及基于滑动窗口实现的 RollingCounter、RollingGauge 实现,主要 代码在此。 这篇文章主要分析如下几点内容: Kratos 中对 Prometheus 接口的集成及封装 Warden 中使用 Metrics 做指标数据上报的拦截器封装 Metrics 的自定义使用 主要引用了这个包 gi...

Kratos 源码分析:Warden 之 gRPC-Server 封装

分析 Warden 的 Server 端封装

0x00 前言 Kratos 的 Warden 框架 server.go 封装了 gRPC 的服务端启动的核心逻辑。 服务端的启动 & 配置流程 拦截器链的 “安装” 顺序 tracer、metrics 以及 limiter 与 grpc.Server 的结合 过载保护实现 0x01 Server 端拦截器 Kratos 的拦截器链实现非常典型,实际项目可...