Kratos,奎托斯

快速开始

环境需求

  • Go 版本 >= 1.12
  • 依赖 go module。若 Go 版本 <= 1.13,需要设置环境变量 GO111MODULE=on

安装

go get -u github.com/bilibili/kratos/tool/kratos
1

脚手架生成 Demo

kratos new kratos-demo
1

运行

# 先构建再运行
cd kratos-demo/cmd
go build
./cmd -conf ../configs

# 或者直接运行
go run ./cmd/main.go -conf ./configs
1
2
3
4
5
6
7

访问

打开浏览器访问:http://localhost:8000/kratos-demo/start,你会看到输出了Golang 大法好 !!!

微服务介绍

微服务,顾名思义,微小服务。是相对于传统整体服务来说的,是一种将整体服务化整为零的部署方案。优势是在较大的系统中,可以分别部署每个功能模块,进而大大降低模块间的耦合度。整体服务和微服务对比,如下图:

整体服务,各个功能模块组合在一起部署在相同的位置,若需要分布式部署,则需要整体分布式,如下图:

整体服务

微服务,每个服务通常比较小,通常是一个功能模块,每个功能模块服务独立的部署,若需要分布式部署,则单独模块分别分布式部署,如下图:

对比可见,微服务每个服务体量小,可以根据负载量分别部署。但每个模块独立部署之后,就一定需要模块间的通讯,和大量服务的管理,这就是市面上微服务框架产品的主要任务:管理服务和服务间通讯。

Kratos 介绍

Kratos (奎托斯,希腊神话中的一位凡人战神)是 bilibili 开源的一套微服务全功能框架,基于 Go 语言开发。之所以称全功能微服务框架,是因为 Kratos 包含了如下的部分,可以完成微服务架构的全部任务:

  • 应用程序框架,Blademaster,基于 Gin 核心的应用框架。俗称剑圣。
  • RPC 通讯框架,Warden,基于 gRPC 开发,集成了服务注册、发现和负载均衡。
  • 工具箱,Kratos Tool,一套用于代码生成,文档生成等工具的集合。
  • 各种抽相层:数据库,缓存,日志,配置,Trace 等

相对于大部分的其他微服务框架仅仅提供了微服务间的通讯框架不同,Kratos 几乎可以不借助任何其他产品,完成微服务架构和业务逻辑实现。

微服务常用术语

在微服务架构体系中,经常听到:

  • RPC,Remote Procedure Call,远程过程调用。在服务器架构体系中,用于实现微服务间的通讯。Kratos 体系中使用的是 gRPC, 一款由 google 开发的 RPC 系统。(作为类比,可以想象为 Axios 是实现 AJAX 的一款产品)
  • Protobuf,一种数据序列化协议格式。用于在各个微服务间进行数据传递,其优点是表达力强,压缩传输效率高。(作为类比,可以想象 Axios 实现了 AJAX 在前后端使用 JSON 数据格式交互,而 gRPC 实现了 RPC 在服务间使用 protobuf 数据格式交互)
  • 服务注册、发现,管理大量微服务的方案。提供完整的服务管理方式。
  • 负载均衡,在大量微服务间选择特定服务的算法。Kratos 默认使用的是 P2C 算法,是基于服务器延迟的负载算法。

接下来就讲解 Kratos 的各个部分的实现。