go-zero 是一个集成了各种工程实践的 Web 和 rpc 框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验。

go-zero 在设计时遵循了 “工具大于约定和文档” 的理念,所以 go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 API 文件一键生成 Go、iOS、Android、Kotlin、Dart、TypeScript、JavaScript 代码,并可直接运行。

如上图所示,不同客户端的请求都会先进入 go-zero 的 API 端。API 端最主要的作用是通过 ETCD 将对应的请求通过 gRPC 协议转发到 Service 端。根据请求的具体内容,Service 端负责对数据进行查询或存储。如果是查询请求,go-zero 有内置的 API 会先查询缓存层,减少数据库的查询压力。

由图可见,API 端和 Service 端中框架已经内置了非常丰富的功能,在开发过程中只需要我们填充对应的业务逻辑,即可轻松实现 CRDU 级的需求。

我们为什么说 go-zero 是开箱即用的微服务架构呢?不急,我们来盘点下 go-zero 中有哪些强大的特性。

go-zero 适合做微服务快速开发的特性

Go-zero 拥有强大的项目脚手架工具 goctl。 goctl 和前端中的 Vue-cli、React-cli 一样方便。goctl 通过配置文件可以生成 API、rpc 和 model 等相关代码。 同时,go-zero 拥有较完备的项目框架。脚手架生成的项目框架足以应对常见的需求。CRDU 等需求只需要做 “填空题”,在已生成的代码上填充必要的业务逻辑。 其他缓存鉴权等需求,框架中也早已内置。

另外,go-zero 拥有独特的“渐进式”框架。“渐进式”是前端 Vue 框架的一大特性,大意是“易于上手,还便于与第三方库或既有项目整合”。本文借用这个概念是想表明 go-zero 对项目的入侵性较少,go-zero 生成的代码可以拆开使用,逐步对老项目进行改造。

低耦合的模块设计,丰富的中间件,插件和工具:

  • go-zero 中各模块耦合程度低,我们可以通过文档中的组件中心寻找合适的中间件或自研中间件。

  • 如果觉得 goctl 不能满足需求,goctl 还支持 plugin 命令对 goctl 进行扩展。

  • go-zero 的很多配置文件是自定义语法。 go-zero 还提供了 intellij 和 vscode 插件,提供了语法高亮错误检查等编辑增强功能。

goctl 介绍

goctl 是 go-zero 微服务框架下的代码生成工具。使用 goctl 可显著提升开发效率,让开发人员将时间重点放在业务开发上。

goctl 的命令可归纳为如下几类:

  • API 命令,快速生成一个 API 服务

  • rpc 命令,支持 proto 模板生成和 rpc 服务代码生成

  • model 命令,目前支持识别 mysql ddl 进行 model 层代码生成

  • plugin 命令,支持针对 API 自定义插件

  • 其他命令,目前是发布相关

goctl 的命令众多,本次涉及到的只是其中 API、rpc 和 model 相关的基础命令。

使用 goctl 的基本流程

使用 goctl 生成代码的流程大致可以分为 4 步:

  • 使用命令 a 生成默认的配置文件;

  • 按照业务需求编辑该配置文件;

  • 使用命令 b 按照配置文件生成默认的代码文件;

  • 按照业务逻辑填充对应的代码文件。

什么情况不适宜使用 go-zero 做微服务快速开发?

看完上面的介绍,想必大家对于 go-zero 开发微服务已经有点跃跃欲试了吧。不过经过一番实践,我认为当出现以下情况时,不适宜采用 go-zero 作为开发微服务的框架。

当前需求与 goctl 的理念相冲突

go-zero 的一大卖点是脚手架工具 goctl,如果定制需求过多可能与 goctl 生成的代码相冲突。但是如果放弃 goctl 手动编写代码的话,开发效率会大大降低。

举个例子,如上图所示,go-zero 在 Service 端目前只支持 gRPC,在数据库层只支持 Mysql、MongoDB 和 ClickHouse,服务发现只支持 ETCD。在这种情况下如果想实现 PostgreSQL 替换 Mysql、Consul 替换 ETCD 等定制操作,goctl 生成的代码执行时很可能会出现异常。

希望框架提供的功能非常完善

go-zero 大部分组件是自研,比如 sqlx,httpx 等。这些自研组件满足 CRDU 的操作绰绰有余,但是与 gorm、gin 等专攻某一方向的开源项目相比还是有非常大的差距的。

所以随着公司业务发展需求越来越五花八门,当前的主要矛盾从“快速开发”变成“精细化开发”时,会发现该框架有这样或那样的不足。这种情况下就需要提 RP 或自己 fork 一份魔改了。个人觉得这种情况比 Spring 或 Django 那样一个“全家桶” 改动起来要省力省心。

go-zero:微服务框架相关推荐

  1. python 微服务框架 知乎_序: 我需要一个什么样的微服务框架

    前言 新坑第一篇文章, 做一个开篇的序吧. 开发了很多 python 的 web 微服务, 也使用过很多 web 框架, django, tornado, flask, 等等等等. 不同的 web 框 ...

  2. go微服务框架go-micro深度学习(一) 整体架构介绍

    产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以维护,后期的每次产品迭代上线都会牵一发而动全身.项目 ...

  3. Oracle发布开源的轻量级 Java 微服务框架 Helidon

    近日,Oracle推出了一个新的开源框架Helidon,该项目是一个用于创建基于微服务的应用程序的Java库集合.和Payara Micro.Thorntail(之前的WildFly Swarm).O ...

  4. 企业级微服务框架落地

    根据康威定律,当互联网公司业务和团队发展到一定规模,微服务架构是一种必然的演化趋势.我们看看唯品会对微服务框架体系的建设及实践. 先来看一下唯品会微服务基础中台架构的设计思路.围绕微服务,唯品会自主研 ...

  5. 微服务框架-Spring Cloud简介(一)

    Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案. Spring Cloud对微服务基础框架Netflix的多个开源组件进 ...

  6. python 微服务框架_Python微服务框架NameKo 性能体验

    Nameko是Python下的一个微服务框架,小巧简洁,通过RabbitMq消息组件来实现RPC服务 Github:NameKo 一.准备工作 1.RabbitMq 使用docker安装 docker ...

  7. Oracle微服务框架 Helidon尝鲜(一)!~

    前言 晚上下班回家无聊看掘金Gayhub今日热门项目排行,突然瞄到一个有点意思关于微服务的项目.话说微服务框架在后端开发领域早已不是一个新的东西了,尤其是在框架这么多的Java平台,以spring b ...

  8. 如何实现一个优质的微服务框架:Apache ServiceComb 的开放性设计

    2019独角兽企业重金招聘Python工程师标准>>> 写在前面 开源微服务框架 Apache ServiceComb 的前身为华为云的 微服务引擎 CSE (Cloud Servi ...

  9. 微服务架构 — 微服务框架

    目录 文章目录 目录 微服务框架 第一代微服务框架 Spring Cloud Dubbo 下一代微服务框架 - Service Mesh Istio Envoy Kubernetes + Servic ...

  10. 基于thrift的微服务框架

    前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...

最新文章

  1. awk1.0 — awk基础
  2. 自己动手写操作系统-实践
  3. 英特尔AI芯片首次商用交货!推理性能3.7倍于英伟达T4,年贡献245亿涨250%
  4. CEMAPI实战攻略(四)——发送短消息
  5. word转换成pdf java代码_java代码实现word转换成pdf
  6. 【WebRTC---入门篇】(一)WebRTC整体架构
  7. 对Linux课程内容的建议,Linux课程笔记 Day01 课程内容总结(示例代码)
  8. react如何遍历并比较_[前端进阶] 这可能是最通俗易懂的React 渲染原理及性能优化...
  9. 【HDU - 3342】Legal or Not(拓扑排序)
  10. 解决无法连接到visual studio开发服务器的问题
  11. IE6不支持hover赋予css样式的解决方法 如div:hover li:hover支持
  12. Laravel——通过邮件找回密码
  13. Tyvj - 1305 单调队列优化dp
  14. jQueryWEUI自定义对话框-带有textarea
  15. 数学四大思想八大方法_数学四大思想方法
  16. Android 判断是否有外网连接
  17. python学期总结
  18. 图像处理基本方法-python语言生成纯色BMP文件
  19. 哪些IP不会分配给公网使用
  20. OpenJudge NOI题库 1.7 编程基础之字符串

热门文章

  1. Spring Schedule关闭订单
  2. jsonp java后台_jsonp与Java后端
  3. InfluxDB基本使用说明
  4. 一个分支强制替代另一个分支
  5. mybatis中mapUnderscoreToCamelCase自动驼峰命名转换
  6. [CF475E]Strongly Connected City 2
  7. 换个姿势为安装包重签名
  8. 06-Java 本地文件操作
  9. Python 第十一章 常用第三方模块
  10. vsftp的被动模式