Go kit是用于在Go中构建微服务(或优雅的整体)的编程工具包

Go kit本身不是一个框架,而是一套微服务工具集,它可以用来解决分布式系统开发中的大多数常见问题。使开发者可以专注于业务逻辑。

微服务架构设计关注点

  • Trasport 数据传输(序列化和反序列化)
  • Circuit breaker 断路器
  • Rate Limiter 限流器
  • Logging 日志
  • Metrics 指标
  • Request tracing 请求追踪
  • Service Discovery 服务发现

go-kit 组件介绍

Endpoint(端点)

Go kit 使用了抽象的 endpoint 来为每一个RPC建立模型。

type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error)

其他go-kit组件全部通过装饰者模式注入

type Middleware func(Endpoint) Endpoint

Transport(传输层)

transport 模块提供了将特定的序列化操作绑定到 endpoint 的 Helper 方法。

Circuit breaker(回路断路器)

Circuitbreaker 模块提供了很多流行的回路断路的 endpoint 适配器。

回路断路器可以避免雪崩,并且提高了针对间歇性错误的弹性。

Rate limiter(限流器)

ratelimit模块提供了到限流器代码包的 endpoint 适配器。

Logging(日志)

Go kit 的 log 模块针对日志消息的结构化和可操作性实践提供了最好的设计。

Metrics(Instrumentation/指标/度量/仪表盘)

Go kit 的 metric 模块为服务提供了通用并健壮的接口集合,可以绑定到常用的后端服务,比如 expvarstatsdPrometheus

Request tracing(请求跟踪)

Go kit的 tracing 模块提供了为 endpoint 和传输的增强性的绑定功能,以捕捉关于请求的信息,并把它们发送到跟踪系统中。

kitgen(代码生成)

kitgen是一个命令行工具,用于快速生成 Go kit 服务代码。