一、为什么学习 Kratos?
在正式学习源码之前,我们先来了解一下 Kratos 是什么,以及它为什么值得学习。
1.1 Kratos 是什么?
Kratos 是 bilibili 开源的微服务框架,被誉为"B站微服务架构的基石"。它提供了一整套微服务开发解决方案:
┌─────────────────────────────────────────────────────────────────┐
│ Kratos 能力矩阵 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ API 定义 │ │ 代码生成 │ │ 协议支持 │ │
│ │ (Protobuf) │ │ (goctl) │ │ gRPC + HTTP │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 服务注册 │ │ 负载均衡 │ │ 熔断限流 │ │
│ │ (Registry) │ │ (Selector) │ │ (Breaker) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 链路追踪 │ │ 配置管理 │ │ 依赖注入 │ │
│ │ (Tracing) │ │ (Config) │ │ (Wire) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘核心能力说明
| 能力 | 说明 | 地位 |
|---|---|---|
| API 定义 | 使用 Protobuf 定义 API | 业界标准 |
| 代码生成 | goctl 自动生成 CRUD 代码 | 提升效率 |
| 多协议支持 | 同时支持 gRPC 和 HTTP | 灵活部署 |
| 服务治理 | 熔断、限流、负载均衡 | 稳定性保障 |
| 可观测性 | 链路追踪、指标监控 | 运维必备 |
1.2 为什么选择 Kratos?
1.2.1 B站背书
┌─────────────────────────────────────────────────────────────┐
│ B站亿级流量验证 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 日活用户: 3亿+ │
│ 峰值 QPS: 100万+ │
│ 服务数量: 1000+ │
│ │
│ Kratos 经过生产环境验证,值得信赖! │
│ │
└─────────────────────────────────────────────────────────────┘1.2.2 与其他框架对比
| 特性 | Kratos | gin | kratos (Bilibili) | echo |
|---|---|---|---|---|
| API 定义 | Protobuf | 无 | Protobuf | 无 |
| 代码生成 | 自动 | 无 | 插件生成 | 无 |
| 熔断限流 | 内置 | 需集成 | 内置 | 需集成 |
| 服务注册 | 内置 | 需集成 | 内置 | 需集成 |
| gRPC 支持 | 原生 | 需集成 | 原生 | 需集成 |
| 学习成本 | 低 | 极低 | 中等 | 低 |
| 适用场景 | 微服务 | API 服务 | 微服务 | API 服务 |
1.2.3 Kratos 的优势
┌─────────────────────────────────────────────────────────────┐
│ Kratos 核心优势 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. API First 设计理念 │
│ └── Protobuf 定义 → 自动生成代码 → 保持一致 │
│ │
│ 2. 完整工具链 │
│ └── goctl: 代码生成、模板生成、API 文档生成 │
│ │
│ 3. 零成本学习曲线 │
│ └── 遵循 Go 社区最佳实践,学习成本低 │
│ │
│ 4. 活跃社区 │
│ └── 中文社区、问题响应及时、持续迭代 │
│ │
│ 5. 丰富生态 │
│ └── 配置中心、注册中心、链路追踪、监控集成 │
│ │
└─────────────────────────────────────────────────────────────┘1.3 Kratos 能做什么?
1.3.1 微服务开发
┌─────────────────────────────────────────────────────────────┐
│ 微服务架构示例 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ API Gateway│───▶│ User Svc │ │ Order Svc│ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │
│ └───────────────┼───────────────┘ │
│ ▼ │
│ ┌──────────┐ │
│ │ Registry│ (服务发现) │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘1.3.2 典型应用场景
| 场景 | 说明 | Kratos 优势 |
|---|---|---|
| RESTful API | 构建 HTTP API 服务 | 路由、中间件完善 |
| gRPC 服务 | 构建 gRPC 服务 | 原生支持 |
| 混合服务 | 同时提供 HTTP 和 gRPC | 一套代码双协议 |
| 微服务架构 | 多服务协作 | 服务治理能力 |
| 中台服务 | 企业级中台 | 完整工具链 |
1.4 Kratos 项目结构
kratos/
├── cmd/ # 入口和工具
│ ├── kratos/ # 主程序
│ └── goctl/ # 代码生成工具
├── contrib/ # 第三方集成
│ ├── config/ # 配置中心
│ ├── registry/ # 服务注册
│ ├── tracing/ # 链路追踪
│ └── metrics/ # 监控
├── errors/ # 错误处理
├── examples/ # 示例
├── log/ # 日志
├── metadata/ # 元数据
├── middleware/ # 中间件
│ ├── recovery/ # 恢复
│ ├── tracing/ # 链路追踪
│ ├── validate/ # 验证
│ └── logging/ # 日志
├── registry/ # 服务注册发现
├── router/ # 路由
├── selector/ # 负载均衡
├── transport/ # 传输层
│ ├── grpc/ # gRPC
│ └── http/ # HTTP
├── util/ # 工具
├── version/ # 版本
└── wire/ # 依赖注入1.5 快速开始示例
1.5.1 安装
bash
# 安装 Kratos
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
# 安装 goctl
go install github.com/go-kratos/kratos/cmd/goctl/v2@latest
# 验证安装
kratos --version
goctl --version1.5.2 创建项目
bash
# 创建新项目
kratos new helloworld
# 进入项目
cd helloworld
# 生成代码
go generate ./...
# 运行
go run .1.5.3 简单示例
go
package main
import (
"github.com/go-kratos/kratos/v2"
"github.com/go-kratos/kratos/v2/transport/http"
)
func main() {
// 创建 HTTP Server
server := http.NewServer(
http.Address(":8080"),
)
// 注册路由
server.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello Kratos!"))
})
// 创建应用
app := kratos.New(
kratos.Name("helloworld"),
kratos.Server(server),
)
// 运行
app.Run()
}1.6 本章小结
┌─────────────────────────────────────────────────────────────┐
│ 本章总结 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✓ Kratos 是 B站开源的微服务框架 │
│ │
│ ✓ 提供 API 定义、代码生成、服务治理等完整能力 │
│ │
│ ✓ 支持 gRPC + HTTP 双协议 │
│ │
│ ✓ 具备熔断、限流、负载均衡等高级特性 │
│ │
│ ✓ 适合构建企业级微服务架构 │
│ │
└─────────────────────────────────────────────────────────────┘下章预告
下一章我们将学习核心概念铺垫,包括:
- 什么是依赖注入?
- 什么是依赖注入容器?
- 什么是 Wire?
这些概念对于理解 Kratos 的设计非常重要,敬请期待!