“Go kit”是一种开源的微服务工具箱,可以用在现代企业应用程序栈中促进和规范化基于 Go 服务的创建。
https://github.com/go-kit/kit
https://gokit.io/
相似的还有
gizmo, a microservice toolkit from The New York Times ★
go-micro, a microservices client/server library ★
gotalk, async peer communication protocol & library
Kite, a micro-service framework
gocircuit, dynamic cloud orchestration
gokit就是一个go语言相关的微服务工具包。它自身称为toolkit,并不是framework。也就是gokit是将一系列的服务集合在一起,提供接口,从而让开发者自由组合搭建自己的微服务项目
gokit的结构分为:
transport
决定用哪种方式提供服务请求,一般就是 http,rpc
endpoint
是gokit最重要的一个层,是一个抽象的接收请求返回响应的函数类型。在这个定义的类型里面会去调用service层的方法,组装成response返回。而gokit中的所有中间件组件都是通过装饰者设计模式注入的。
type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error)
func(log Logger, in endpoint.Endpoint) endpoint.Endpoint {
return func(ctx context.Context, req interface{}) (interface{}, error) {
logger.Log(“input”, toJSON(req))
resp, err := in(ctx, req)
logger.Log(“output”, toJSON(resp), “err”, err)
return resp, err
}
}
service
所有的具体方法写在这里,可以理解为单体web框架中的控制器部分。
工具包
这三个层组成一个gokit微服务应用。此外,作为一个工具包,gokit为此提供了很多微服务工具组件。
认证组件(basic, jwt)
回路熔断器
日志组件
普罗米修斯监控系统
限流器
服务发现系统接口(etcd, consul等)
路由跟踪
一个基本的微服务架构包括:分发层api网关,监控系统,日志系统,服务提供层等
go-kit [TransportServer]
一个 Transport 的 Server 必须要拥有 endPoint、decodeRequestFunc、encodeResponseFunc
1、 endPoint 一个端点代表一个 RPC,也就是我们服务接口中的一个函数
2、 decodeRequestFunc 请求参数解码函数
3、 encodeResponseFunc 返回参数编码函数
请求流程:
请求->decodeRequestFunc -> endPoint -> encodeResponseFunc -> 返回输出
go-kit 提供以下功能:
1、Circuit breaker(熔断器)
2、Rate limiter(限流器)
3、Logging(日志)
4、Metrics(Prometheus 统计)
5、Request tracing(请求跟踪)
6、Service discovery and load balancing(服务发现和负载均衡)
1、安装go-kit包
git clone https://github.com/go-kit/kit.git
2、protobuf文件
生成对应的go语言代码文件:protoc –go_out=plugins=grpc:. book.proto (其中:protobuf文件名为:book.proto
也可以支持thrift
https://github.com/go-kit/kit/tree/master/transport/thrift
3、服务器端代码
4、客户端代码
go-kit抽象的endpoint:
一个Transport的Server 必须要拥有endPoint、decodeRequestFunc、encodeResponseFunc
1、 endPoint一个端点代表一个RPC,也就是我们服务接口中的一个函数
2、 decodeRequestFunc 请求参数解码函数
3、 encodeResponseFunc 返回参数编码函数
请求流程:
请求->encodeResponseFunc -> endPoint -> decodeRequestFunc -> 返回输出
https://books.studygolang.com/go-rpc-programming-guide/part1/thrift.html