Skip to content

Latest commit

 

History

History
32 lines (22 loc) · 3.47 KB

README.md

File metadata and controls

32 lines (22 loc) · 3.47 KB

基于grpc技术,开箱即用的微服务框架

基于grpc技术,开箱即用的微服务框架。目标做成一个符合云原生的跑在grpc上的微服务快速创建框架。

简介

�在使用过go-kit和go-micro这两个go语言里毕竟出众的框架后,两个框架都有使用不爽的地方。

go-kit

go-kit目标是成为一个微服务的工具链,但本身不提供具体实现方式,它支持的通讯方式很多,但是多带来一个问题就是通用性问题,通用意味着兼容和丢失对某种通讯协议的友好度。 比方说在用go-kit开发grpc微服务时,你需要编写3层代码,分别是transport、endpoint和service,目的是很好的,就是我们的transport层用http或者grpc或者其它任何接入方式都不影响service层代码编写,但是他却忽略了很重要一个现实情况,就是一个公司或一个团队要是有一种通讯协议时,它不会说短时间内切换为另一种协议,不希望因为要兼容可能永远都使用不到的协议而在代码编写上浪费更多时间,本人在开发中就遇到了频繁的编写类似代码,最后编写了工具代替手工编写。总结就是是一个很好的工具库,单需要在使用时做很多东西,且代码3层耗费开发周期。

go-micro

使用go-micro是在入职一家新公司时开始的,这个框架可以说是go语言里最简单的微服务框架,使用简单可以快速编写代码,基本不存在go-kit存在的问题,但是它存在的问题是它做的太多了,编写了一个grpc的proto解析工具,相当于改变了grpc本身标准接口,改成了它自己的接口形式,最主要原因也就是便于插入中间件,我本人不希望改变原生grpc使用方式。第二个不友好的地方还是它做的太多了,在我编写go标准单元测试时失败了,因为它本身代码中使用了和go test冲突的命令行参数,导致我无法使用单元测试!总结就是做的太多版本发布也很块,它代码中可能存在bug你需要升级,这个时候你可能发现不是把依赖升级就可以完成的,需要改代码,当服务一多这个过程是很痛苦的。

microkit

也就是本项目,为了解决以上问题让微服务开发更加清爽,造一个简单的轮子,让开发更快。

  1. 只使用grpc作为服务transport,所以不需要像go-kit实现3层代码,以原生grpc的方式开发代码
  2. 提供统一项目目录和模板项目,并提供一个cli工具用于创建项目。
  3. 实现常用grpc中间件,使使用本框架的项目可以从最开始就支持日志中间件、链路追踪、限流熔断、性能监控等中间件。
  4. 微服务应尽量少的读取本地配置,所以本项目配置从环境变量读取一个服务必须的参数,其它全从配置中心获取。
  5. 提供统一的客户端调用库的编写方式,加载中间件
  6. 命令行工具要可以生成helm项目配置,已方便项目符合与原生可以方便部署到k8s等云平台

参考

  1. grpc中间件 https://github.com/grpc-ecosystem/go-grpc-middleware
  2. grpc普罗米修斯中间件 github.com/grpc-ecosystem/go-grpc-prometheus
  3. grpc中间件示例 https://github.com/g4zhuj/grpc-wrapper
  4. 其它文章 https://segmentfault.com/a/1190000014546372 https://segmentfault.com/a/1190000012439580 https://segmentfault.com/a/1190000015347065