go语言的微服务框架众多,有种百家争鸣的味道。在框架选型的时候,难免有点选择困难症。
笔者选取影响力比较高的几种微服务框架(gin、beego等web框架排除在外)进行比较:
框架名 | 开源时间 | 官网/主文档 | github | github star |
---|---|---|---|---|
go-zero | 2020 | 15.9K | ||
go-kratos | 2019 | 17.1K | ||
tars-go | 2018 | 3K | ||
dubbo-go | 2019 | 3.9K | ||
go-micro | 2015 | - | 17.9K | |
go-kit | 2015 | - | 22.7K | |
jupiter | 2020 | 3.6K |
go-zero
go-zero整体上做为一个稍重的微服务框架,提供了微服务框架需要具备的通用能力,同时也只带一部分的强约束,例如针对web和rpc服务需要按照其定义的DSL的协议格式进行定义,日志配置、服务配置、apm配置等都要按照框架定义的最佳实践来走。
社区建设: go-zero已经是CNCF项目,做为一个后起的微服务框架,不得不说在国内社区生态建设和维护上,完美适配国内开源的现状,在微信群、公众号、各种大会等多渠道进行推广,社区也时常有文章指导实践。
go-kratos
go-kratos整体上做为一个轻量级的微服务框架,B站开源项目; web和rpc服务的 DSL协议直接采用protobuf和grpc进行定义,采用wire做依赖注入、自动生成代码 。 框架定位于解决微服务的核心诉求。
社区建设:社区建设和维护上,算是做的中规中矩,官网更新一般,有公众号和微信群问题解答
tarsgo
tarsgo做为tars这个大的C++重量级微服务框架下的go语言服务框架,腾讯开源项目; 对于有个好爹的这个事情,总是喜忧参半的;好处在于很多能力不用从头开始做起,直接依托母体;劣势就是独立性相对较差,要选用这个tarsgo的前提,就是要先选用tars这个大的框架。
社区建设: Tars已经是linux基础会项目,社群上做的还算可以,毕竟tars作为腾讯开源影响力最大的项目之一,有QQ、微信群。
dubbo go
dubbogo做为dubbo这个大的Java重量级微服务框架下的go语言服务框架,阿里开源项目;优劣基本跟tarsgo一样
社区建设: dubbo已经是apache基础会项目,社群上做的还算可以,有钉钉群。
go-mirco
go-micro是一个轻量级的微服务框架,做为一个在2015年就开源的项目,在当时那个市面上开源的微服务框架稀少的年代,它是为数不多的选择。主要槽点就是作者重心做云服务去啦,相应的社区维护力度较弱。
社区建设:弱
go-kit
go-kit从严格意义上来说,并不能做为一个微服务框架,而应该是一个微服务的工具集,其官方定义上也是这么说,提供各种选项让你自由选择。做为一个在2015年就开源的项目,也是当时很多go项目为数不多的选择之一。
社区建设:弱
jupiter
jupiter做为一个重量级的微服务框架,斗鱼开源项目;整体思路上跟tars和dubbo力图提供一个大一统的框架,更确切的说是一个微服务平台,也带类似tars和dubbo那样的管理控制台,提供各种控制和metric的继承,这也无形中给选用此框架带来了不少代价,tars和dubbo本身是有历史沉淀和大厂背景的,很多腾讯系、阿里系公司会采用。
社区建设:弱,有钉钉群,活跃度不高
以上是笔者的一些拙见,如有不准确和不恰当的地方,也请大家指出
后期笔者准备做一个系列文章:go微服务框架的专栏,来详述各个微服务框架
对go、微服务感兴趣的朋友,也欢迎加wx:blankwusky, 进行交流
本文使用 Zhihu On VSCode 创作并发布