当前位置: 首页 > 科技观察

说说Golang微服务工具包Gokit

时间:2023-03-20 19:29:52 科技观察

一、简介Gokit是一组Go包的集合,可以帮助你构建健壮、可靠、可维护的微服务。它最初被设想为一个工具包,以帮助大型(所谓的现代企业)组织采用Go作为实现语言。但它很快“成长起来”,现在也为较小的初创公司和组织提供服务。Gokit服务分为三层:Transportlayer、Endpointlayer、Servicelayer,服务层请求在传输层进入服务,通过端点层向下传输到服务层,响应采用相反的流程。TransportsGo套件支持HTTP、gRPC、Thrift和net/rpc。传输域绑定到特定的传输协议,例如HTTP或gRPC。我们的单个微服务可以同时支持HTTPAPI和RPC服务。端点端点类似于控制器中的操作或处理程序,用于接收传输请求。ServicesServices实现核心业务逻辑,通常将多个Endpoint组合在一起。在Gokit中,Services通常定义接口,通过实现接口来实现业务逻辑。Services不应该知道Endpoints,尤其是Transport-domain的概念。服务也不应该知道任何关于HTTP标头或gRPC错误代码的信息。MiddlewaresGo套件试图通过使用中间件(装饰器模式)来分离与业务逻辑无关的功能。中间件可以包装端点或服务以添加功能,例如日志记录、节流、负载平衡或链接跟踪。通常在端点或服务周围使用多个中间件。2.Gokit架构模型在理解了Transports、Endpoints、Services和Middlewares的概念后,我们可以发现Gokit架构模型类似于一个“洋葱”,包含多个层次。这些层可以从内到外分为我们的三个域。在最里面的Service域中,所有的内容都是基于一个具体的服务来定义的,所有的核心业务逻辑都在服务中实现;中间层Endpoint域将Service的各个方法抽象成一个通用的Endpoint;最外层的Transport字段是绑定到HTTP或gRPC的Endpoints。图片来自Gokit官网。我们可以为服务定义接口,并提供具体的实现来实现核心业务逻辑。然后,通过编写服务中间件来添加额外的功能,例如日志记录、分析、检测等。Gokit提供Endpoint域和Transport域中间件,用于限流、熔断、负载均衡、链路跟踪等功能。3.微服务实例了解了以上关于Gokit的知识后,我们将通过一个简单的微服务实例来学习如何使用Gokit开发项目。该项目包括服务端和客户端,使用Consul作为服务注册和发现组件。代码目录:.├──README.md├──client│├──endpoint│├──main.go│└──transport├──go.mod├──go.sum└──server├──config├──endpoint├──main.go├──service└──transport完整代码参考Github。4.小结本文介绍了Golang微服务工具包Gokit的基础知识和架构设计,并提供了一个简单的微服务示例代码。读者了解Gokit后,可以通过阅读代码开发项目来学习Gokit的使用。参考资料:https://gokit.io/faq/#architecture-and-designhttps://pkg.go.dev/github.com/go-kit/kit@v0.12.0