主流微服务框架对比
微服务框架
| 框架 | 作者 | 开源 | 一句话概述 | 优势 | 缺点 | star |
|---|---|---|---|---|---|---|
| go-micro | 国外,Asim 团队 | 2015 | 最经典的 Go 微服务框架之一 | 轻量级框架,入门简单,文档清晰 | 版本兼容性差, 社区活跃度一般 |
22.2k |
| go-zero | 国内,万俊峰团队 | 2020 | 提供了微服务框架 需要具备的通用能力 |
提供了微服务框架需要具备的通用能力 | 社区生态非常好,无论是文档更新还是技术群都很活跃 | 30.8k |
| go-kit | 国外大佬 | 2015 | Go-kit 将自己描述为微服务的标准库。像 Go 一样,go-kit 为您提供可用于构建应用程序的单独包 | 不够活跃 | - | |
| tars-go | 腾讯 | 2018 | tarsgo 是 tars 这个大的C++ 重量级微服务框架下的go语言服务框架 | 优势在于很多能力不用从头开始做起,直接依托母体 tars | 不够活跃 | 3.3k |
| dubbo-go | 阿里 | 2019 | dubbo-go 是 dubbo 这个 Java 重量级微服务框架下的 go 语言服务框架 |
和腾讯开源项目类似 | 不够活跃 | 4.8k |
| go-kratos | B 站 | 2019 | 轻量级的微服务框架,框架定位于解决微服务的核心诉求 | - | 不够活跃 | 24.2k |
技术选型
选框架前先搞懂自己要什么——不同项目对框架的需求天差地别:
- 性能:高并发场景(如秒杀)看QPS、响应延迟;普通场景够用即可,不必过度追求;
- 开发效率:全栈特性(ORM、模板)能省时间,适合快速迭代;轻量框架需自己集成组件,灵活但耗时;
- 生态完整性:微服务需要的服务发现、链路追踪、配置中心等组件是否有成熟集成方案;
- 扩展性:中间件机制是否灵活,能否自定义插件(如权限校验、日志收集);
- 学习成本:团队是否熟悉框架设计理念,文档是否完善;
- 社区活跃度:bug修复速度、版本更新频率,避免选“僵尸框架”。
注意:没有框架能做到“六边形战士”!选型本质是“需求优先级排序”。
常见问题
Q1:Go Kit这么复杂,小团队能不能用?
不建议!小团队用Go Kit会有两个坑:
① 初期搭建耗时1-2周,远超项目预期;
② 后续维护需要专人懂框架设计,新人上手慢。小团队想做微服务,
建议“Gin+第三方组件”组合(Gin+Consul服务发现+Jaeger链路追踪),成本低且灵活。
Q2:框架选好后,后期能换吗?
能换,但成本高,建议前期选对。
如果必须换,可采用“渐进式替换”:
① 先把旧框架服务拆成API网关和业务服务;
② 用新框架重写业务服务,通过网关路由切换流量;
③ 逐步下线旧框架服务
目前还没办法做到各种微服务之间优雅替换,而且替换框架这种做法也是极其不推荐
总结
根据调研结果分析,现在主流的 golang 相关的微服务框架有很多,大部分都是主流大厂内部使用并且开源出来的,不同场景和使用情况不同可以选择对应的框架使用,如:
-
追求稳定经典:go-micro(最早的 go 微服务)
-
国产稳定推荐:go-zero(目前仍旧持续迭代并且社区非常活跃,上手难度较低,缺点就是自定义 api 协议文件,不好迁移至其他微服务)
( 其他看个人习惯选择,比如你习惯了腾讯的开源工具,那么就选择腾讯的(腾讯似乎还有一个 trpc-go)
目前还没有推荐的微服务框架,感觉都比较乱,没有一个统一好用的框架,不过我用过 go-zero,好用是好用,而且社区也很活跃(开源作者直接在线回复),就是自定义 api 协议文件,不方便项目迁移到其他框架
大家都有用过哪些 go 微服务框架呢?欢迎大家在评论区分享交流!!!
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!
本文原文链接: https://fiveyoboy.com/articles/go-micro-server/
备用原文链接: https://blog.fiveyoboy.com/articles/go-micro-server/