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

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项目结构如下图所示:

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 helloworldcd 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

技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152 
CSDN账号:credreamer 
开通了个人技术微信公众号:credream,有需要的朋友可以添加相互学习

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

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

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

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

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

  3. 初识golang微服务框架kratos

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

  4. 技术研究院005---如何基于DDD构建微服务架构

    微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...

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

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

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

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

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

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

  8. 全网疯传,阿里 P8 技术官的架构笔记外泄:微服务分布式架构实践手册

    前言 阿里 P8 大佬的架构笔记:微服务分布式架构实践手册从企业的真实需求出发,理论结合实际,深入讲解 Spring Cloud 微服务和分布式系统的知识. 整份笔记共分为 4 部分: 第一部分:概述 ...

  9. 容器化技术与微服务结合---结合springcloud微服务框架进行部署(含切换成阿里云docker仓库)(五)

    目录 系列 更换成阿里云仓库 开通阿里云镜像服务 创建仓库 本地k8s切换成阿里云的镜像仓库 测试阿里云镜像 准备简单的微服务 eureka 应用配置 k8s配置: demo-a 应用配置 k8s配置 ...

最新文章

  1. linux下软件的安装[转]
  2. lua脚本简单编辑及常用指令
  3. apollo 配置中心_Apollo配置中心搭建笔记
  4. Oracle区概念总结
  5. 锁Lock,主要是重入锁和读写锁
  6. css-布局1-基本属性
  7. OBS视频采集流程分析
  8. python 股票估值_隐藏价值的角落:限售股AAP估值及PYTHON实现方法(上)
  9. Win10 微软拼音添加小鹤双拼以及其他配置
  10. python高考考题_假如高考考python编程,这些题目你会几个呢?
  11. 屏幕写画和缩放:ZoomIt【转】
  12. 什么是嵌入式人工智能
  13. OSPF你懂多少之经典问题50个
  14. OpenCV API使用笔记 —— 4. 如何保存视频文件
  15. 排序算法总结--希尔排序
  16. 实车、台架功能测试介绍
  17. AI算法工程师手册,Google软件开发指南,JAX强化学习环境,全国高校生活质量信息汇总,几篇AI前沿论文 | ShowMeAI资讯日报
  18. Umeng推送消息的坑,Android Service的android:exported详解
  19. python必背的英语单词怎么写_学习Python必须知道的单英文词,你都会了吗你都背了吗?...
  20. DRN 与 GAN相关知识

热门文章

  1. python离散变量_python – 当涉及离散变量时,pymc3与pymc2的困难
  2. 计算机丢失lib.dll,libprotobuf.dll
  3. linux中elf文件的作用,Linux中ELF格式文件介绍
  4. python 进程通信 延时_Python-----进程通信队列
  5. 监控视频转发方案探讨-内网转外网
  6. STM8学习笔记---如何在程序中确定寄存器名称
  7. 在虚拟机下安装Linux
  8. python中的*和**参数:nn.Sequential(*layers)
  9. qt-rcc提示找不到资源文件
  10. Qt网络获取本机网络信息