Kratos

Kratos提供非常多的服务框架,可以帮助用户在搭建网站和应用的时候快速配置通讯,配置HTTP服务,配置数据分发服务,软件提供的微服务内容还是很多的,可以在软件使用api框架组件快速设计项目,直接调用api功能就可以提升设计效率,轻松部署相关的功能模块,支持错误组件功能,通信错误消息处理方案可以使用该组件配置,支持志功能,系统的志分析功能可以直接通过Logger组件配置,支持Registry组件,可以为你的系统配置各种平台的注册接口,方便通过第三方账户注册软件!

Kratos软件功能

Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。

APIs:协议通信以 HTTP/gRPC 为基,通过 Ptobuf 进行定义;

Errs:通过 Ptobuf 的 Enum 作为错误码定义,以及工具生成判定接口;

Metadata:在协议通信 HTTP/gRPC 中,通过 Middleware 规范化服务元传递;

Config:支持多数据源方式,进行配置合并铺平,通过 Atomic 方式支持动态配置;

Logger:标准志接口,可方便集成三方 log 库,并可通过 fluentd 收集志;

Metcs:统一指标接口,可以实现各种指标系统,默认集成 Pmetheus;

Tracing:遵循 OpenTelemetry 规范定义,以实现微服务链路追踪;

Encoding:支持 Accept 和 Content-Type 进行自动选择内容编码;

Transport:通用的 HTTP/gRPC 传输层,实现统一的 Middleware 插件支持;

Registry:实现统一注册中心接口,可插件化对接各种注册中心;

Kratos软件特色

简单:不过度设计,代码平实简单;

通用:通用业务开发所需要的基库的功能;

高效:提高业务迭代的效率;

稳定:基库可测试高,覆盖率高,有线上实践安全可;

健壮:通过良好的基库设计,减少错用;

高能:能高,但不特定为了能做 hack 优化,引入 unsafe ;

扩展:良好的接口设计,来扩展实现,或者通过新增基库目录来扩展功能;

容错:为失败设计,大量引入对 SRE 的理解,鲁棒高;

工具链:包含大量工具链,比如 cache 代码生成,lint 工具等等;

Kratos教程

依赖注入

Wire 是一个灵活的依赖注入工具,通过自动生成代码的方式在编译期完成依赖注入。

在各个组件之间的依赖关系中,通常鼓励显式初始化,而不是全局变量传递。

所以通过 Wire 进行初始化代码,可以很好地解决组件之间的耦合,以及提高代码。

安装工具#

go get github.com/google/wire/cmd/wireCopy

工作原理#

Wire 具有两个基本概念:Pvider 和 Injector。

Pvider 是一个普通的 Go Func ,这个方法也可以接收其它 Pvider 的返回值,从而形成了依赖注入;

使用方式#

在 Kratos 中,主要分为 、、biz、data 服务模块,会通过 Wire 进行模块顺序的初始化;

在每个模块中,只需要一个 PviderSet 提供者,就可以在 wire 中进行依赖注入;

并且我们在每个组件提供入口即可,不需要其它依赖,例如:

通过 wire.go 中定义所有 PviderSet 可以完成依赖注入配置。

初始化组件#

通过 wire 初始化组件,需要定义对应的 wire.go,以及 kratos application 用于启动管理。

在项目的 main 目录中,运行 go generate 进行生成编译期依赖注入代码:

go generate ./…

Errs

APIs 错误码可以统一通过 pto 定义业务原因,通过 ptoc-gen-go-errs 生成判定代码。

在errs包中,错误通过 pto 定义,并且实现对应的 Err 接口,并且可以直接通过 middleware 转换成 gRPC 错误码。

安装工具#

go get github.com/go-kratos/kratos/cmd/ptoc-gen-go-errs@latestCopy

错误定义#

api/helloworld/errs/helloworld.pto

错误生成#

通过 pto 生成对应的代码:

kratos pto client api/helloworld/errs/helloworld.ptoCopy

生成的源码,可以直接通过 errs.IsMissingName(err) 进行对应的错误判定:

使用方式#

Config

使用方式#

配置源可以指定多个,并且 config 会进行合并成 map[stng]intece{},通过 Scan 或者 Value 获取值内容;

Logging

接口实现#

为了方便业务自适配不同的 log 接入使用,Logger 只包含了最简单的 Pnt 接口。当业务需要在 Kratos 框架内部使用自定义的 logging middlerware 的时候,只需要简单实现 Pnt 方法即可

使用方式#

输出志到stdout#

使用自带的 StdLogger 可以创建标准输出志对象. 通过 NewHelper 构造志模块,Helper 生成的志模块可以提供不同等级的志输出。

输出志到fluentd#

引入 fluent sdk

在kratos中引入logging middleware#

在 http.ServerOption 中引入 logging.Server(), 则 Kratos 会在每次收到 HTTP 请求的时候打印详细请求

上一篇 2022-11-28

相关推荐

  • Kratos

    Kratos提供非常多的服务框架,可以帮助用户在搭建网站和应用的时候快速配置通讯,配置HTTP服务,配置数据分发服务,软件提供的微服务内容还是很多的,可以在软件使用api框架组...
正在提交中,请稍等片刻...

发表回复

请登录后评论...
登录后才能评论

评论列表 (0条)