熊喵君的博客

Thinking will not overcome fear but action will.

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 的拦截器链实现非常典型,实际项目可...

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

分析 Warden 的 Client 端封装

0x00 前言 Kratos 的 Warden 框架 client.go 封装了 gRPC 的客户端启动的核心逻辑。 客户端封装的重点在下面几个方面: 客户端启动 & 配置流程 客户端拦截器链的 “安装” 顺序 tracer、metrics 以及 breaker 与 grpc.Client 的结合 客户端的 Naming 和 gRPC 框架结合 客户端调用...

Kratos 源码分析:Errgroup 机制

分析原生的 errgroup 即 Kratos 的 errgroup

0x00 前言 问题一:一般在 Golang 中,直接使用 go 命令字开启子 goroutine 来实现并发,但是直接 go 的话函数是无法对返回数据进行 error 处理的。(go 开启的方法也无返回值)如何实现? 问题二:调用并发的 goroutine 去批量执行 Job,有失败的可能,如何把第一个出错的 goroutine 信息返回给调用端? 通常有几种处理方法: 1、打...

项目中 golang 相关的优化 Case 处理及解决

调优系列:如何使用 Golang 的 Pprof 工具进行内存分析以及 sync.Pool 优化(一)

0x00 前言 pprof 是 Go 的性能分析工具,在程序运行过程中,可以记录程序的运行信息,如 CPU 使用情况、内存使用情况、goroutine 运行情况等。分析性能需要结合具体的场景来看 性能指标 吞吐量:每秒钟可以处理的请求数 响应时间:从客户端发出请求,到收到回包的总耗时 内存使用率 CPU 使用率 IO 使用率 0x01 工具介绍 gol...