Kratos微服务框架实践| 青训营

224 阅读3分钟

Kratos微服务框架实践| 青训营

对于本次夏季青训营的框架选择,团队在协商后选择了使用由 Bilibili 开源的 Kratos.

Kratos 是一个由 Bilibili 开源,以《战神》内的主角 Kratos 作为名字的 Go微服务框架。具体使用下来感觉框架层次清晰,方便理解。主要依赖 Wire的依赖注入。

项目结构

kratos ddd

项目的结构是参照DDD设计的,新建项目也只需要使用 Kratos的CLI 工具,运行 kratos new即可拉取 Kratos-layout 来生成标准模版。

环境准备

首先,需要安装好对应的依赖环境和工具:

在 mac 里,常用的是使用包管理工具brew,运行brew install protobufbrew 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.gowire.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即可启动项目。

通过定义的端口访问,即可在后台看到服务器的成功创建。总的来说还是非常方便快速上手的,文档也很完善,值得一试。