目前,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
