熊喵君的博客

Thinking will not overcome fear but action will.

Kratos 源码分析:限流器 Limiter

分析 Kratos 的 BBR 限流器实现

0x00 前言 限流是当服务负载(或 Qps)超过一定量级(Load)时,主动丢弃一部分请求,是保护服务路径核心系统不被拖垮的常用方案。是服务端常用的一种过载保护的手段。有几个知识点: little’s Law:利特尔法则,估算系统的最大吞吐量 系统最大吞吐量的计算 EWMA:指数加权移动平均法 0x01 传统限流方法 VS BBR 限流 little法则:预估系统...

Kratos 源码分析:Ecode 错误代码

分析 Kratos 的 Error-code

0x00 背景 本篇文章来分析下 Kratos 对错误码的封装(HTTP && RPC)。一般而言,错误码封装的方式: 整形值的错误码 错误码对应的出错信息 HTTP 或 RPC 的方便定义 错误码,一般被用来进行异常传递,且需要具有携带 message 文案信息的能力。 0x01 Kratos 的错误码使用 先从用例入手,然后再简单分析下 ecode 内...

Kratos 源码分析:ORM 之 Mysql 的封装

分析 Kratos 的数据库 MYSQL-API

0x00 前言 本篇文章来分析下 Kratos 中的 Mysql 接口封装,主要是对 go-sql-driver 此库的封装。在其中加入了 Metrics 统计、Tracing 及熔断机制嵌入的实现。思路非常的清晰,代码主要集中在 sql.go 以及 mysql.go 中。 0x01 go-sql-driver/mysql 基础使用 database/sql 与 go-sql-driver...

golang-LRU 缓存设计与实现

分析 一款高性能的本地缓存开源组件 CCache

0x00 开篇 ccache 是笔者在项目中经常使用的一款 Local-Cache 的高性能组件,作为常用的性能优化手段,选择此库是因为它有如下的特点: Value 是 interface{} 类型,支持结构化存储 支持 LRU 算法的 Key 淘汰机制,LRU链记录访问时间顺序,通常使用list.List实现 支持多级 Cache,如 LayeredCache 和 Se...

一个轻量级的 golang 协程池的实现

使用 Golang-channel 实现工作池:批量并发处理

0x00 前言 网络上有非常多优秀的协程池实现及原理介绍,推荐阅读下面的链接: fasthttp 的 协程池实现 Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池 本文介绍如何实现 goroutine 与 Channel 机制实现一套通用的协程池,用来控制并发执行的安全性,同时提升效率。 0x01 Goroutine 高并发的问题 ...

GoWorker 高性能队列分析

分析一款基于 Golang 后台队列任务执行框架:benmanns/goworker

0x00 前言 goworker 是一个基于 Go 后台队列任务执行的高性能框架,下面是它的官方描述: goworker is a Go-based background worker that runs 10 to 100,000* times faster than Ruby-based workers goworker 兼容 Resque,所以可以使用 Rails/P...

Fasthttp 高性能 HttpServer 最佳实践之二:bytebufferpool

分析 Fasthttp 的 byte 对象池实现

0x00 前言 考虑这个普遍场景:在 Golang 开发中,在从 io.Reader 中读取数据时,通常要创建一个字节切片 []byte 去存储,在高频调用或并发比较高的场景中,需要频繁的进行内存申请和释放(频繁的创建[]byte),增大了 GC 的压力;此时需要采用字节池来优化 func main() { r, _ := os.Open("some_bigfile") ...

Xorm 使用总结(Mysql)

Xorm-Mysql 用法及避坑总结

0x00 前言 本文介绍 Xorm-MYSQL 的使用(自动分表)、超时封装、Tracing 封装及日常遇到的问题。Xorm 支持多种数据库驱动, 如: Mysql、Mariadb、Tidb、Postgres、Oracle 等等。 0x01 基础 Xorm-Mysql 的基础使用方式汇总如下,其他细节可以参见 Xorm 的 官方文档 1、Engine 相关 在项目中需要注意的是...

关于 Kafka 应用开发知识点的整理(一)

在项目中使用 Python 的 kafka 进行开发

0x00 前言 项目中使用 Kafka 作为消息队列,本篇文章就个人使用 Kafka 的一些经验做一些总结。大概从下面几个方面: Kafka 的基础知识总结 Kakfa 的生产者分区选择 Kafka 的消费者组机制 Kafka 的 offset 机制? Kafka 的消费延迟问题如何监控和优化? 关于 Kafka 应用的场景 0x01 Kafka 的基本概念...

Kratos 源码分析:超时(Timeout)传递

Context 的用法:Warden/Database 中的超时传递实现分析

0x00 前言 本篇文章,了解下 Kratos Warden 框架中的超时传递机制。 在微服务中,超时和熔断、重试、Backoff 策略都是有关联的。在实际项目中,每一个 RPC 调用都应该有超时退出的能力,这是比较合理的 API 设计。在 Context Deadlines and How to Set Them 中总结了超时的要点: Return an error. Thi...