转载

Go-kit调研文档

目录

Go-kit 包介绍

  1. 本身不是一个框架,而是一套微服务工具集,是框架的底层,用它的话来说,如果你希望构建一个框架,而Go-kit 就希望成为你的框架的一部分
  2. 可以用Go-kit 做适应自己平台的框架
  3. 它自身称为toolkit,并不是framework
  4. 它主要是为了满足5大原则,单一职责原则,开放原则,封闭原则,依赖倒置原则,接口隔离原则

包内工具

代码生成工具truss https://github.com/metaverse/truss

三层模型

Go-kit最核心是提供了三层模型来解耦业务,这是我们用它的主要目的,模型由上到下分别是

transport -> endpoint -> service

1. Transport

可以理解为是个拦截器,负责请求协议的实现和路由转发,请求和响应的序列化和反序列化

2. Endpoint

负责功能逻辑转发,这一层会调用Service具体方法

3. Service

服务功能具体实现,这样便于测试,只要 mock 传入的依赖参数即可

兼容功能

  1. Rate Limiter 限流器
  2. Logging 日志
  3. Request tracing 请求追踪
  4. Service Discovery 服务发现

相关组件

其实也就是能解决微服务中常见的问题

1. circuit breaker断路器

hystrix-go gobreaker handy breaker

2. Metrics 指标

prometheus, dogstatsd, influx,graphite 等多个平台

3. 服务发现

consul, dnssrv, etcd, eureka, lb, zookeeper

4. Request Tracing

Opentracing, LightStep, AppDash, Zipkin

缺点

1. 框架太繁琐

每个接口的代码太多,太啰嗦

2. 难理解

主要体现在 Go-kit 的三层模型

3. 冗余代码

在 Endpoint 层,每个 endpoint 都需要重复类似的转换代码,需要写很多decode和encode函数,当然这一点可以利用truss工具生成公共代码,也可以考虑把公共代码抽出来

原文  https://studygolang.com/articles/21014
正文到此结束
Loading...