Go微服务框架及基础平台选择

Go微服务框架及基础平台选择

  • 1 考虑因素
  • 2 现有Go微服务框架
    • 2.1 istio
      • 2.1.1 Istio 特点
    • 2.2 Go-kit
      • 2.2.1 暂未找到
    • 2.3 Kratos(奎托斯)
      • 2.3.1 Kratos 特性
      • 2.3.2 Kratos 规范
    • 2.4 Go-zero
    • 2.4.1 Go-zero 特性
    • 2.4.2 Go-zero 优势
    • 2.5 Go-micro
      • 2.5.1 Go-micro 特性
      • 2.5.2 注意事项
    • 2.6 其他框架
      • 2.6.1 提示
      • 2.6.2 fabio
      • 2.6.3 Goa
      • 2.6.4 Dubbo-go
      • 2.6.5 gizmo
      • 2.6.6 Jupiter
      • 2.6.7 Tars-go
  • 3 选择框架
    • 3.1 Kratos(奎托斯)、Go-zero比较
    • 3.2 确定框架
  • 4 Go-Zero对应的基础平台
    • 4.1 go-zero
    • 4.2 zero-admin
    • 4.3 ark-admin-zero
    • 4.4 simple-admin-core
  • 5 选择代码平台

1 考虑因素

  1. 是否满足公司业务需求
  2. 维护状态
  3. 系统功能完整性
  4. 星标数
  5. 文档的完整性
  6. 安全性

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?

  • HTTPgRPCWebSocketTCP 流量自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
  • 可插拔的策略层和配置 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 特性

  1. APIs:协议通信以 HTTP/gRPC 为基础,通过 Protobuf 进行定义;
  2. Errors:通过 Protobuf 的 Enum 作为错误码定义,以及工具生成判定接口;
  3. Metadata:在协议通信 HTTP/gRPC 中,通过 Middleware 规范化服务元信息传递;
  4. Config:支持多数据源方式,进行配置合并铺平,通过 Atomic 方式支持动态配置;
  5. Logger:标准日志接口,可方便集成三方 log 库,并可通过 fluentd 收集日志;
  6. Metrics:统一指标接口,可以实现各种指标系统,默认集成 Prometheus;
  7. Tracing遵循 OpenTelemetry 规范定义,以实现微服务链路追踪;
  8. Encoding:支持 Accept 和 Content-Type 进行自动选择内容编码;
  9. Transport:通用的 HTTP/gRPC 传输层,实现统一的 Middleware 插件支持;
  10. Registry:实现统一注册中心接口,可插件化对接各种注册中心;
  11. Validation: 通过Protobuf统一定义校验规则,并同时适用于HTTP/gRPC服务;
  12. SwaggerAPI: 通过集成第三方Swagger插件 能够自动生成Swagger API json并启动一个内置的Swagger UI服务.

2.3.2 Kratos 规范

  1. 简单:不过度设计,代码平实简单;
  2. 通用:通用业务开发所需要的基础库的功能;
  3. 高效:提高业务迭代的效率;
  4. 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠;
  5. 健壮:通过良好的基础库设计,减少错用;
  6. 高性能:性能高,但不特定为了性能做 hack 优化,引入 unsafe ;
  7. 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能;
  8. 容错性:为失败设计,大量引入对 SRE 的理解,鲁棒性高;
  9. 工具链:包含大量工具链,比如 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 特性

高性能

  1. 内建服务发现、负载均衡
  2. 内建限流
  3. 自适应熔断
  4. 自适应降载
  5. 自动触发,自动恢复
  6. 超时级联控制
  7. 自动缓存控制
  8. 链路跟踪、统计报警等
  9. 高并发支撑,稳定保障流量洪峰下的服务稳定

易扩展

  1. 支持中间件,方便扩展
  2. 面向故障编程,弹性设计
  3. 完全兼容 net/http

低门槛

  1. 强大的工具支持,尽可能少的代码编写
  2. 大量微服务治理和并发工具包

2.4.2 Go-zero 优势

基于 Go 语言

  1. 高效的性能
  2. 简洁的语法
  3. 广泛验证的工程效率
  4. 极致的部署体验
  5. 极低的服务端资源成本

优势特性

  1. 轻松获得支撑千万日活服务的稳定性
  2. 内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力,无需配置和额外代码
  3. 微服务治理中间件可无缝集成到其它现有框架使用
  4. 极简的 API 描述,一键生成各端代码
  5. 自动校验客户端请求参数合法性
  6. 大量微服务治理和并发工具包

自研微服务框架

  1. 有过很多微服务框架自研经验
  2. 需要有更快速的问题定位能力
  3. 更便捷的增加新特性

简单易用原则

  1. 保持简单,第一原则
  2. 高可用
  3. 高并发
  4. 易扩展
  5. 弹性设计,面向故障编程
  6. 对业务开发友好,封装复杂度
  7. 约束做一件事只有一种方式

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 特性

  1. 服务发现:自动服务注册和名称解析。服务发现是微服务开发的核心。
  2. 负载均衡:基于服务发现构建的客户端负载均衡。一旦我们获得了服务的任意数量实例的地址,我们现在需要一种方法来决定要路由到哪个节点。
  3. 消息编码:基于内容类型的动态消息编码。这包括默认的protobuf和json。
  4. 请求/响应:基于RPC的请求/响应,支持双向流。
  5. Async Messaging:PubSub是异步通信和事件驱动架构的重要设计思想。事件通知是微服务开发的核心模式。
  6. 可插拔接口:Go Micro为每个分布式系统抽象使用Go接口,因此,这些接口是可插拔的,并允许Go Micro与运行时无关,可以插入任何基础技术

2.5.2 注意事项

  1. Go-micro 2.0 版本依然可以使用,但已经不维护。
  2. Go-micro 3.0 版已经转到个人名下(Micro 公司的 CEO Asim),为了避免混淆,项目名也改了,叫 Nitro[3]。现在它是一个快速的分布式应用程序开发框架。
  3. Go-micro 3.0 版中文文档较少。
  4. 各版本兼容性差。
  5. 国外开源项目,容易受国际局势影响,有安全隐患,会对后续使用造成重大隐患。

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比较

  1. 使用该框架的企业
    Kratos:未知
    go-zero:47

  2. 星标数
    Kratos:19.3k
    go-zero:21.5k

  3. 生态丰富性
    Kratos:14
    go-zero:36

  4. 与ClickHouse关联程度
    Kratos:低。
    go-zero:高,最近该团队又开源了一个 https://github.com/tal-tech/cds 基于go-zero构建的ClickHouse的大数据数据同步、存储、计算系统。注意 cds 最新版本的时间是2022年5、6月份。

  5. 后续开发难度
    Kratos:未知。
    go-zero:对于新手非常友好, 有非常强大的 goctl 脚手架工具,包括一键生成dockerfilek8syaml文件,大大提高了工作效率,节省 golang 开发者时间,有更多的时间专注于业务。通过阅读 go-zero 源码,获益匪浅。

3.2 确定框架

综合以上相关因素,最终决定使用Go-zero框架。

4 Go-Zero对应的基础平台

4.1 go-zero

  1. 代码地址
    https://github.com/zeromicro/go-zero
  2. 文档情况
    go-zero.dev
  3. 功能完整性
    基础平台
  4. 星标数
    21.5K

4.2 zero-admin

  1. 代码地址
    https://github.com/feihua/zero-admin

    Ant Design Pro前端版本:https://github.com/feihua/go-zero-admin-ui
    Element Admin UI前端版本:https://github.com/feihua/zero-vue-admin

  2. 文档情况

  3. 功能完整性
    已有:待定

  4. 星标数
    316

  5. 开源时间
    2020年11月20号 — 2022年6月29号

  6. 维护状态
    正常

4.3 ark-admin-zero

  1. 代码地址
    前端地址:https://github.com/arklnk/ark-admin-vuenext
    后端地址:https://github.com/arklnk/ark-admin-zero
  2. 文档情况
    https://docs.arklnk.com/admin
  3. 功能完整性
    已有:菜单管理、角色管理、部门管理、岗位管理、职称管理、用户管理、字典管理、登录日志【8个】
  4. 星标数
    46
  5. 开源时间
    2022年8月9号 — 2022年10月19号
  6. 维护状态
    正常

4.4 simple-admin-core

  1. 代码地址
    https://github.com/suyuan32/simple-admin-core
  2. 文档情况
    http://simpleadmin.ryansu.pro/#/simple-admin/zh-cn/
  3. 功能完整性
    已有:登录注册、菜单管理、角色管理、角色权限、用户管理、操作日志服务注册发现配置中心、字典功能、三方登录管理全面支持 K8s服务监控日志收集JWT黑名单定时任务消息队列Ent【17个】
  4. 星标数
    436
  5. 开源时间
    2022年8月13号 — 至今
  6. 维护状态
    正常

5 选择代码平台

通过第四部分对各代码平台的比较,并结合业务需求,最终决定使用simple-admin-core

你可能感兴趣的:(Golang,微服务)