Go kit:Go 语言微服务编程工具包

Go kit 是 Go 语言中一套成熟的微服务编程工具包,GitHub Star 数达到 27,428。

正文顶部截图

很多公司在服务端使用 Go 语言开发,但在微服务架构上,Go 缺乏像 JVM 生态那样成体系的工具集。Go kit 正是为此而生,它提供了一组包和最佳实践,覆盖日志、指标采集、请求追踪、负载均衡、熔断等微服务常见需求。

README区域截图


核心设计目标

Go kit 的设计遵循四个原则:

  • 在异构 SOA 环境中运行,兼容非 Go kit 编写的服务
  • 以 RPC 作为主要通信模式
  • 传输层和序列化方式可插拔,不限定 JSON/HTTP
  • 适配现有基础设施,不强制使用特定工具

你可以在同一个系统中,外部 API 走 HTTP+JSON,内部服务调用走 gRPC+Protobuf,Go kit 作为中间层把不同组件串接起来。


主要模块

Go kit 的核心组件分为五层:

  • transport:封装 HTTP、gRPC、TCP、UDP 等传输协议的实现
  • endpoint:对请求和响应做抽象,与传输层解耦
  • middleware:用装饰器模式叠加日志、认证、限流、熔断等能力
  • log:轻量的结构化日志接口,可对接 logrus、zap 等日志库
  • metrics:性能指标采集,支持 Prometheus、StatsD、InfluxDB 等

这套分层架构的好处在于,每一层都可以独立替换。换掉传输协议不影响业务逻辑,换掉日志库不影响指标采集。


代码生成

社区提供了多个代码生成工具,可以根据 proto 定义自动生成 Go kit 风格的服务骨架:

  • microgen:从接口定义生成 Go kit 代码
  • truss:基于 gRPC 定义生成完整的服务代码
  • marvin:NY Times 开发的代码生成器
  • mga:基于 goa 设计的生成工具

这些工具减少了模板代码的编写,让开发者把时间花在业务逻辑上。


依赖管理

Go kit 已支持 Go Modules,推荐使用标准工具链管理依赖。当前版本号为 v0,对非 modules 环境保持兼容。


相关项目

Go kit 的设计受到了 Go 微服务生态中多个项目的影响,同时也在反过来影响这个生态:

  • gizmo(NY Times):微服务工具集,与 Go kit 互相借鉴
  • go-micro:分布式系统开发框架
  • logrus:结构化日志库
  • log15:轻量日志库

Go kit 在社区中积累了 27k+ Star,经过大量生产环境验证。如果你的团队在用 Go 构建微服务系统,Go kit 是一个可以优先评估的基础设施选型。

累了 27k+ Star,经过大量生产环境验证。如果你的团队在用 Go 构建微服务系统,Go kit 是一个可以优先评估的基础设施选型。

更多推荐