Go-kit 包介绍
本身不是一个框架,而是一套微服务工具集,是框架的底层,用它的话来说,如果你希望构建一个框架,而Go-kit 就希望成为你的框架的一部分
可以用Go-kit 做适应自己平台的框架
它自身称为toolkit,并不是framework
它主要是为了满足5大原则,单一职责原则,开放原则,封闭原则,依赖倒置原则,接口隔离原则
包内工具
代码生成工具truss https://github.com/metaverse/truss
三层模型
Go-kit最核心是提供了三层模型来解耦业务,这是我们用它的主要目的,模型由上到下分别是
transport -> endpoint -> service
- Transport
可以理解为是个拦截器,负责请求协议的实现和路由转发,请求和响应的序列化和反序列化
- Endpoint
负责功能逻辑转发,这一层会调用Service具体方法
- Service
服务功能具体实现,这样便于测试,只要 mock 传入的依赖参数即可
兼容功能
Rate Limiter 限流器
Logging 日志
Request tracing 请求追踪
Service Discovery 服务发现
相关组件
其实也就是能解决微服务中常见的问题
- circuit breaker断路器
hystrix-go gobreaker handy breaker
- Metrics 指标
prometheus, dogstatsd, influx,graphite 等多个平台
- 服务发现
consul, dnssrv, etcd, eureka, lb, zookeeper
- Request Tracing
Opentracing, LightStep, AppDash, Zipkin
缺点
- 框架太繁琐
每个接口的代码太多,太啰嗦
- 难理解
主要体现在 Go-kit 的三层模型
- 冗余代码
在 Endpoint 层,每个 endpoint 都需要重复类似的转换代码,需要写很多decode和encode函数,当然这一点可以利用truss工具生成公共代码,也可以考虑把公共代码抽出来
相关链接
官网 https://gokit.io/
github https://github.com/go-kit/kit
入门指南 https://www.jianshu.com/p/cffe039fa060
例子 http://gokit.io/examples/
一套demo https://juejin.im/post/5c861c93f265da2de7138615
组件介绍 https://blog.csdn.net/warrior_0319/article/details/77548958
演示demo
https://github.com/Kevin005/gokit-simple-restful-golang
作者:简单的计划
链接:https://www.jianshu.com/p/5463d1ad8749
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。