go微服务框架kratos简单使用总结-csdn博客


本站和网页 https://blog.csdn.net/w_monster/article/details/127869596 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

go微服务框架Kratos简单使用总结-CSDN博客
go微服务框架Kratos简单使用总结
了迹奇有没
已于 2022-11-15 17:10:41 修改
阅读量8k
收藏
点赞数
分类专栏:
golang
微服务系列
文章标签:
微服务
kratos
于 2022-11-15 17:09:49 首次发布
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/w_monster/article/details/127869596
版权
同时被 2 个专栏收录
18 篇文章
0 订阅
订阅专栏
4 篇文章
Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神·诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。
在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Kratos,原因是Kratos给了开发人员更多的选择和更多的自由空间,方便自定义实现和选用很多东西,可以更快的适应已有的服务 以及 让开发者更快地上手使用(因为选用自己熟悉的工具)。
Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。
原则
简单
:不过度设计,代码平实简单;
通用
:通用业务开发所需要的基础库的功能;
高效
:提高业务迭代的效率;
稳定
:基础库可测试性高,覆盖率高,有线上实践安全可靠;
健壮
:通过良好的基础库设计,减少错用;
高性能
:性能高,但不特定为了性能做 hack 优化,引入 unsafe ;
扩展性
:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能;
容错性
:为失败设计,大量引入对 SRE 的理解,鲁棒性高;
工具链
:包含大量工具链,比如 cache 代码生成,lint 工具等等;
这是kratos官方挂出的框架设计出发点,其中有几点是在现有工具中尤为宝贵,并且十分契合go开发风格的。如 简单,高效,扩展性,容错性。
有人说,使用go最大的好处就是无论什么人,他们水平高或低,可以写出相近的代码,大家都读得懂。
我也认为,go的上手难度较低,风格相对固定,性能也还可以,所以,在中国的互联网企业风靡了起来。
而kratos这个框架,无疑将go的这些特性进行了放大。接下来,我会将我在实际使用中,最关注的一些点做些分享和记录。
首先,是整个kratos的架构风格图,可以看到kratos将整个服务大体分为了3层,API / Service / DB
左侧标注了在 Service和DB层,使用依赖注入(DI)进行实现,工具名称为Wire。
从这张图中,可以看到Wire这个工具几乎贯穿Kratos架构始终,是一个大角色。
1. 传输协议
支持http + grpc两种调用方式,通过编写proto文件来实现。
一般,http开放给外部调用,可以使用restful风格定义。grpc面向内部微服务之间进行调用。
​ 在项目中,会以这样的结构出现,并且可以对不同协议进来的请求进行处理,添加处理的中间件,如
权限校验
熔断限流
等等。
2. 日志
在kratos中,可以自定义日志框架选型,设置日志格式和输出内容,然后将logger对象以依赖注入的方式,分配给server中的grpc server和http server,这样就可以实现每次收到请求后的日志打印。
将logger对象以依赖注入的方式,注入到业务层,就可以在业务层中统一使用logger进行输出。
3. 错误处理
在grpc中,比较通用的一种错误处理方式就是直接通过 proto 预定义定义错误码,然后通过 proto-gen-go 生成帮助代码,直接返回 error。
// 错误码,跟 http-status 一致,并且在 grpc 中可以转换成 grpc-status
"code"
500
// 错误原因,定义为业务判定错误码
"reason"
"USER_NOT_FOUND"
// 错误信息,为用户可读的信息,可作为用户提示内容
"message"
"invalid argument error"
// 错误元信息,为错误添加附加可扩展信息
"metadata"
"foo"
"bar"
结构是这样的。这里可以发现,为了兼容grpc,在http的返回结果中,code也无法自定义,只能跟随httpcode。所以这里客户端或者第三方去处理错误时,需要判断reason字段。
4. 配置管理
使用proto文件定义配置和生成struct,然后将yaml中的内容读取到对应struct 字段中进行使用。
在这里我们可以注意到,在kratos中,除了传输格式使用了proto进行定义之外,错误处理和配置管理,也使用了proto来进行。可以说,一切皆proto。
5. wire
Wire
是一个灵活的依赖注入工具(需要安装),通过自动生成代码的方式在编译期完成依赖注入。通过
进行初始化代码,可以很好地解决组件之间的耦合,以及提高代码维护性。
打开Kratos的示例项目,从main入口看,有一处调用了wireApp方法,这里就是一切的源头(万恶之源)。
这个方法调用的是main同目录的wire文件中的wireApp方法,同目录的wire_gen.go实现了此方法。
wire_gen中去实例化不同service和组建的对象,用于调用。关系图如下:
在每个模块中,只需要一个
ProviderSet
提供者集合,就可以在 wire 中进行依赖注入。
简单的描述一下:有一个数据库连接对象,service需要操作数据库,依赖数据库连接对象。这时候我们可以声明数据库连接对象在
集合,然后在service对象处声明,我需要一个数据库连接对象。 然后我们使用wire工具,就可以自动帮我们生成依赖注入的代码。
这个功能使用的时候,我才真正明白了依赖注入。和使用java的依赖注入是完全不同的感觉。有了显式的依赖注入,让代码间的依赖关系一目了然。当我们查看同事代码时,只需要点开wire_gen.go 代码,什么处理过程 需要依赖哪些组件,清清楚楚,大大提高了代码的维护性。
优惠劵
关注
点赞
觉得还不错?
一键收藏
打赏
知道了
评论
Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神·诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Kratos,原因是Kratos给了开发人员更多的选择和更多的自由空间,方便自定义实现和选用很多东西,可以更快的适应已有的服务 以及 让开发者更快地上手使用(因为选用自己熟悉的工具)。
复制链接
扫一扫
专栏目录
Kratos
是bilibili开源的一套Go
框架
,包含大量
相关
及工具。-
Golang
开发
05-26
及工具。
名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(
)成为战神并展开弑神屠杀的冒险历程。
Goals
我们致力于提供完整的
研发体验,整合相关
及工具后,
治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套
也是不错的学习仓库,可以了解和参考到bilibili在
方面的技术积累和经验。
Features
HTTP Blademaster:核心基于gin进行模块化设计,
易用、核心足够轻量;
GRPC Warden:基于官方gRPC开发,集成discovery服务发现,并融合P2C负载均衡;
Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式overlord;
Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力;
Confi
战神
(一)
qq_53267860的博客
06-29
1587
一套轻量级 Go
及工具。我们致力于提供完整的
也是不错的学习仓库,可以了解和参考到
创建项目
通过
命令创建项目模板:
使用
添加服务, 共用
,大仓模式
项目结构
代码生成与运行
生成
运行
测试接口
测试HTTP接口相关逻辑代码位于......
参与评论
您还未登录,请先
登录
后发表或查看评论
搭建
_B站
详细教程- 安装搭建
weixin_42515376的博客
12-25
953
及工具。名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(
)成为战神并展开弑神屠杀的冒 险历程。FeaturesHTTP Blademaster:核心基于gin进行模块化设计,
易用、核心足够轻量;GRPC Warden:基于官方gRPC开发,集成discovery服务发现,...
快速入门
qq23001186的博客
12-04
518
b站学习地址
官方文档地址实现步骤分析定义 protobuf 文件说明接口利用 protoc 基于 protobuf 生成必要代码将生成的代码整合到项目中完善业务逻辑增加proto文件模板:建议
命令来添加
goland打开项目verifyCode.proto默认会帮我们生成增删改查的方法这里只需要保留GetVerifyCode的即可补充verifyCode.proto// 生成的go代码所在的包// 定义 VerifyCode 服务// 类型常量。
go
学习笔记三(构建单独的http或者rpc demo项目)
01-08
文章目录go
学习笔记三(构建单独的http或者grpc demo项目)grpchttp
学习笔记三(构建单独的http或者grpc demo项目)
前面两篇跑通了demo项目,和大概了解了
demo整体结构,本篇分别构建一个http和一个grpc
单独测试。
grpc
先从grpc 开始, 上篇没有测试grpc接口,这回来尝试,直接跑起demo 服务。
new rpcdemo --grpc
run
INFO 12/26-20:49:08.933 I:/VSProject/
/rpcdemo/
Go-基于
go-micro封装的go
脚手架
08-14
基于
go-micro 封装的go
(笔记一)
jkwanga的博客
12-14
2437
学习笔记
学习
weixin_56349119的博客
09-17
907
B站开源 go
学习(二)
配置
成长之路
05-07
1259
或者说云原生应用的配置最佳实践是将配置文件和应用代码分开管理——不将配置文件放入代码仓库,也不打包进容器镜像,而是在服务运行时,把配置文件挂载进去或者直接从配置中心加载。
的config组件就是用来帮助应用从各种配置源加载配置。
介绍及入门示例
学亮编程手记
05-19
1112
是一个由Bilibili开源的Go语言
,旨在为分布式应用提供高效、灵活、可扩展的解决方案。
在设计时注重以下几个方面:分层设计:
采用分层设计,将业务逻辑和底层
分离,使得应用更易于维护和扩展。高性能:
内置了多种高性能的组件和中间件,例如gRPC、etcd、Prometheus等,可以大幅提升应用的性能和吞吐量。插件化:
支持插件化开发,可以自由选择、替换和扩展各种组件和中间件,以满足不同的业务需求。
B站
详细教程(3)-中间件 示例项目源码
09-08
博文地址:https://blog.csdn.net/uisoul/article/details/108457264
详细教程(6)-服务发现示例项目源码
12-11
博文地址: https://imsoul.blog.csdn.net/article/details/108518785
详细教程(5)-gRPC 示例项目源码
09-10
博文地址:https://blog.csdn.net/uisoul/article/details/108490259
Go-
包含大量
08-13
开发文档PDF版
09-05
及工具。 Github上的文档打开速度超级慢,所以做了这本pdf版的文档方便大家
,本地打开文档,速度实在爽。
详细教程(7)-数据库示例项目源码
12-16
详细教程(7)-数据库示例项目源码 博文地址: https://imsoul.blog.csdn.net/article/details/111267349
深入解读Dubbo:
RPC
的佼佼者
wddblog的博客
04-21
610
来说,Dubbo是一个高性能的分布式服务
,它使得应用可以通过高性能的RPC实现服务的输出和输入功能,与Spring
无缝集成。它通过提供远程调用、负载均衡、服务注册与发现、服务治理等功能,简化了分布式系统的开发和管理,提高了系统的性能和稳定性。Dubbo通过提供远程调用的能力,使得开发者可以方便地调用远程服务,无论这些服务是部署在同一台机器上还是分布在不同的机器上,甚至是不同的数据中心。Dubbo不仅提供了基本的RPC调用功能,还提供了丰富的服务治理功能,包括服务降级、容错机制、流量控制等。
如何解决Windows本地
并发启动后端口占用问题
三心二逸的博客
04-24
197
架构中,经常会遇到本地开发时多个服务需要并行运行,而断开服务后由于某些原因导致端口未正确释放,再次启动服务时发现端口被占用的问题。这会阻碍开发进度,解决这一问题非常关键。本文将详细指导你如何在Windows环境下解决端口占用问题。
玩转
-SonarQube
最新发布
Elcker
781
SonarQube是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且可以集成在IDEA、Jenkins、GIt等服务中,方便随时查看代码质量分析报告。支持的语言:SonarQube通过配置的代码分析规则,从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目,风险等级从A~E划分为5个等级,同时SonarQube可以集成pmd、findbugs、checkstyle等插件来扩展
其他规则来检验代码质量;
、go-zero、kitex、Goyek那个架构最好
06-12
这个问题很难回答,因为每个
都有自己的优缺点,选择适合自己的
需要考虑多个方面,比如性能、易用性、可扩展性等等。
是由B站开发的一个基于Go Micro的
,它提供了自动化代码生成、服务治理、中间件扩展等功能,适合快速开发
应用。
go-zero是由知乎开发的一个基于Go Micro的
,它支持自动化代码生成、服务治理、中间件扩展等功能,同时还提供了RPC和HTTP两种API风格。
kitex是由腾讯开发的一个基于Go Micro的高性能
,它支持多种协议和传输方式,具有较好的性能和稳定性。
Goyek是由小红书开发的一个基于Go Micro的
,它支持自动化代码生成、服务治理、中间件扩展等功能,同时还提供了HTTP和GraphQL两种API风格。
总的来说,这些
都有自己的特点和优点,选择哪个
需要根据自己的需求进行权衡和选择。如果你需要一个高性能的
,可以考虑选择kitex;如果你需要一个易用性好的
,可以考虑选择
或go-zero;如果你需要一个支持GraphQL的
,可以选择Goyek。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄5年
后端领域新星创作者
278
原创
2万+
周排名
7341
总排名
75万+
访问
等级
5149
积分
3953
粉丝
414
获赞
150
1066
私信
热门文章
端口映射问题:Bad Request This combination of host and port requires TLS.
47353
JS
Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法
18965
Java三种方式实现redis分布式锁
18256
IDEA中将代码块封装为方法,IDEA代码重构快捷键
18075
在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)
18029
分类专栏
18篇
Linux越攒越多
16篇
兼职运维的时光
8篇
k8s
10篇
CI/CD
4篇
数据库
14篇
架构之路
7篇
个人成长
闲谈
做个有趣味的程序员
1篇
第三方接口
3篇
kotlin
小知识
26篇
第三方
算法练习-入门篇
15篇
设计模式
私人工作笔记
并发
nacos使用笔记
2篇
Java数据结构
5篇
算法练习-进阶篇
前端小知识
页面小知识
大数据
docker
25篇
搭建一台个人服务器
20篇
工作篇
54篇
有意思的小玩意儿
jdk8之后的新特性
js篇
JavaEE系列
java篇
38篇
Tool
44篇
那些让你措手不及的错误和异常
41篇
最新评论
Gorm Save更新踩坑记录|Gorm Save主键冲突|Duplicate entry ‘xxxx‘ for key ‘PRIMARY
了迹奇有没:
我在使用的时候使用了全局的用户分布式锁,这里确实存在你说的这个问题,我需要加一下标注,感谢~
MyTHicMyuu:
自己写的方法用insert on duplicate key update更新比较危险啊,在高并发下可能会引起间隙锁死锁问题会有事故的吧。。。
springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据
烟雨墨星洲:
写得
非常好
深入Go语言:高效基准测试与性能分析指南
白话机器学习:
写的非常详细,是一篇优质博客,干货满满,让我有了全新的认识,感谢博主分享,让我学到了很多,支持支持。
上传文件到服务器并将文件路径存入数据库
我点了下没毛病啊😂
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
gorm 中 MySQL 错误码映射与主键冲突错误处理
Ubuntu 上的终端革命:一站式 Zsh 和 Oh My Zsh 安装配置指南
2024年
2023年
22篇
2022年
59篇
2021年
71篇
2020年
129篇
目录
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
打赏作者
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:
获取中
扫码支付
您的余额不足,请更换扫码支付或
充值
实付
使用余额支付
点击重新获取
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值