go-kit概念整理 | 青训营笔记

145 阅读2分钟

go-kit概念整理 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

go-kit并不是一个框架,它其实是 Go(golang)包(库)的集合,它可以构建健壮、可靠、可维护的微服务。Go kit 通过提供成熟的模式和习惯用法来降低 Go 和微服务的风险

一般上使用 Go kit 构建的服务通常会将其分为三层:

  1. 传输层(Transport layer)
  2. 端点层(Endpoint layer)
  3. 服务层(Service layer)

1传输层

传输域绑定到具体的传输协议,如 HTTP 或 gRPC。在一个微服务可能支持一个或多个传输协议的世界中,这是非常强大的:你可以在单个微服务中支持原有的 HTTP API 和新增的 RPC 服务。

2端点层

端点就像控制器上的处理程序; 它是安全性和抗脆弱性逻辑的所在。如果实现两种传输(HTTP 和 gRPC) ,则可能有两种将请求发送到同一端点的方法。

3服务层

服务(指Go kit中的service层)是实现所有业务逻辑的地方。服务层通常将多个端点粘合在一起。在 Go kit 中,服务层通常被抽象为接口,这些接口的实现包含业务逻辑。Go kit 服务层应该努力遵守整洁架构或六边形架构。也就是说,业务逻辑不需要了解端点(尤其是传输域)概念:你的服务层不应该关心HTTP 头或 gRPC 错误代码。

中间件

Go kit 试图通过使用中间件(或装饰器)模式来执行严格的关注分离(separation of concerns)。中间件可以包装端点或服务以添加功能,比如日志记录、速率限制、负载平衡或分布式跟踪。围绕一个端点或服务链接多个中间件是很常见的。

将所有这些概念放在一起,我们可以看到 Go kit 构建的微服务就像洋葱一样有许多层。