Golang微服务工具包Gokit

大家好,我是 frank。欢迎大家点击标题下方蓝色文字「Golang 语言开发栈」关注公众号。设为星标,第一时间接收推送文章。文末扫码,加群一起学 Golang 语言。

01

介绍

Go kit 是 Go 包的集合,可帮助您构建健壮、可靠、可维护的微服务。它最初被设想为一个工具包,以帮助大型(所谓的现代企业)组织采用 Go 作为实现语言。但它很快就”向下增长”,现在也为较小的初创公司和组织提供服务。

Go kit 服务分为三层:

  • Transport layer 传输层

  • Endpoint layer 端点层

  • Service layer 服务层

请求在传输层进入服务,向下传输经过端点层到达服务层,响应采用相反的过程。

Transports

Go kit 附带了对 HTTP、gRPC、Thrift 和 net/rpc 的支持。传输域绑定到具体的传输协议,比如 HTTP 或 gRPC。可以让我们的单个微服务同时支持 HTTP API 和 RPC 服务。

Endpoints

Endpoints 类似在 Controller 中的 action 或 handler,用于接收 transports 的请求。

Services

Services 实现核心业务逻辑,它通常将多个 Endpoints 组合在一起。在 Go kit 中,Services 通常会定义接口,通过实现接口去实现业务逻辑。

Services 应该不知道 Endpoints,尤其 Transport-domain 的概念。Services 也应该不知道有关 HTTP headers 或 gRPC 错误码的任何信息。

Middlewares

Go kit 尝试通过使用中间件(装饰器模式)来分离与业务逻辑无关的功能。中间件可以包装 Endpoints 或 Services,来添加功能,例如日志记录、限流、负载均衡或链路跟踪。通常围绕 Endpoints 或 Services 使用多个中间件。

02

Go kit 架构模型

在了解了 Transports、Endpoints、Services 和 Middlewares 的概念后,我们可以发现 Go kit 架构模型类似「洋葱」,包含多层。这些层从内到外可以分组到我们的三个域中。在最内层的 Service 域中,所有内容都基于特定 service 定义,并且所有核心业务逻辑都在 service 中实现;中间层 Endpoint 域是将 Service 的每个方法抽象到通用的 Endpoint;在最外层的 Transport 域是 Endpoints 绑定到 HTTP 或 gRPC。

Golang微服务工具包Gokit插图1

图片来自 Go kit 官网

我们可以通过为 service 定义 interface,并提供具体实现来实现核心业务逻辑。然后,通过编写 service 中间件添加额外功能,比如日志记录、分析、检测等。

Go kit 提供 Endpoint 域和 Transport 域中间件,用于限流、熔断、负载均衡和链路跟踪等功能。

03

微服务示例

在了解以上关于 Go kit 的知识之后,我们通过一个简单的微服务示例,学习怎么使用 Go kit 开发项目。

项目包含服务端和客户端,并采用 Consul 作为服务注册与发现组件。

代码目录:

.├── README.md├── client│   ├── endpoint│   ├── main.go│   └── transport├── go.mod├── go.sum└── server├── config├── endpoint├── main.go├── service└── transport

完整代码,请参阅 Github。

04

总结

本文我们介绍 Golang 微服务工具包 Go kit 的基础知识和架构设计,并提供了一个简单的微服务示例代码,读者朋友们在了解 Go kit 之后,可以通过阅读代码,学习怎么使用 Go kit 开发项目。

推荐阅读:

Golang 语言微服务的服务注册与发现组件 Consul

Golang 语言微服务的服务发现组件 Consul 的系统架构介绍

Golang 语言怎么打印结构体指针类型字段的值?

Golang 语言 vendor 在 GOPATH 和 Modules 中的区别

Golang 语言的多种变量声明方式和使用场景

参考资料:https://gokit.io/faq/architecture-and-designhttps://pkg.go.dev/github.com/go-kit/kit@v0.12.0

Golang微服务工具包Gokit插图3

扫描二维码或回复「微信群」,加入微信群

Golang微服务工具包Gokit插图5

点「赞」和「在看」是最大的支持👇

Golang微服务工具包Gokit插图7

👇更多精彩内容,请点击阅读原文

原创文章 Golang微服务工具包Gokit,版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/202210133.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注