tikrok 第 7 代微服务重构: Golang 微服务 grpc 接口与服务实现隔离方案 - V2EX
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
5wunian

tikrok 第 7 代微服务重构: Golang 微服务 grpc 接口与服务实现隔离方案

  •  
  •   5wunian 4h 23m ago 242 views

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

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     2998 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 13:20 PVG 21:20 LAX 06:20 JFK 09:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86