Go 教程:使用 GO-KIT 来构建微服务(上)

微服务是软件架构领域目前最流行的术语之一。

对于『微服务』一词,有许多不同的解释,我想说的是,微服务是单个程序员可以设计、实现、部署和维护的应用程序。

在一个整体应用程序中,组件通过语言级的方法或函数彼此调用。相反,基于微服务的应用程序是运行在多台机器上的分布式系统。每个服务实例是不同的进程。因此,这些服务必须使用进程间通讯进行交互。

服务间通信最简单的解决方案是基于 HTTP 协议使用 JSON 格式的数据进行交互,然后还有更多的选择比如:gRPC,pub/sub 等等。

这听起来很酷,微服务也带来了很多挑战:

  • 序列化
  • 日志记录
  • 熔断
  • 请求跟踪
  • 服务发现

如果你是一个 Go 开发者,go-kit 为开发者提供了一套抽象,包和接口,这样你实现的服务就可以标准化。

我想开始一个使用 go-kit 工具的深入教程。我们将创建一个微服务系统,设置环境,重温服务件交互的逻辑。

我们将用以下几个微服务创建一个 bug 追踪系统:

  • Users
  • Bugs
  • Notificator

有些服务可以通过 HTTP 协议使用 JSON 数据交互,服务间通信将使用 gRPC 实现。

go-kit 回顾

我们已经理解 go-kit 并不是框架,我们可以用工具 kit 为 Go 创建微服务,包含包和接口,它类似于 JAVA Spring Boot , 但是只是小范围。

让我们开始配置项目:
在我们未开始之前,我们可以使用 “kitgen” 命令行工具生成服务

go-kit CLI

创建独立的包可从模板创建服务:

go get github.com/go-kit/kit
go get github.com/kujtimiihoxha/kit

创建以下服务:

kit new service users
kit new service bugs
kit new service notificator

这些命令将生成初始的文件夹结构和服务接口。接口默认为空,让我们定义接口中的函数。从创建用户函数开始。

users:

package service

import "context"

// 用户服务
type UsersService interface {
    Create(ctx context.Context, email string) error
}

bugs:

package service

import "context"

// bug服务
type BugsService interface {
    // 在这里添加你自己的方法
    Create(ctx context.Context, bug string) error
}

notifcator:

package service

import "context"

// 通知服务
type NotificatorService interface {
    // 在这里添加你自己的方法
    SendEmail(ctx context.Context, email string, content string) error
}

然后我们需要运行一个命令生成一个服务,这个命令将创建服务模板,服务中间件和终端代码。同时它还创建了一个 cmd/ 包来运行我们的服务。

kit generate service users --dmw
kit generate service bugs --dmw

-dmw 参数创建默认的终端中间件和日志中间件。

这个命令已经将 go-kit 工具的端点包和 HTTP 传输包添加到我们的代码中。现在我们只需要在任意一个位置实现我们的业务代码就可以了。

我们将在下一篇文章中继续讨论业务逻辑。

因为通知服务是一个内部服务,所以不需要 REST API,我们用 gRPC 来实现它。gRPC 是谷歌的 RPC 框架,如果你以前从未使用过,请看这里

为此,我们需要先安装 protoc 和 protobuf 。

kit generate service notificator -t grpc --dmw

这同时生成了 .pb 文件,我们将在下一篇文章中去解决它。
go-kit CLI 还可以创建 docker-compose 模板,让我们试一试。

kit generate docker

这个命令生成了 Dockerfile 和带有端口映射的 docker-compose.yml 。将它运行起来并调用 /create 接口 。

docker-compose up

Dockerfiles 使用了 go 的 watcher 包,如果 Go 代码发生了变化,它会更新并重启二进制文件,这在本地环境中非常方便。

现在我们的服务运行的端口是 8800,8801,8802。可以试着调用用户服务:

curl -XPOST http://localhost:8800/create -d '{"email": "test"}'

结论

我们还没有实现服务,但是在短时间内搭建了一个良好的本地环境,同时用 Docker 封装好了, 可以部署到其他的环境中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值