Go 分布式系统:内容简介
本书从“协调的成本”解释为什么需要分布式设计,并用 Go 并发作为微型系统切入。章节逐步加入服务与队列、HTTP 中间件、JWT 认证、数据库迁移和上下文传播,再深入 Kafka 背压与消费者组、gRPC、Protobuf、重试和熔断器。后半部分处理编排、一致性、日志指标追踪、测试、配置与密钥,最终以完整系统整合各项技术。它强调服务边界和运行可靠性,而不是孤立的代码片段。附录中的并发速查、存储抽象和运维 CLI 又为综合案例提供了可回查的工程支撑。
《Go 分布式系统》主要内容
- 从 Go 并发理解协调和故障
- 构建 HTTP 服务、中间件与跨服务认证
- 使用 Kafka 处理背压和消费者组
- 实现 gRPC、重试、熔断与编排
- 加入一致性、可观测性和分布式测试
适合哪些读者
适合已有 Go 基础的后端开发者、云原生工程师和架构师。了解网络、数据库和容器化概念会更容易完成综合案例。
消息系统、库和部署环境会迭代,示例运行时需按当前版本核对配置与安全实践。
目录、试读与相关阅读
可在本页“目录与试读”中查看章节和正文节选,在“书籍资料”中核对作者、版本、语言与 EPUB 文件大小。同主题读本包括构建 AI 时代的分布式系统、智能体编程:使用 AI 智能体构建可靠软件,以及AI 时代的企业云战略与架构。
继续浏览软件开发与技术,或查看EPUB 阅读与下载帮助。
目录与试读
目录
章节与主要小节(依据 EPUB 导航整理):
前言
为什么选择云原生分布式系统?
本书适用人群
如何阅读本书
关于代码
本书不是什么
引言
分布式系统书籍的问题
思维模型
公司 SDK
我们构建的系统
代码风格
开始之前
第 1 章:为什么要分布式?协调的成本
单体系统的局限
八件你不能想当然的事
何时必须使用分布式
隐藏的成本
从结构体到服务
Go 的契合度
单体优先原则
你将构建的内容
问答
第 2 章:并发——微型分布式系统
Goroutines
Channels
select
sync.WaitGroup
context.Context
组合应用:工作线程池
优雅停机
并发的思维模型
问答
SDK 中应包含的内容
第 3 章:两个服务,一个队列
为什么用队列而不是 HTTP 调用?
使用 NATS 作为第一个示例
接口定义
生产者
消费者
运行示例
实践中的松耦合
错误处理与重连
整体架构
SDK 中应包含的内容
第 4 章:HTTP 服务与中间件链
Go 1.22 中的 net/http
处理器接口
构建中间件链
基础中间件
结构化错误响应
JSON 请求绑定
健康检查模式
完整的服务
测试 HTTP 处理器
框架添加的价值
问答
SDK 中应包含的内容
第 5 章:跨服务认证与 JWT
什么是 JWT
HMAC 与 RSA 和 ECDSA 的区别
使用 ECDSA 生成与验证令牌
JWKS 端点
认证中间件
基于作用域的授权
认证服务
可插拔的认证代理
服务间的令牌传递
在服务链中添加认证
测试认证
问答
SDK 中应包含的内容
第 6 章:数据库访问与迁移
pgx:正确的 PostgreSQL 使用方式
仓储模式
事务
sqlc:无 ORM 的类型安全 SQL
模式迁移
零停机迁移
每个服务一个数据库
数据库操作的可观测性
问答
SDK 中应包含的内容
第 7 章:上下文传播——贯穿一切的纽带
上下文树如何失败
上下文使用规范
截止时间传播
截止时间收窄
实践中的上下文值
上下文反模式
连接各层
问答
SDK 中应包含的内容
第 8 章:消息队列深入解析——Kafka、背压与消费者组
Kafka 的工作原理
编写 Kafka 生产者
编写 Kafka 消费者
背压
消费者组实战
动态主题订阅
消息模式管理
问答
SDK 中应包含的内容
第 9 章:服务间调用——gRPC、Protobuf、重试与熔断器
为什么内部通信使用 gRPC
使用 Protocol Buffers 定义服务
使用 buf 生成 Go 代码
实现 gRPC 服务器
运行 gRPC 服务器
带拦截器的 gRPC 客户端
服务令牌认证
双 API 模式:管理 vs 消费
超时与重试
熔断器
选择:HTTP 还是 gRPC
问答
SDK 中应包含的内容
第 10 章:编排——并行流与扇出
顺序处理的问题
使用 errgroup 进行扇出
部分失败处理
管道组合
向动态目标扇出
多步流程的超时预算
衡量影响
SDK 中应包含的内容
问答
第 11 章:分布式一致性实践
CAP 定理的应用
最终一致性
幂等性键
乐观锁
Saga 模式
事件驱动的一致性
检测不一致
发件箱模式
实践中的对账
SDK 中应包含的内容
问答
第 12 章:可观测性—日志、指标与追踪
使用 slog 进行结构化日志
使用 Prometheus 监控指标
使用 OpenTelemetry 进行分布式追踪
告警:当指标变成警报
问答
SDK 中应包含的内容
第 13 章:测试分布式系统
分布式系统的测试金字塔
使用真实数据库进行测试:testcontainers
-race 标志
使用伪实现进行测试
测试幂等性
混沌测试:测试中途杀死依赖项
goleak:查找 Goroutine 泄漏
用于边界情况的表驱动测试
问答
SDK 中应包含的内容
第 14 章:配置与密钥
十二要素应用原则
使用结构体标签进行配置
使用 Viper 处理复杂配置
启动时配置校验
密钥管理
条件密钥暴露
通过信号处理器实现实时重载
多服务系统中的配置
配置测试
问答
SDK 中应包含的内容
第 15 章:综合案例——一个完整的系统
附录 A:Go 并发速查
附录 B:文件与对象存储抽象
附录 C:运维 CLI 工具
术语表
致谢
版权信息
试读节选
这并非因为我没读书。我读过那些论文,我知道 CAP 定理,我也能背出那八项谬误。但理解分布式系统,就像看地图,与像走公路那样理解它有着天壤之别——哪里有水坑,哪些转弯看似快捷实则不然,黑暗中哪里容易迷路。