Skip to content

Kratos

This content is not available in your language yet.

Kratos 是一个把应用生命周期、HTTP/gRPC 传输、中间件、服务注册发现、配置和日志组合起来的 Go 微服务框架。本册沿着“应用启动、服务器运行、请求进入、客户端发现、配置变更、优雅退出”的主线阅读源码。

Kratos 适合按“应用生命周期包住请求生命周期”来读:

  1. App 启动时谁先准备? 配置、日志、注册中心和服务器需要在 Run 前完成初始化,组件之间通过生命周期接口统一启动和停止。
  2. HTTP 与 gRPC 为什么共享中间件思想? 请求都可被包装成前后置链,认证、日志、恢复和元数据处理可以复用,但协议错误模型不同。
  3. 服务发现返回的地址如何变成一次调用? Resolver 更新节点,Selector 选择节点,客户端连接管理负责复用和重连;发现到调用之间存在缓存和状态机。
  4. 配置热更新的边界是什么? 新配置可以通知监听者,但已经创建的连接、线程池和 handler 不一定自动重建。
  5. 优雅退出解决什么? 先停止接收新请求,再等待在途请求和注销实例,避免进程消失后注册中心仍认为它可用。
项 值
仓库 go-kratos/kratos
本地路径 E:\source\go\kratos
分支 main
Commit 668db92c(2026-06-26)
最近 tag v3.0.0

本册源码坐标均基于该 commit;上游演进后行号可能漂移。

  • 用 App 统一服务器启动、注册、信号处理和优雅停止。
  • 用统一 transport.Server 抽象承载 HTTP 与 gRPC。
  • 用 middleware.Handler 把鉴权、日志、恢复、限流等横切逻辑串成调用链。
  • 用 Registrar、Discovery 和 resolver 把服务治理适配器隔离在框架外。
  • 用可组合的 config source、watcher 和 slog handler 支撑动态配置与结构化日志。
模块 职责 关键入口
根包 应用元数据、生命周期和 hooks New、Run、Stop
transport server、endpoint、请求上下文 Server、Transporter
transport/http HTTP server/client、路由和编解码 NewServer、NewClient
transport/grpc gRPC server/client、拦截器和 resolver NewServer、NewClient
middleware 通用 handler 链和按 operation 选择 Chain、selector.Build
registry、selector 注册发现和节点选择 Registrar、Discovery、Selector
config、log 配置合并/watch 和 slog 装饰器 config.New、log.NewHandler