Skip to content

一、为什么学习 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 与其他框架对比 ​

特性Kratosginkratos (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 --version

1.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 的设计非常重要,敬请期待!