1 考虑因素
- 是否满足公司业务需求
- 维护状态
- 系统功能完整性
- 星标数
- 文档的完整性
- 安全性
2 现有Go微服务框架
2.1 istio
项目简介:Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。
所属国家:美国
开源时间:2017年
维护状态:正常
仓库地址: https://github.com/istio/istio(31.9k stars)
官方文档地址:
英文:https://istio.io/latest
中文:https://istio.io/latest/zh
2.1.1 Istio 特点
参考1:为什么使用 Istio?
- 为
HTTP
、gRPC
、WebSocket
和TCP
流量自动负载均衡。 - 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
- 可插拔的策略层和配置 API,支持访问控制、速率限制和配额。
-
集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪
。 - 在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
2.2 Go-kit
参考1:Go-kit介绍及构建微服务
参考2:【Golang】微服务实现工具 – go-kit 易懂
参考3:go-kit 入门
参考4:简单入门Go Kit微服务框架
项目简介:Go-kit
并不是一个微服务框架,而是一套微服务工具集,我们可以用工具Go-kit为 Go 创建微服务,包含包和接口,有点类似于JAVA Spring Boot,但是没那么强大。可以利用Go-kit提供的API和规范可以创建健壮的,可维护性高的微服务体系,它提供了用于实现系统监控和弹性模式组件的库,例如日志记录、跟踪、限流和熔断等,这些库可以协助开发人员提高微服务架构的性能和稳定性。
所属国家:不详
开源时间:2016年
维护状态:正常。
仓库地址: https://github.com/go-kit/kit(24.2k stars)
官方文档地址: https://gokit.io
2.2.1 暂未找到
2.3 Kratos(奎托斯)
项目简介:Kratos
一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。由bilibili
开源出来,在bilibili
站大量使用。
所属国家:中国
开源时间:2019年6月11号
维护状态:正常。
仓库地址: https://github.com/go-kratos/kratos(19.2k stars)
官方文档地址: https://go-kratos.dev/docs
2.3.1 Kratos 特性
- APIs:协议通信以 HTTP/gRPC 为基础,通过 Protobuf 进行定义;
- Errors:通过 Protobuf 的 Enum 作为错误码定义,以及工具生成判定接口;
- Metadata:在协议通信 HTTP/gRPC 中,通过 Middleware 规范化服务元信息传递;
- Config:支持多数据源方式,进行配置合并铺平,通过 Atomic 方式支持动态配置;
- Logger:标准日志接口,可方便集成三方 log 库,并可通过 fluentd 收集日志;
- Metrics:统一指标接口,可以实现各种指标系统,默认集成 Prometheus;
-
Tracing:
遵循 OpenTelemetry 规范定义,以实现微服务链路追踪;
- Encoding:支持 Accept 和 Content-Type 进行自动选择内容编码;
- Transport:通用的 HTTP/gRPC 传输层,实现统一的 Middleware 插件支持;
- Registry:实现统一注册中心接口,可插件化对接各种注册中心;
- Validation: 通过Protobuf统一定义校验规则,并同时适用于HTTP/gRPC服务;
- SwaggerAPI: 通过集成第三方Swagger插件 能够自动生成Swagger API json并启动一个内置的Swagger UI服务.
2.3.2 Kratos 规范
- 简单:不过度设计,代码平实简单;
- 通用:通用业务开发所需要的基础库的功能;
- 高效:提高业务迭代的效率;
- 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠;
- 健壮:通过良好的基础库设计,减少错用;
- 高性能:性能高,但不特定为了性能做 hack 优化,引入 unsafe ;
- 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能;
- 容错性:为失败设计,大量引入对 SRE 的理解,鲁棒性高;
- 工具链:包含大量工具链,比如 cache 代码生成,lint 工具等等;
2.4 Go-zero
项目简介:是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。开源作者万俊峰,七牛云技术副总裁
。
所属国家:中国
开源时间:2020年8月11号
维护状态:正常。
仓库地址: https://github.com/tal-tech/go-zero(21.4k stars)
官方文档地址:https://go-zero.dev/cn
2.4.1 Go-zero 特性
高性能
- 内建服务发现、负载均衡
- 内建限流
- 自适应熔断
- 自适应降载
- 自动触发,自动恢复
- 超时级联控制
- 自动缓存控制
- 链路跟踪、统计报警等
- 高并发支撑,稳定保障流量洪峰下的服务稳定
易扩展
- 支持中间件,方便扩展
- 面向故障编程,弹性设计
- 完全兼容 net/http
低门槛
- 强大的工具支持,尽可能少的代码编写
- 大量微服务治理和并发工具包
2.4.2 Go-zero 优势
基于 Go 语言
- 高效的性能
- 简洁的语法
- 广泛验证的工程效率
- 极致的部署体验
- 极低的服务端资源成本
优势特性
- 轻松获得支撑千万日活服务的稳定性
- 内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力,无需配置和额外代码
- 微服务治理中间件可无缝集成到其它现有框架使用
- 极简的 API 描述,一键生成各端代码
- 自动校验客户端请求参数合法性
- 大量微服务治理和并发工具包
自研微服务框架
- 有过很多微服务框架自研经验
- 需要有更快速的问题定位能力
- 更便捷的增加新特性
简单易用原则
- 保持简单,第一原则
- 高可用
- 高并发
- 易扩展
- 弹性设计,面向故障编程
- 对业务开发友好,封装复杂度
- 约束做一件事只有一种方式
2.5 Go-micro
项目简介:Micro是一个专注于简化分布式系统开发的微服务生态系统。可插拔的插件化设计,提供强大的可插拔的架构来保证基础组件可以被灵活替换。虽然 go-micro 2.0 依然可以使用,但已经不维护。
所属国家:美国
开源时间:2020年8月11号
维护状态:正常。
仓库地址: https://github.com/go-micro/go-micro(19.7k stars)
官方文档地址: https://micro.dev
2.5.1 Go-micro 特性
- 服务发现:自动服务注册和名称解析。服务发现是微服务开发的核心。
- 负载均衡:基于服务发现构建的客户端负载均衡。一旦我们获得了服务的任意数量实例的地址,我们现在需要一种方法来决定要路由到哪个节点。
- 消息编码:基于内容类型的动态消息编码。这包括默认的protobuf和json。
- 请求/响应:基于RPC的请求/响应,支持双向流。
- Async Messaging:PubSub是异步通信和事件驱动架构的重要设计思想。事件通知是微服务开发的核心模式。
- 可插拔接口:Go Micro为每个分布式系统抽象使用Go接口,因此,这些接口是可插拔的,并允许Go Micro与运行时无关,可以插入任何基础技术
2.5.2 注意事项
- Go-micro 2.0 版本依然可以使用,但已经不维护。
- Go-micro 3.0 版已经转到个人名下(Micro 公司的 CEO Asim),为了避免混淆,项目名也改了,叫
Nitro[3]
。现在它是一个快速的分布式应用程序开发框架。 - Go-micro 3.0 版中文文档较少。
- 各版本兼容性差。
- 国外开源项目,容易受国际局势影响,有安全隐患,会对后续使用造成重大隐患。
2.6 其他框架
2.6.1 提示
注意:这些框架的星标数均小于10K,所以不在重点考虑范围之内。
2.6.2 fabio
项目简介:fabio 是 ebay 团队用 golang 开发的一个快速、简单零配置能够让 consul 部署的应用快速支持 http(s) 的负载均衡路由器。
仓库地址: https://github.com/fabiolb/fabio( 7.1k stars)
官方文档地址: https://fabiolb.net
2.6.3 Goa
项目简介:Goa 是一款用 Go 用于构建微服务的框架,采用独特的设计优先的方法
仓库地址: https://github.com/goadesign/goa(4.9k stars)
官方文档地址: https://goa.design/
2.6.4 Dubbo-go
项目简介:阿里系,由Apache 软件基金会官方发布Go 语言加入 Dubbo 生态,架构是基于dubbo的extension模块和分层的代码设计,主要解决 Go 项目与 Java & Dubbo 项目的互通问题,同时也为 Go 项目提供了一种 RPC 与微服务
仓库地址: https://github.com/apache/dubbo-go(4.3k stars)
官方文档地址: https://dubbogo.github.io/dubbo-go-website/zh-cn
2.6.5 gizmo
项目简介:gizmo是纽约时报开源的go微服务工具,提供如下特性:标准化配置和日志;可配置策略的状态监测端点;用于管理 pprof 端点和日志级别的配置;结构化日志,提供基本请求信息;端点的有用度量;优雅的停止服务; 定义期待和词汇的基本接口。
仓库地址: https://github.com/nytimes/gizmo(3.7k stars)
2.6.6 Jupiter
项目简介:斗鱼开源的一套微服务治理框架,提供丰富的后台功能,管理应用的资源、配置,应用的性能、配置等可视化。
仓库地址: https://github.com/douyu/jupiter
官方文档地址: http://jupiter.douyu.com/(3.9k stars)
2.6.7 Tars-go
项目简介:腾讯系,Tarsgo是基于Golang编程语言使用Tars协议的高性能RPC框架
仓库地址: https://github.com/TarsCloud/TarsGo(3.1k stars)
官方文档地址: https://tarscloud.github.io/TarsDocs/SUMMARY.html#TarsGo
3 选择框架
综合1的考虑因素和2中各框架的特性,初步确定 Kratos(奎托斯)
、Go-zero
这两个框架。
3.1 Kratos(奎托斯)、Go-zero比较
-
使用该框架的企业
Kratos:未知
go-zero:47 -
星标数
Kratos:19.3k
go-zero:21.5k -
生态丰富性
Kratos:14
go-zero:36 -
与ClickHouse关联程度
Kratos:低。
go-zero:高,最近该团队又开源了一个 https://github.com/tal-tech/cds 基于go-zero
构建的ClickHouse
的大数据数据同步、存储、计算系统。注意cds
最新版本的时间是2022年5、6月份。 -
后续开发难度
Kratos:未知。
go-zero:对于新手非常友好, 有非常强大的goctl
脚手架工具,包括一键生成dockerfile
,k8s
的yaml
文件,大大提高了工作效率,节省golang
开发者时间,有更多的时间专注于业务。通过阅读go-zero
源码,获益匪浅。
3.2 确定框架
综合以上相关因素,最终决定使用Go-zero
框架。
4 Go-Zero对应的基础平台
4.1 go-zero
-
代码地址:
https://github.com/zeromicro/go-zero -
文档情况:
go-zero.dev -
功能完整性:
基础平台 -
星标数:
21.5K
4.2 zero-admin
-
代码地址:
https://github.com/feihua/zero-adminAnt Design Pro前端版本:https://github.com/feihua/go-zero-admin-ui
Element Admin UI前端版本:https://github.com/feihua/zero-vue-admin -
文档情况:
无 -
功能完整性:
已有:待定 -
星标数:
316 -
开源时间
2020年11月20号 — 2022年6月29号 -
维护状态
正常文章来源:https://www.toymoban.com/news/detail-443507.html
4.3 ark-admin-zero
- 代码地址
前端地址:https://github.com/arklnk/ark-admin-vuenext
后端地址:https://github.com/arklnk/ark-admin-zero - 文档情况
https://docs.arklnk.com/admin - 功能完整性
已有:菜单管理、角色管理、部门管理、岗位管理、职称管理、用户管理、字典管理、登录日志【8个】 - 星标数
46 -
开源时间
2022年8月9号 — 2022年10月19号 -
维护状态
正常
4.4 simple-admin-core
- 代码地址
https://github.com/suyuan32/simple-admin-core - 文档情况
http://simpleadmin.ryansu.pro/#/simple-admin/zh-cn/ - 功能完整性
已有:登录注册
、菜单管理、角色管理、角色权限
、用户管理、操作日志
、服务注册发现
、配置中心
、字典功能、三方登录管理
、全面支持 K8s
、服务监控
、日志收集
、JWT黑名单
、定时任务
、消息队列
、Ent
【17个】 - 星标数
436 -
开源时间
2022年8月13号 — 至今 -
维护状态
正常
5 选择代码平台
通过第四部分对各代码平台的比较,并结合业务需求,最终决定使用simple-admin-core
。文章来源地址https://www.toymoban.com/news/detail-443507.html
到了这里,关于Go微服务框架及基础平台选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!