目前,tkrok 第 7 代,实现代码行业达到了 20+ 万行,即将达到个人维护的边界。为方便后续个人远程开发者可以方便地接入项目维护工作,特此将第 6 代实现重构升级。分享给社区,为 golang 微服务兴旺,肋力。也方便后续开发者接手了解生产级的代码实现,为自学的开发者指南。
接口契约优先 · 实现细节隐藏 · 协作零泄露
🎯 核心目标拆解
✅ 服务提供方:只暴露 IDL + 生成的 Client/Handler 接口,隐藏业务实现
✅ 服务消费方:仅依赖 RPC 客户端代码,无需拉取服务端源码
✅ 协作开发:通过契约版本协商变更,避免「改接口改到崩溃」
✅ 安全管控:私有仓库 + 权限隔离 + 依赖审计,防止源码泄露
💡 本质:「接口定义仓库」与「业务实现仓库」物理分离 + 自动化代码生成
🏗️ 整体架构设计(参考字节/腾讯实践)
📦 公司 Git 组织
├── 🔓 idl-registry/ # [公开] 接口定义仓库(只含 IDL + 生成代码)
│ ├── user-service/
│ │ ├── user.thrift # 服务契约(唯一真理源)
│ │ ├── kitex_gen/ # 自动生成的 Client/Handler/Model
│ │ ├── go.mod # module company.com/idl/user-service
│ │ └── README.md # 接口变更规范 + 版本日志
│ └── order-service/
│ └── ...
│
├── 🔐 user-service-impl/ # [私有] 服务端实现仓库(仅内部可见)
│ ├── handler/ # 业务逻辑实现(实现 idl 定义的 Handler 接口)
│ ├── main.go # 服务启动入口
│ ├── go.mod
│ │ require company.com/idl/user-service v1.2.0 # 依赖接口仓库
│ └── .gitignore # 禁止提交 handler 业务代码到 idl 仓库
│
├── 🔐 order-service-impl/ # [私有] 其他服务实现
│ └── ...
│
└── 🔐 internal-tools/ # [私有] 代码生成/发布工具链
├── kitex-gen-wrapper.sh # 封装 kitex 生成命令
└── publish-idl.sh # 自动打标签 + 推送到私有 GOPROXY
🔑 关键原则:
idl-registry:只含接口契约 + 生成代码,权限开放给所有开发者*-impl:仅含业务实现,权限严格管控,禁止外部访问- 消费方
go.mod只依赖company.com/idl/*,永远不依赖*-impl