聊聊 Golang 微服务工具包 Go kit

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

一、介绍

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 使用多个中间件。

二、Go kit 架构模型

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

图片来自 Go kit 官网

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

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

三、微服务示例

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

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

代码目录:

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

完整代码,请参阅 Github。

四、总结

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

参考资料:

​https://gokit.io/faq/#architecture-and-design​

​https://pkg.go.dev/github.com/go-kit/kit@v0.12.0​

责任编辑:武晓燕 来源: Golang语言开发栈
相关推荐

2022-03-22 09:22:21

Go kitgRPC网络传输

2015-03-06 17:46:55

2023-12-25 09:49:01

Golang架构Go-Kit

2021-02-07 09:05:56

微服务结构云原生

2023-12-15 09:57:13

微服务链路服务

2018-05-03 09:03:16

微软工具包Windows

2021-07-20 08:03:43

微服务应用程序

2012-09-13 11:17:22

IBMdw

2021-07-26 11:19:43

微服务开发技术

2023-01-29 09:06:24

微服务划分关联

2018-05-09 08:18:26

微服务改造架构

2021-03-10 10:00:31

Go语言strconv包类型转换工具

2020-02-10 16:07:42

工具包

2011-04-18 09:46:58

Windows工具包活动目录MPS报告

2009-09-16 08:34:17

Windows Emb

2009-04-03 11:12:43

PalmwebOS开发

2021-01-14 09:55:21

Java微服务Go

2022-03-13 23:51:39

Web项目Go

2022-11-02 08:31:53

BFF架构App

2018-12-06 14:56:46

微服务隔离熔断
点赞
收藏

51CTO技术栈公众号