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

这篇具有很好参考价值的文章主要介绍了Go微服务框架及基础平台选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文章来源地址https://www.toymoban.com/news/detail-443507.html

到了这里,关于Go微服务框架及基础平台选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度探讨】公共部门在选择区块链平台时要考虑的6个方面

    发表时间:2022年8月17日 信息来源:bsvblockchain.org 与私营企业相比,全球的公共部门组织在考虑升级软件解决方案时面临着一系列的全新挑战。公共部门的决策流程冗长而复杂,他们要不惜一切代价避免对现有业务造成干扰,最重要的是,公共部门必须向公众证明,花费这些

    2024年02月08日
    浏览(33)
  • 微服务基础设施怎么建设,如何选择微服务框架

    微服务基础设施架构全貌 微服务 vs SOA 微服务基础设施优先级 微服务框架核心 模式1-嵌入式SDK式 【优点】 1. 架构简单,天然支持高性能、高可用; 2. 维护简单,无需维护独立的 Proxy 节点。 【缺点】 1. 应用侵入,需要集成 SDK,并联动升级; 2. 多语言重复开发 SDK 模式2-反向

    2024年01月23日
    浏览(41)
  • 数据库容量考虑因素

    其中在设计数据库时,我们需要根据业务需求确定考虑数据类型是以下的哪一种,以选择合适的数据库类型和容量 结构化数据:如数字、文本、日期等 半结构化数据:如XML、JSON等 非结构化数据:如图片、音频、视频等 关系型数据:如MySQL、PostgreSQL等 非关系型数据:如Mon

    2024年02月12日
    浏览(24)
  • 选购螺杆支撑座要考虑哪些因素?

    为了可以保证螺杆支撑座的使用效果,同时也能够发挥出更好的使用功能,避免出现各种质量隐患,建议大家在购买的时候一定要在专业正规的厂家进行选购,那么,我们在选购的时候要考虑哪些方面的因素呢? 1、考虑到螺杆支撑座的使用环境,在挑选螺杆支撑座的时候,

    2024年02月15日
    浏览(37)
  • 工业相机选型(工业相机选型重点考虑哪些因素)

    如何选择合适的工业相机?工业相机选型的问题,首先要清楚自己的检测任务,是拍静态还是动态,拍照的频率是多少,是做缺陷检测还是尺寸测量,或者是定位,产品的大小(视野)是多少,需要达到多少精度,现场环境情况如何,有没有其它的特殊要求等。在这里根据我

    2024年02月09日
    浏览(42)
  • 云平台与基础架构中需要考虑哪些安全风险

    云计算平台能为组织带来特殊收益,并具备多种卓越能力,包括性能和可伸缩性 (Scalability)、消除了硬件依赖、帮助组织将工作重点聚焦于业务运营需求,以及可计量服务 (Measured Service)一 所有特性都可能比组织运营自有数据中心的总体成本和投资更低。然 而,基于同样的因

    2024年02月01日
    浏览(33)
  • 跨境电商环境搭建和买家账号培养的关键考虑因素

    作为跨境电商环境搭建和买家账号培养的专业技术开发人员,我深知在亚马逊、速卖通、阿里国际、速卖通、美客多、shopee、Lazada、ebay、Temu等平台上运营的卖家面临的挑战 其中,补单是一项关键的工作,它能帮助卖家增加商品列表和评价数量,提升星级评分,同时保证物流

    2024年02月06日
    浏览(31)
  • 迪赛智慧数——柱状图(象形动态图):高考填报专业考虑的因素

    效果图 填报志愿是高考后的一大重要环节,你的职业生涯就在这里起航了。那么,应该怎么填报志愿呢?高考填报专业考虑的因素很多,过半的人会考虑专业就业前景及薪资,其次是个人兴趣和是否为双一流建设学科。 数据源:静态数据 {   \\\"column\\\": [     \\\"因素\\\",     \\\"占比

    2024年02月11日
    浏览(25)
  • 【协议设计与实现】Linux环境下,如何从0开始设计并实现一个网络协议之一——需要考虑的因素

    🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向) 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd 🌐系列专栏:TCP/IP协议 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。

    2024年01月17日
    浏览(29)
  • 高考志愿填报服务指南|专业选择前的关键考虑点和后期调整策略|探索心仪专业与最终就业发展的契合度

    各省高考成绩已出,又到一年高考季。张雪峰提到:“普通家庭不要光谈理想,也要谈落地。”志愿怎样填报、选专业还是选学校、什么专业好就业、高考志愿主要看什么?针对这些疑问,你对正在选志愿的毕业生们有什么建议吗?你可以从下面几个方面来聊聊你想推荐/避雷

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包