Skip to content

miniRPC —— 从零到一实现一个 Go RPC 框架

miniRPC 是一个从零实现的轻量级 RPC 框架,以渐进式、模块化的方式逐章构建,涵盖 RPC 框架的核心组件。

项目结构

miniRPC/
├── doc/                # 整体架构设计与技术调研
│   ├── architecture.md # 架构总览、组件关系、线程模型
│   └── tech-research.md# 技术选型调研(序列化/传输/服务发现/负载均衡)
├── codec/              # Day 1: 消息编解码(Gob / Json / Protobuf)
├── service.go          # Day 4: 服务注册与反射调用
├── server.go           # Day 2: 服务端核心(含 Day 5 HTTP、Day 7 超时)
├── client.go           # Day 3: 客户端核心(含 Day 5 HTTP、Day 7 超时)
├── debug.go            # Day 5: 调试页面
├── xclient/            # Day 6: 服务发现与负载均衡
├── middleware/          # Day 8: 中间件与拦截器
├── day1-codec/         # 第一章:文档与示例
├── day2-server/        # 第二章:文档与示例
├── day3-client/        # 第三章:文档与示例
├── day4-service/       # 第四章:文档与示例
├── day5-http/          # 第五章:文档与示例
├── day6-discovery/     # 第六章:文档与示例
├── day7-timeout/       # 第七章:文档与示例
└── day8-middleware/     # 第八章:文档与示例

设计文档(建议先读)

  • 整体架构设计:分层架构、组件关系图、请求生命周期、线程模型、关键设计决策
  • 技术调研报告:主流 RPC 框架对比、序列化/传输/服务发现选型分析、Benchmark 实测数据

学习路线

章节主题核心内容
Day 1消息编解码协议设计、Codec 接口、Gob/Json/Protobuf 三种实现
Day 2服务端TCP 监听、并发处理、请求生命周期
Day 3客户端异步/同步调用、并发安全、连接管理
Day 4服务注册反射、方法发现、类型校验
Day 5HTTP 支持HTTP CONNECT、协议切换、调试页面
Day 6服务发现负载均衡、XClient、Broadcast
Day 7超时容错连接超时、调用超时、处理超时
Day 8中间件拦截器链、日志、Panic 恢复

快速开始

bash
# 运行任意章节的示例
go run ./day2-server/example/
go run ./day6-discovery/example/

# 运行全部测试
go test ./...

# 运行 benchmark(对比三种 Codec)
go test -bench=. -benchmem ./codec/

# 查看测试覆盖率
go test -cover ./...

技术栈

  • Go 1.21+
  • 序列化:encoding/gobencoding/jsongoogle.golang.org/protobuf
  • 传输:net(TCP)、net/http(HTTP CONNECT)
  • 无任何第三方 RPC 框架依赖