从入门到极致:VictoriaMetrics 教你写出最高效的 Go 代码

本文永久链接 – https://tonybai.com/2026/01/12/victoriametrics-guide-most-efficient-go-code 大家好,我是Tony Bai。 在 InfluxDB 转Rust 之后,VictoriaMetrics 迅速崛起,成为了 Go 生态中无可争议的第一时序数据库。凭借其惊人的写入性能、极低的内存占用以及对 Prometheus 生态的完美兼容,它赢得了大量Go开发者以及大厂的青睐。除了核心数据库,其家族还拥有 VictoriaLogs、VictoriaTraces 等明星产品,它们共同构成了一个高性能的可观测性平台。 ...

January 12, 2026 · 11 min · Tony Bai

Go 性能分析的“新范式”:用关键路径分析破解高并发延迟谜题

本文永久链接 – https://tonybai.com/2025/12/24/profiling-request-latency-with-critical-path-analysis 大家好,我是Tony Bai。 “如果你喜欢快速的软件,那么你来对地方了。” 在 GopherCon 2025 上,来自 Datadog 的工程师、Go Performance and diagnostics小组成员 Felix Geisendörfer 以这样一句开场白,将我们带入了一个 Go 性能分析的全新领域。 ...

December 24, 2025 · 6 min · Tony Bai

Go基于I/O多路复用的TCP协议流解析实践

本文永久链接 – https://tonybai.com/2021/07/31/io-multiplexing-model-tcp-stream-protocol-parsing-practice-in-go 在《Go经典阻塞式TCP协议流解析的实践》一文中,我们基于Go经典的阻塞I/O模型实现了一个基于TCP流的自定义协议的解析。这种one-connection-per-goroutine模型的优点就是简单、好写以及好理解,降低开发者心智负担。但一旦连接数上来,goroutine的数量就会线性增加。当面对海量连接的场景,这种模型将力不从心:系统中将存在大量goroutine,goroutine调度和切换的开销过多。 那么面对海量连接场景,应该如何解决呢?业界成熟方案:使用I/O多路复用模型。了解Go net包实现的朋友想必都知晓Go在运行时底层使用的也是I/O多路复用,其实现为runtime中的netpoll。goroutine层面获得的net.Conn(无论是Accept的,还是Dial得到的)都展现出“阻塞”的特征,但这些net.Conn底层实现的fd(文件描述符)在netpoll中都是non-blocking(非阻塞)的,Go运行时负责调用epoll等多路复用机制监视这些fd是否可读或可写,并适时唤醒goroutine继续网络I/O操作,这种方式减少了系统调用,也减少了运行Goroutine的M(操作系统线程)因系统调用陷入内核态等待的频率以及因阻塞失去M而不得不去创建新线程的数量。 ...

July 31, 2021 · 11 min · Tony Bai

Go标准库http与fasthttp服务端性能比较

本文永久链接 – https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp 1. 背景 Go初学者学习Go时,在编写了经典的“hello, world”程序之后,可能会迫不及待的体验一下Go强大的标准库,比如:用几行代码写一个像下面示例这样拥有完整功能的web server: ...

April 25, 2021 · 11 min · Tony Bai