目录

  • Kratos战神微服务框架
    • 简介
      • 目标
        • 原则
      • 特性
      • 架构
    • CLI工具
      • 安装
      • 创建项目
      • 项目结构
      • 代码生成与运行
        • 生成
        • 运行
      • 测试接口

Kratos战神微服务框架

简介

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

名字来源于:《战神》游戏以希腊神话为背景,讲述奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险经历。

目标

我们致力于提供完整的微服务研发体验,整合相关框架及工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套 Kratos 框架也是不错的学习仓库,可以了解和参考到微服务方面的技术积累和经验。

原则

  • 简单:不过度设计,代码平实简单;
  • 通用:通用业务开发所需要的基础库的功能;
  • 高效:提高业务迭代的效率;
  • 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠;
  • 健壮:通过良好的基础库设计,减少错用;
  • 高性能:性能高,但不特定为了性能做 hack 优化,引入 unsafe ;
  • 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能;
  • 容错性:为失败设计,大量引入对 SRE 的理解,鲁棒性高;
  • 工具链:包含大量工具链,比如 cache 代码生成,lint 工具等等;

特性

  • APIs:协议通信以 HTTP/gRPC 为基础,通过 Protobuf 进行定义;
  • Errors:通过 Protobuf 的 Enum 作为错误码定义,以及工具生成判定接口;
  • Metadata:在协议通信 HTTP/gRPC 中,通过 Middleware 规范化服务元信息传递;
  • Config:支持多数据源方式,进行配置合并铺平,通过 Atomic 方式支持动态配置;
  • Logger:标准日志接口,可方便集成三方 log 库,并可通过 fluentd 收集日志;
  • Metrics:统一指标接口,可以实现各种指标系统,默认集成 Prometheus;
  • Tracing:遵循 OpenTelemetry 规范定义,以实现微服务链路追踪;
  • Encoding:支持 Accept 和 Content-Type 进行自动选择内容编码;
  • Transport:通用的 HTTP/gRPC 传输层,实现统一的 Middleware 插件支持;
  • Registry:实现统一注册中心接口,可插件化对接各种注册中心;

架构

CLI工具

安装

go install github.com/go-kratos/kratos/cmd/kratos/v2@latest

创建项目

通过 kratos 命令创建项目模板:

kratos new helloworld

使用 --nomod 添加服务, 共用 go.mod ,大仓模式

kratos new helloworld
cd helloworld
kratos new app/user --nomod

项目结构

  .
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api // 下面维护了微服务使用的proto文件以及根据它们所生成的go文件
│   └── helloworld
│       └── v1
│           ├── error_reason.pb.go
│           ├── error_reason.proto
│           ├── error_reason.swagger.json
│           ├── greeter.pb.go
│           ├── greeter.proto
│           ├── greeter.swagger.json
│           ├── greeter_grpc.pb.go
│           └── greeter_http.pb.go
├── cmd  // 整个项目启动的入口文件
│   └── server
│       ├── main.go
│       ├── wire.go  // 我们使用wire来维护依赖注入
│       └── wire_gen.go
├── configs  // 这里通常维护一些本地调试用的样例配置文件
│   └── config.yaml
├── generate.go
├── go.mod
├── go.sum
├── internal  // 该服务所有不对外暴露的代码,通常的业务逻辑都在这下面,使用internal避免错误引用
│   ├── biz   // 业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,而 repo 接口在这里定义,使用依赖倒置的原则。
│   │   ├── README.md
│   │   ├── biz.go
│   │   └── greeter.go
│   ├── conf  // 内部使用的config的结构定义,使用proto格式生成
│   │   ├── conf.pb.go
│   │   └── conf.proto
│   ├── data  // 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra层。
│   │   ├── README.md
│   │   ├── data.go
│   │   └── greeter.go
│   ├── server  // http和grpc实例的创建和配置
│   │   ├── grpc.go
│   │   ├── http.go
│   │   └── server.go
│   └── service  // 实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑
│       ├── README.md
│       ├── greeter.go
│       └── service.go
└── third_party  // api 依赖的第三方proto├── README.md├── google│   └── api│       ├── annotations.proto│       ├── http.proto│       └── httpbody.proto└── validate├── README.md└── validate.proto

代码生成与运行

生成

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

运行

# 运行项目
kratos run# 输出
INFO msg=config loaded: config.yaml format: yaml # 默认载入 configs/config.yaml 配置文件
INFO msg=[gRPC] server listening on: [::]:9000 # gRPC服务监听 9000 端口
INFO msg=[HTTP] server listening on: [::]:8000 # HTTP服务监听 8000 端口

测试接口

测试HTTP接口

相关逻辑代码位于 internal/service/greeter.go

curl 'http://127.0.0.1:8000/helloworld/kratos'
# 输出:
{"message": "Hello kratos"
}curl 'http://127.0.0.1:8000/helloworld/error'
# 输出
{"code": 404,"reason": "USER_NOT_FOUND","message": "user not found: error","metadata": {}
}

Kratos战神微服务框架(一)相关推荐

  1. Kratos战神微服务框架(二)

    Kratos战神微服务框架(二) 目录 Kratos战神微服务框架(二) 项目结构 api编写 protobuf编写 使用makefile service层接口实现 biz层 data层 config ...

  2. kratos mysql_kratos微服务框架学习笔记一(kratos-demo)

    本文将为您描述kratos微服务框架学习笔记一(kratos-demo),教程操作步骤: 目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服 ...

  3. B站微服务框架Kratos详细教程(1)- 安装搭建

    Kratos Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具. 名字来源于:<战神>游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成 ...

  4. go微服务框架Kratos简单使用总结

    Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神·诸神黄昏比较火,主角就是奎托斯.这个框架的名字就取自他. 在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比 ...

  5. 初识golang微服务框架kratos

    前言 今天给大家介绍一下Kratos,Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具,使用Kratos的原因主要是感觉原来使用的go-kit工具并不是很方便,期望用上krat ...

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

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

  7. go kratos 微服务框架(笔记一)

    Kratos 微服务框架 1.简介 B站基于Golang实现的一个轻量级开源的面向微服务的框架. Kratos框架不限制您使用任何第三方库来进行项目开发,因此您可以根据喜好来选择库进行集成.我们也会逐 ...

  8. golang 比较完美的通用框架,kratos v2.0 学习,一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。涵盖了互联网开发的常用功能模块的开发库。

    目录 前言 1,关于kratos v2.0 2,Principles 原则 2,Features 特色 3,Architecture 架构 4,总结 前言 本文的原文连接是: https://blog ...

  9. Go:微服务框架介绍

    golang 常见微服务框架有 按starts数排列 1 go-kit go-kit是一个分布式的开发工具集,在大型的组织(业务)中可以用来构建微服务,其解决了分布式系统中大多数常见问题,因此,使用者 ...

最新文章

  1. java监控activemq,ActiveMQ与Spring整合-监听消息
  2. Spring Boot 使用slf4j+logback记录日志配置
  3. StroyBoard中UICollectionView中添加Header和footer
  4. 学习笔记17-C语言-结构、联合、枚举
  5. 固收基金可以长期持有吗?
  6. 计算机和自动化结合的专业,自动化转计算机?你可以选择这个专业!
  7. 使用javap分析Java的字符串操作 1
  8. HTML+CSS+JS生日祝福网页在线制作(多种款式)
  9. 别乱说,算法才不是脑筋急转弯
  10. 10046追踪文件里的tim---clock walk formula(reading Cary Millsap)
  11. pytorch模型转mxnet
  12. 阻止野猪入境 丹麦在德国边境开始建设边境围栏
  13. [Premiere Pro]新建尺寸设置(1080*1920手机屏幕尺寸)
  14. 领先三星、华为,全球首款可折叠柔性屏手机惊艳上市
  15. 基于vue-cli3的vue项目 通过postcss-pxtorem 实现px自动转换成rem
  16. Stm32f103的can模块配置和调试
  17. Python property函数:定义属性
  18. Linux常用命令简介
  19. 南阳题目364-田忌赛马
  20. vue el-select远程搜索

热门文章

  1. linux上必要软件,走向linux之必备软件
  2. 哔哩哔哩课程:Linux命令
  3. SQL Server数据库管理
  4. 强化学习之Actor-Critic (AC, A2C, A3C, DDPG)
  5. 围观:滴滴是如何派单的
  6. RT-Thread内核
  7. grouping_idgrouping sets
  8. 数据分析师之所需要了解的产品系列知识(十)——如何驱动参与(7):双边市场与参与
  9. 抢鞋软件bot服务器系统,国内bot抢鞋软件
  10. 循环有序数组中查找某个数