Kratos

Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。

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

Features

  • HTTP Blademaster:核心基于gin进行模块化设计,简单易用、核心足够轻量;
  • GRPC Warden:基于官方gRPC开发,集成discovery服务发现,并融合P2C负载均衡;
  • Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式overlord;
  • Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力;
  • Config:方便易用的paladin sdk,可配合远程配置中心,实现配置版本管理和更新;
  • Log:类似zap的field实现高性能日志库,并结合log-agent实现远程日志管理;
  • Trace:基于opentracing,集成了全链路trace支持(gRPC/HTTP/MySQL/Redis/Memcached);
  • Kratos Tool:工具链,可快速生成标准项目,或者通过Protobuf生成代码,非常便捷使用gRPC、HTTP、swagger文档;

快速开始

快速开始前,首先需要安装Go环境:Go version>=1.13

  • CentOS Go环境搭建,
  • Windows自行百度哈

设置代理环境变量,提高下载速度。注意GO1.13及之后支持direct的写法

go env -w GOPROXY=https://goproxy.cn,direct

由于安装过程中需要用到Protobuf,所以建议先安装Protobuf

  • CentOS安装Protobuf
  • Windows安装

快速安装

GO111MODULE=on && go get -u github.com/go-kratos/kratos/tool/kratos

Windows注意,GO111MODULE设置无效,需要单独执行以下命令设置

go env -w GO111MODULE=on

注意:设置GO111MODULE=on后,可能IDE无法识别包内容:
原因:由于设置为on后,go get命令下载的第三方包都会下载到GOPATH的pkg里
需要对IDE进行相关设置

新建demo

cd $GOPATH/src #此处GO111MODULE=on,可在任意目录新建demo
kratos new mykratos


生成目录框架结构:

├── CHANGELOG.md
├── OWNERS
├── README.md
├── api                     # api目录为对外保留的proto文件及生成的pb.go文件
│   ├── api.bm.go
│   ├── api.pb.go           # 通过go generate生成的pb.go文件
│   ├── api.proto
│   └── client.go
├── cmd
│   └── main.go             # cmd目录为main所在
├── configs                 # configs为配置文件目录
│   ├── application.toml    # 应用的自定义配置文件,可能是一些业务开关如:useABtest = true
│   ├── db.toml             # db相关配置
│   ├── grpc.toml           # grpc相关配置
│   ├── http.toml           # http相关配置
│   ├── memcache.toml       # memcache相关配置
│   └── redis.toml          # redis相关配置
├── go.mod
├── go.sum
└── internal                # internal为项目内部包,包括以下目录:
│   ├── dao                 # dao层,用于数据库、cache、MQ、依赖某业务grpc|http等资源访问
│   │   ├── dao.bts.go
│   │   ├── dao.go
│   │   ├── db.go
│   │   ├── mc.cache.go
│   │   ├── mc.go
│   │   └── redis.go
│   ├── di                  # 依赖注入层 采用wire静态分析依赖
│   │   ├── app.go
│   │   ├── wire.go         # wire 声明
│   │   └── wire_gen.go     # go generate 生成的代码
│   ├── model               # model层,用于声明业务结构体
│   │   └── model.go
│   ├── server              # server层,用于初始化grpc和http server
│   │   ├── grpc            # grpc层,用于初始化grpc server和定义method
│   │   │   └── server.go
│   │   └── http            # http层,用于初始化http server和声明handler
│   │       └── server.go
│   └── service             # service层,用于业务逻辑处理,且为方便http和grpc共用方法,建议入参和出参保持grpc风格,且使用pb文件生成代码
│       └── service.go
└── test                    # 测试资源层 用于存放测试相关资源数据 如docker-compose配置 数据库初始化语句等└── docker-compose.yaml

运行示例:

cd mykratos/cmd
go build
./cmd -conf ../configs


打开浏览器访问:

http://localhost:8000/mykratos/start

你会看到输出了Golang 大法好 !!!

如果你修改了demo的名字,访问地址也要跟着修改,例如项目名:mydemo

http://localhost:8000/mydemo/start

除了使用go build运行示例外,你还可以使用以下命令

kratos run

kratos工具包

kratos包含了一批好用的工具集,比如项目一键生成、基于proto生成http&grpc代码,生成缓存回源代码,生成memcache执行代码,生成swagger文档等。

执行以下命令,即可快速安装好kratos工具

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

安装所有工具包

kratos tool install all

kratos本体

kratos是所有工具集的本体,就像go一样,拥有执行各种子工具的能力,如go build和go tool。先让我们看看-h的输出:

NAME:kratos - kratos toolUSAGE:kratos [global options] command [command options] [arguments...]VERSION:0.0.1COMMANDS:new, n        create new projectbuild, b      kratos buildrun, r        kratos runtool, t       kratos toolversion, v    kratos versionself-upgrade  kratos self-upgradehelp, h       Shows a list of commands or help for one commandGLOBAL OPTIONS:--help, -h     show help--version, -v  print the version

可以看到kratos有如:new build run tool等在内的COMMANDS。

工具包使用

kratos new

kratos new是快速创建一个项目的命令,执行如下:

kratos new kratos-demo

即可快速在当前目录生成一个叫kratos-demo的项目。此外还支持指定owner和path,如下:

kratos new kratos-demo -o YourName -d YourPath

注意,kratos new默认会生成通过 protobuf 定义的grpc和bm示例代码的,如只生成bm请加–http,如下:

kratos new kratos-demo -o YourName -d YourPath --http

如只生成grpc请加–grpc,如下:

kratos new kratos-demo -o YourName -d YourPath --grpc

特别注意,如果不是MacOS系统,需要自己进行手动安装protoc,用于生成的示例项目api目录下的proto文件并不会自动生成对应的.pb.go和.bm.go文件。

也可以参考以下说明进行生成:protoc说明

kratos build & run

kratos buildkratos rungo buildgo run的封装,可以在当前项目任意目录进行快速运行进行调试,并无特别用途。

kratos tool

kratos tool是基于proto生成http&grpc代码,生成缓存回源代码,生成memcache执行代码,生成swagger文档等工具集,先看下的执行效果:

kratos toolprotoc(已安装): 快速方便生成pb.go的protoc封装,windows、Linux请先安装protoc工具 Author(kratos) [2019/10/31]
genbts(已安装): 缓存回源逻辑代码生成器 Author(kratos) [2019/10/31]
testcli(已安装): 测试代码生成 Author(kratos) [2019/09/09]
genmc(已安装): mc缓存代码生成 Author(kratos) [2019/07/23]
swagger(已安装): swagger api文档 Author(goswagger.io) [2019/05/05]

安装工具: kratos tool install demo
执行工具: kratos tool demo
安装全部工具: kratos tool install all
全部升级: kratos tool upgrade all

详细文档: https://github.com/go-kratos/kratos/blob/master/doc/wiki-cn/kratos-tool.md

小小说明:如未安装工具,第一次运行也可自动安装,不需要特别执行install

目前已经集成的工具有:

  • kratos 为本体工具,只用于安装更新使用;
  • protoc 用于快速生成gRPC、HTTP、Swagger文件,该命令Windows,Linux用户需要手动安装 protobuf
    工具;
  • swagger 用于显示自动生成的HTTP API接口文档,通过 kratos tool swagger serve
    api/api.swagger.json 可以查看文档;
  • genmc 用于自动生成memcached缓存代码;
  • genbts 用于生成缓存回源代码生成,如果miss则调用回源函数从数据源获取,然后塞入缓存;

另外附上kratos文档pdf版下载:https://download.csdn.net/download/uisoul/12817253

B站微服务框架Kratos详细教程(1)- 安装搭建相关推荐

  1. http get请求相同的key_B站微服务框架Kratos详细教程(2)HTTP服务

    背景 在像微服务这样的分布式架构中,经常会有一些需求需要你调用多个服务,但是还需要确保服务的安全性.统一化每次的 请求日志或者追踪用户完整的行为等等. 你可能需要一个框架来帮助你实现这些功能.比如说帮 ...

  2. Spring Boot如何在最短时间里快速搭建微服务框架,详细教程贡上

    前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...

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

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

  4. 微服务Springcloud超详细教程+实战(二)

    微服务Springcloud超详细教程+实战(二) -------------------------------------- 远程调用方式 无论是微服务还是分布式服务(都是SOA,都是面向服务编程 ...

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

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

  6. 初识golang微服务框架kratos

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

  7. go微服务框架kratos 安装及使用

    windows: 代理和mod 设置 set GO111MODULE=on set GOPROXY=https://goproxy.cn/ 安装protobuf库文件 go get -u github ...

  8. python的flask微服务-flask微服务框架的初步接触

    测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时, 常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicel ...

  9. 微服务和VUE入门教程(26): 微服务之turbine

    微服务和VUE入门教程(26): 微服务之turbine 微服务和VUE入门教程(0): 着手搭建项目 微服务和VUE入门教程(1): 搭建前端登录界面 微服务和VUE入门教程(2): 注册中心 微服 ...

最新文章

  1. cocos2d_x_03_经常使用类的使用_事件_画图
  2. 规则引擎 drools_为什么要用规则引擎?
  3. Android Studio 新建项目的R文件丢失的解决方法
  4. 面向对象-封装、继承、多态
  5. 安装完Visual Team System 2008 Team Explorer出错解决办法
  6. 详解MySQL字符串函数CONCAT()、CONCAT_WS()、INSERT()、REPLACE()、LOWER()、UPPER()用法(二)
  7. CodeForces 1138B暴力+剪枝
  8. 【Spring第四篇】DI注入以及c、p命名空间
  9. python报表自动化系列 - 通过Python使用MySQL数据库
  10. acm入门搜索-石油数目
  11. C语言如何调用REFPROP软件,如何用C++6.0调用refprop物性查询软件
  12. lcd1602c语言编程,C51单片机LCD1602编程经验分享
  13. 爱立信软件测试实习生面试
  14. 简单阻抗匹配电路及公式
  15. PayPal 支付接口详解
  16. python绘制彩色地震剖面断层解释_地震剖面上的断层分析及相关意义
  17. 怎样利用计算机电源,计算机电源功耗如何计算?如何使用电脑功率计算器?
  18. 关于大数据相关的问答汇总,每天持续更新中哦~
  19. WPF将点列连接成光滑曲线——贝塞尔曲线
  20. Kubernetes教程之跟着官方文档从零搭建K8S

热门文章

  1. pytoch人工神经网络基础:最简单的分类(softmax回归+交叉熵分类)
  2. 阿里云相同/不同账号下的ECS和RDS互相内网访问
  3. 王通:SEO没太多技术含量!
  4. Android中定时器AlarmManager的用法
  5. python画五角星为什么144度_使用turtle绘制五角星、分形树
  6. 彻底搞懂:什么是耦合电容?什么是去耦电容?什么是旁路电容?
  7. Linux VPU驱动
  8. H5将网页数据导出为Excel并可下载
  9. 浅谈MMIC发展简史
  10. Detailed analysis for runtime exception vector table and handler in TFA