高并发下的流量控制

背景

目前在做一个消息中台,提供给业务方各种消息通道能力。我们在系统设计过程中,除了有对业务方在使用时做 Quota 限制;也有对请求做流量控制(几w+ QPS),防止并发流量上来时打垮服务。下面是个人在调研流量控制方案的一些梳理和总结。

在 Go 中实现 Monkey Patch

背景

在进行单元测试的时候,通过 testify框架 对测试函数的数据和所依赖的方法做 mock,但是单测出现 panic。 根据错误提示,被测试函数调用了 time.Now(), 因为会对比这个函数返回值, 所以本次单测没有跑通过。下面介绍通过 monkey patch 来解决这个问题。

Go 程序性能分析

背景

Go 是 GC 类语言,内存自动回收。 如果程序中已动态分配的堆内存由于某种原因程序未释放或无法释放, 这时候就会产生内存泄露, 造成系统内存浪费,导致程序运行减慢甚至系统 OOM。类似地,程序在运行过程中可能会出现 CPU 问题。

性能分析是排查内存泄露等问题的常见手段, 可以让我们了解和捕获到程序堆内存和 Profile 信息, 方便定位问题。Go 原生提供了丰富的分析工具,下面是通过几个内存泄露的案例对 Go 程序做性能分析,并介绍相关工具原理和细节。