Go 并发治理实战
从请求生命周期、并发扇出到限流、连接池和上线清单
实战
中级
约420分钟
18浏览
这个专题面向已经写过 Go Web 服务、准备把接口稳定性带到生产环境的开发者。它不重复语法入门,而是把 goroutine 生命周期、并发扇出、入口限流、缓存击穿、HTTP/SQL 下游超时、连接池预算、泄漏排查和上线检查串成一条完整路线。
学习建议:建议按顺序阅读:先建立请求生命周期和 context 边界,再学习 errgroup、singleflight、rate.Limiter 等工具;随后进入 HTTP、数据库和重试降级,最后用监控、优雅停机和上线清单完成闭环。
20资源
20必学
4模块
7小时
第一阶段:建立并发边界
先把请求生命周期、取消和并发扇出管住
文章
初级
必学
Go 并发治理入门:先管请求生命周期,再谈 goroutine 数量
把一次请求拆成入口、并发扇出、下游调用、取消和收尾几个阶段,建立并发治理的全局视角。
这是整个专题的总览,先确定治理目标和边界。
文章
中级
必学
Go errgroup 实战:并发扇出时别丢掉错误和取消
使用 errgroup.WithContext 同时启动多个下游任务,并在任一任务失败时取消其它任务。
并发扇出是服务聚合接口最常见的模式。
文章
初级
必学
Go context 超时控制:把 deadline 传到每个下游调用
用 context.WithTimeout 统一请求 deadline,并在下游函数中正确响应取消。
超时是所有并发治理策略的地基。
文章
中级
必学
Go singleflight:热点缓存失效时只让一个请求回源
用 singleflight 合并同 key 的并发请求,降低缓存击穿时的下游压力。
热点请求合并是高并发接口必须掌握的技巧。
第二阶段:流量与队列治理
让入口、后台任务和 channel 都有容量意识
文章
中级
必学
Go rate.Limiter:用令牌桶把入口流量变成可承受的速度
理解 Allow、Wait、Reserve 和 Burst 的区别,给接口加上可解释的限流策略。
入口流量可控,后面的并发治理才有意义。
文章
中级
必学
Go worker pool:别让后台任务无限制创建 goroutine
用固定 worker 数量和任务队列控制后台并发,避免任务高峰拖垮进程。
后台任务是 goroutine 泄漏和内存抖动的高发区。
文章
中级
必学
Go HTTP Client 超时:别让默认客户端拖住 goroutine
配置 http.Client 和 Transport 超时,避免下游慢响应占满资源。
HTTP 下游没有超时,是线上 goroutine 堆积的常见原因。
文章
高级
必学
Go Transport 连接复用:高并发下别把短连接当默认答案
理解 MaxIdleConns、MaxIdleConnsPerHost 和 MaxConnsPerHost,减少连接抖动。
连接复用直接影响延迟和下游压力。
第三阶段:下游依赖保护
数据库、重试、降级和泄漏排查
文章
高级
必学
Go database/sql 连接池:MaxOpenConns 不是越大越好
用 MaxOpenConns、MaxIdleConns 和 DBStats 控制数据库并发。
数据库连接池是并发治理落到资源层的关键。
文章
中级
必学
Go SQL 查询取消:让慢查询跟着请求一起停
在 database/sql 中使用 QueryContext、ExecContext 和事务 context。
它补齐数据库层的取消边界。
第四阶段:生产闭环
共享状态、流水线、停机、监控和发布清单
文章
中级
必学
Go 优雅停机:让正在处理的请求有机会收尾
使用 http.Server.Shutdown、context 和后台任务退出协议完成安全发布。
发布和扩容时,停机路径也是并发治理的一部分。
相关专题
继续沿着相近方向学习
最新文章
-
从 Python Celery 任务重复执行事故入手,实战讲解业务幂等键、acks_late、自动重试、指数退避、超时控制和上线观测。340 18小时前
-
从 MySQL 8.4 内部临时表和 TempTable 入手,讲清 GROUP BY、ORDER BY、DISTINCT 落盘诊断、SQL 改写、索引策略和参数兜底。267 18小时前
-
从 Python 服务 RSS 持续增长事故入手,实战讲解 tracemalloc 快照 diff、gc 引用检查、缓存失控定位和上线回归。230 19小时前
-
从 Spring Boot 聚合接口超时治理出发,讲清 Java 25 Structured Concurrency 预览 API 的适用边界、取消语义、代码改造和上线检查。443 19小时前
-
从 Python 服务 request_id 丢失和日志阻塞问题入手,实战讲解 contextvars、logging.Filter、JSON 日志、QueueHandler/QueueListener 与上线检查。427 22小时前
-
从 MySQL 8.4 InnoDB Change Buffer 默认值变化入手,讲清批量写入、二级索引随机 I/O、merge 观察和上线回滚。270 22小时前
-
从生产懒加载和启动成本治理场景出发,讲清 Java 25 Stable Values 预览特性的适用边界、代码改造、失败语义和上线检查。121 22小时前
-
从真实 Go HTTP 接口突增流量讲起,拆解 x/time/rate 的 token bucket、Allow/Wait(ctx)、Burst、按用户分桶、429 降级、指标观测和上线检查,避免把限流写成全局 sleep 或无效摆设。441 4天前