0%

我们已经把 go-zero 的核心肌理几乎全部拆解了一遍:从 goctl 的代码生成,到 REST 和 zRPC 的请求处理链路,再到服务发现、弹性保护、可观测性与数据访问层。这些能力构成了一个微服务框架的基础设施——你可以在上面构建出一个完整的微服务系统。

但是,框架的真正活力在于扩展性。当核心能力稳定之后,自然会涌现出在核心框架之上构建更高层抽象的需求。go-zero 的 gateway 包和 mcp 包就是这种思路的两个典型产物:它们不修改 restzrpc 的一行代码,却分别构造出了协议网关AI 工具协议服务两种全新的服务形态。

阅读全文 »

go-zero 的数据访问层由 core/stores/ 下的六个子包构成——sqlxrediscachesqlcmonmonc。本文就沿着这条层次线索来阅读源码:先从底层的 sqlxredis 入手,理解连接管理和监控机制;然后深入到 cache 层,拆解 Cache-Aside 模式及其三种防护策略;最后看 sqlcmonc 如何把数据库和缓存编织在一起。

阅读全文 »

这篇文章将学习 go-zero 的一些底层组件,这些工具本身不参与业务逻辑,也不直接暴露给最终用户。它们构成了框架的"标准库"——如果上层建筑是房屋的梁柱,这些工具就是砌成梁柱的砖石。它们分布在 core/collection/core/syncx/core/executors/core/fx/core/mr/core/threading/ 六个包中。我们不会逐个罗列所有类型,而是从上层模块的依赖关系出发,沿着"时间工具 → 并发控制 → 执行器 → 高级抽象"这条线索来组织它们。

阅读全文 »

当断路器跳开了、降载器拒绝了请求、限流器拦住了调用方——你如何知道这些事正在发生?更进一步,当系统一切正常时,你如何验证一切正常?这就是可观测性的领域。它不直接参与业务逻辑,但它回答运维中最基本的问题。

  • “刚才发生了什么?” → 日志(Logging)
  • “这个请求经过了哪些服务?每个环节花了多久?” → 链路追踪(Tracing)
  • “系统整体表现如何?QPS、延迟、错误率分别是多少?” → 指标(Metrics)
阅读全文 »

在上一篇文章的最后,我们走完了 go-zero 的服务发现与负载均衡链路——客户端通过 etcd Watch 实时获取在线节点列表,再通过 P2C 算法选择延迟最低、在途请求最少的那个节点发出请求。这一切运转良好的前提是:下游是健康的,流量是可控的,CPU 是空闲的,但生产环境从来不缺少意外。

阅读全文 »

在上一篇文章的最后,我们追踪了一次完整的 zRPC 调用——客户端拦截器从 Tracing 走到 Timeout,然后在 invoker 中将请求发给 gRPC 底层。但这里跳过一个至关重要的问题:invoker 发请求时,到底发给了谁?

阅读全文 »

我们完整走完了 REST 服务的全部链路——从 goctl 生成代码、配置加载与服务启动,到路由匹配、参数解析、响应写入,再到 11 个中间件的协同配合。现在把视角转到微服务架构的另一端:RPC。

阅读全文 »

中间件是 go-zero REST 框架中最容易 凭感觉使用 却最难 准确理解 的部分。它的本质不难——每个中间件都是一个 func(http.Handler) http.Handler,层层包裹业务逻辑。本文从 chain.Chain 的不可变链表机制出发,依次分析每个默认中间件的职责和位置原因,再展开 JWT 认证、签名校验、CORS、SSE 和文件服务这些 附加能力 如何挂载到主链之上。文中会用成功、超时、panic、未认证四种典型请求贯穿讲解,帮你建立"请求穿过中间件链"的肌肉记忆。

阅读全文 »

这篇文章将分析一个 HTTP 请求到底是怎么到达你写的业务 logic 的?以 rest.MustNewServer 为入口,沿着"创建 → 注册 → 启动 → 路由匹配 → 参数解析 → 响应写入"这条主线,把 REST 核心链路的每个环节讲清楚。中间件链的细节(每条中间件的实现原理和顺序设计理由)会留到下一篇专门展开。

阅读全文 »