登录
首页 >  专题 >  Go 并发治理实战
Go 并发治理实战

Go 并发治理实战

从请求生命周期、并发扇出到限流、连接池和上线清单
实战 中级 约420分钟 18浏览
这个专题面向已经写过 Go Web 服务、准备把接口稳定性带到生产环境的开发者。它不重复语法入门,而是把 goroutine 生命周期、并发扇出、入口限流、缓存击穿、HTTP/SQL 下游超时、连接池预算、泄漏排查和上线检查串成一条完整路线。
学习建议:建议按顺序阅读:先建立请求生命周期和 context 边界,再学习 errgroup、singleflight、rate.Limiter 等工具;随后进入 HTTP、数据库和重试降级,最后用监控、优雅停机和上线清单完成闭环。
20资源
20必学
4模块
7小时

第一阶段:建立并发边界

先把请求生命周期、取消和并发扇出管住

Go 并发治理入门:先管请求生命周期,再谈 goroutine 数量
文章 初级 必学

Go 并发治理入门:先管请求生命周期,再谈 goroutine 数量

把一次请求拆成入口、并发扇出、下游调用、取消和收尾几个阶段,建立并发治理的全局视角。
这是整个专题的总览,先确定治理目标和边界。
Go errgroup 实战:并发扇出时别丢掉错误和取消
文章 中级 必学

Go errgroup 实战:并发扇出时别丢掉错误和取消

使用 errgroup.WithContext 同时启动多个下游任务,并在任一任务失败时取消其它任务。
并发扇出是服务聚合接口最常见的模式。
Go errgroup SetLimit:给并发扇出加一个硬上限
文章 中级 必学

Go errgroup SetLimit:给并发扇出加一个硬上限

用 SetLimit 控制同一次请求内的并发度,避免批量扇出把下游打穿。
它把“能并发”推进到“可控地并发”。
Go context 超时控制:把 deadline 传到每个下游调用
文章 初级 必学

Go context 超时控制:把 deadline 传到每个下游调用

用 context.WithTimeout 统一请求 deadline,并在下游函数中正确响应取消。
超时是所有并发治理策略的地基。
Go singleflight:热点缓存失效时只让一个请求回源
文章 中级 必学

Go singleflight:热点缓存失效时只让一个请求回源

用 singleflight 合并同 key 的并发请求,降低缓存击穿时的下游压力。
热点请求合并是高并发接口必须掌握的技巧。

第二阶段:流量与队列治理

让入口、后台任务和 channel 都有容量意识

Go rate.Limiter:用令牌桶把入口流量变成可承受的速度
文章 中级 必学

Go rate.Limiter:用令牌桶把入口流量变成可承受的速度

理解 Allow、Wait、Reserve 和 Burst 的区别,给接口加上可解释的限流策略。
入口流量可控,后面的并发治理才有意义。
Go worker pool:别让后台任务无限制创建 goroutine
文章 中级 必学

Go worker pool:别让后台任务无限制创建 goroutine

用固定 worker 数量和任务队列控制后台并发,避免任务高峰拖垮进程。
后台任务是 goroutine 泄漏和内存抖动的高发区。
Go channel 背压:让生产速度服从消费能力
文章 中级 必学

Go channel 背压:让生产速度服从消费能力

通过有界 channel、select 和 context,把压力显式传回生产端。
背压能防止系统在峰值时悄悄积压到崩溃。
Go HTTP Client 超时:别让默认客户端拖住 goroutine
文章 中级 必学

Go HTTP Client 超时:别让默认客户端拖住 goroutine

配置 http.Client 和 Transport 超时,避免下游慢响应占满资源。
HTTP 下游没有超时,是线上 goroutine 堆积的常见原因。
Go Transport 连接复用:高并发下别把短连接当默认答案
文章 高级 必学

Go Transport 连接复用:高并发下别把短连接当默认答案

理解 MaxIdleConns、MaxIdleConnsPerHost 和 MaxConnsPerHost,减少连接抖动。
连接复用直接影响延迟和下游压力。

第三阶段:下游依赖保护

数据库、重试、降级和泄漏排查

Go database/sql 连接池:MaxOpenConns 不是越大越好
文章 高级 必学

Go database/sql 连接池:MaxOpenConns 不是越大越好

用 MaxOpenConns、MaxIdleConns 和 DBStats 控制数据库并发。
数据库连接池是并发治理落到资源层的关键。
Go SQL 查询取消:让慢查询跟着请求一起停
文章 中级 必学

Go SQL 查询取消:让慢查询跟着请求一起停

在 database/sql 中使用 QueryContext、ExecContext 和事务 context。
它补齐数据库层的取消边界。
Go 重试与退避:别让失败请求把流量放大三倍
文章 高级 必学

Go 重试与退避:别让失败请求把流量放大三倍

设计有上限、有退避、有幂等保护的重试策略。
重试是稳定性工具,也可能是事故放大器。
Go 服务降级:不是所有下游失败都要拖垮主流程
文章 中级 必学

Go 服务降级:不是所有下游失败都要拖垮主流程

给非核心依赖设计 fallback,让主流程在部分失败时仍可返回。
降级能让并发治理从“失败即退出”进化到“核心优先”。
Go goroutine 泄漏排查:用 pprof 找到没有退出的人
文章 高级 必学

Go goroutine 泄漏排查:用 pprof 找到没有退出的人

通过 goroutine profile、阻塞栈和请求路径定位泄漏来源。
泄漏排查是并发治理上线后的必备能力。

第四阶段:生产闭环

共享状态、流水线、停机、监控和发布清单

Go 共享状态并发安全:mutex、atomic 和 channel 怎么选
文章 中级 必学

Go 共享状态并发安全:mutex、atomic 和 channel 怎么选

根据读写频率、临界区大小和语义选择同步工具。
共享状态处理不好,会让并发 bug 难以复现。
Go fan-in/fan-out 模式:并发流水线如何正确收口
文章 高级 必学

Go fan-in/fan-out 模式:并发流水线如何正确收口

设计生产者、多个 worker 和结果聚合时,重点处理关闭、错误和取消。
复杂并发流水线需要可预测的关闭协议。
Go 优雅停机:让正在处理的请求有机会收尾
文章 中级 必学

Go 优雅停机:让正在处理的请求有机会收尾

使用 http.Server.Shutdown、context 和后台任务退出协议完成安全发布。
发布和扩容时,停机路径也是并发治理的一部分。
Go 并发治理监控:只看 QPS 远远不够
文章 中级 必学

Go 并发治理监控:只看 QPS 远远不够

建立 goroutine、队列、连接池、限流、超时和降级指标。
没有指标,治理效果无法验证。
Go 并发治理上线清单:从代码到压测的 20 个检查点
文章 高级 必学

Go 并发治理上线清单:从代码到压测的 20 个检查点

整理并发治理上线前必须确认的 context、限流、连接池、降级和监控事项。
用清单把前 19 篇文章收束成可执行流程。

相关专题

继续沿着相近方向学习

最新文章