天天看点

技术研究院006---B站自用的微服务框架——Kratos

大家都知道微服务有两个痛点,一个是如何拆分微服务,微服务的边界怎么划分制定;二是微服务上了规模之后如何管理,因为只要上了规模,任何小小的问题都可能会被放大,最后导致雪崩效应。

Bilibili作为一个大型弹幕视频网站,在竞争日益激烈的互联网行业中,开始重视技术生态的演进,在微服务这块肯定也是相当出色的,今天就和大家推荐一个B站自家开源的微服务框架——Kratos。

Kratos 小型轻量级 Go 微服务框架,包含大量微服务相关功能及工具。B站表示:我们研究提供完整的微服务研究体验,整合相关框架工具后,服务管理相关部分可对整体业务开发周期无感,从而进一步聚焦于业务交付。对开发者而言,Kratos 框架框架也是不错的学习经历,可以了解和参考到微服务方面的技术和经验。

Kratos具有以下功能特性:

  • APIs:协议通信以 HTTP/gRPC 为基础,通过 Protobuf 进行定义;
  • Errors:通过Protobuf的Enum被认为是错误码定义,以及工具生成识别接口;
  • 元数据:在协议通信 HTTP/gRPC 中,通过中间件规范化服务元信息传递;
  • Config:支持多数据源方式,进行配置合并合并平,通过Atomic方式支持动态配置;
  • 记录器:标准日志接口,可方便集成三方日志库,可通过流畅的收集日志;
  • Metrics:统一指标接口,可以实现各种指标系统,默认集成Prometheus;
  • Tracing:遵循OpenTelemetry规范,以实现微服务追踪定义;
  • 编码:支持 Accept 和 Content-Type 进行自动选择内容编码;
  • 传输:通用的HTTP / gRPC层,实现统一的中间件插件支持;
  • 注册处:实现统一注册接口,可插件化对接各种注册中心;
  • 验证:通过Protobuf统一定义验证规则,并同时适用于HTTP/gRPC服务。
  • SwaggerAPI : 通过集成利用Swagger插件能够自动生成Swagger API json并启动一个内置的Swaager UI服务。

Kratos项目结构如下图所示:

技术研究院006---B站自用的微服务框架——Kratos

Kratos如何使用?

Kratos需要需要使用 kratos v2.0.0 以上版本;同时需要安装好对应的依赖环境,以及工具:

  • go
  • protoc
  • protoc-gen-go

接着,你就可以安装 kratos 命令工具:

go get 安装

go get -u github.com/go-kratos/kratos/cmd/kratos/v2@latest
      

go install 安装

go install github.comgo-kratos/kratos/cmd/kratos/v2
# go 1.16版本以上需要指定版本号或使用最新版
go install github.comgo-kratos/kratos/cmd/kratos/v2@latest
      

源码编译安装

git clone GitHub - go-kratos/kratos: A Go framework for microservices.
cd kratos
make install
      

创建项目

# 创建项目模板
kratos new helloworld

cd helloworld
# 拉取项目依赖
go mod download
# 生成proto模板
kratos proto add api/helloworld/helloworld.proto
# 生成proto源码
kratos proto client api/helloworld/helloworld.proto
# 生成server模板
kratos proto server api/helloworld/helloworld.proto -t internal/service
      

项目编译和运行

# 生成所有proto源码、wire等等
go generate ./...

# 运行项目
kratos run
      

测试接口

curl 'http://127.0.0.1:8000/helloworld/kratos'

输出:
{
  "message": "Hello kratos"
}
      

最后附上kratosGithub地址:

​​https://github.com/go-kratos/kratos​​