Kratos微服务框架实践| 青训营
对于本次夏季青训营的框架选择,团队在协商后选择了使用由 Bilibili 开源的 Kratos.
Kratos 是一个由 Bilibili 开源,以《战神》内的主角 Kratos 作为名字的 Go微服务框架。具体使用下来感觉框架层次清晰,方便理解。主要依赖 Wire的依赖注入。
项目结构
项目的结构是参照DDD设计的,新建项目也只需要使用 Kratos的CLI 工具,运行 kratos new
即可拉取 Kratos-layout 来生成标准模版。
环境准备
首先,需要安装好对应的依赖环境和工具:
在 mac 里,常用的是使用包管理工具brew
,运行brew install protobuf
和brew install go
,即可安装完对应的环境和工具。使用起来确实还是很方便的。
创建项目
kratos CLI 是与Kratos框架配套的脚手架工具,能够
- 通过模板快速创建项目
- 快速创建与生成 protoc 文件
- 使用开发过程中常用的命令
- 极大提高开发效率,减轻心智负担
首先执行 go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
来安装 Kratos的CLI工具,然后通过命令来创建项目模板。
生成的命令如下:
kratos new <project-name>
生成的内容如下:
.
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api
│ └── helloworld
│ └── v1
│ ├── error_reason.pb.go
│ ├── error_reason.proto
│ ├── greeter.pb.go
│ ├── greeter.proto
│ ├── greeter_grpc.pb.go
│ └── greeter_http.pb.go
├── cmd
│ └── helloo
│ ├── main.go
│ ├── wire.go
│ └── wire_gen.go
├── configs
│ └── config.yaml
├── go.mod
├── go.sum
├── internal
│ ├── biz
│ │ ├── README.md
│ │ ├── biz.go
│ │ └── greeter.go
│ ├── conf
│ │ ├── conf.pb.go
│ │ └── conf.proto
│ ├── data
│ │ ├── README.md
│ │ ├── data.go
│ │ └── greeter.go
│ ├── server
│ │ ├── grpc.go
│ │ ├── http.go
│ │ └── server.go
│ └── service
│ ├── README.md
│ ├── greeter.go
│ └── service.go
├── openapi.yaml
└── third_party
├── README.md
├── errors
│ └── errors.proto
├── google
│ ├── api
│ │ ├── annotations.proto
│ │ ├── client.proto
│ │ ├── field_behavior.proto
│ │ ├── http.proto
│ │ └── httpbody.proto
│ └── protobuf
│ ├── any.proto
│ ├── api.proto
│ ├── compiler
│ │ └── plugin.proto
│ ├── descriptor.proto
│ ├── duration.proto
│ ├── empty.proto
│ ├── field_mask.proto
│ ├── source_context.proto
│ ├── struct.proto
│ ├── timestamp.proto
│ ├── type.proto
│ └── wrappers.proto
├── openapi
│ └── v3
│ ├── annotations.proto
│ └── openapi.proto
└── validate
├── README.md
└── validate.proto
根据文档了解到的内容,Kratos主要是通过protobuf协议来进行传输的,通常是RPC和HTTP,如果我们需要一个服务,只需创建对应的proto文件,按protobuf规则编写所需的message字段和Service,运行后即可自动生成pb文件,无需由用户来写详细的代码。
具体功能实现
在 app
文件夹中,我们将主要的文件分为了几类:
- cmd
- conf
- internal
- biz
- conf
- data
- service
- server
其中,cmd
存放着项目的执行文件,一般包含 main.go
和 wire.go
与其生成的文件。
conf 存放着服务所需的配置文件,一般为config.yaml
.
为了实现隔离,具体的业务实现层放在 internal 内,并分为 biz层、data层、service层、server层和conf。 biz层通常内容为实现业务逻辑,不涉及具体的数据操纵。 data层则主要功能是对数据库进行访问和数据操纵。但是不应过多包含业务逻辑。 service层则是定义了需要对外暴露和进行RPC通信的服务,通常与API定义的 proto 相对应。server层则是建立对应的连接,传输对应的数据和信息。conf是与config对应的proto及其生成文件。
运行 Kratos项目
Kratos项目一般的执行文件是放在cmd
文件夹中,先通过Wire 生成的文件将 Data层、Service层、Biz层注入,最后在CLI执行 Kratos run
即可启动项目。
通过定义的端口访问,即可在后台看到服务器的成功创建。总的来说还是非常方便快速上手的,文档也很完善,值得一试。