go-zero:微服务框架
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:微服务框架相关推荐
- python 微服务框架 知乎_序: 我需要一个什么样的微服务框架
前言 新坑第一篇文章, 做一个开篇的序吧. 开发了很多 python 的 web 微服务, 也使用过很多 web 框架, django, tornado, flask, 等等等等. 不同的 web 框 ...
- go微服务框架go-micro深度学习(一) 整体架构介绍
产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以维护,后期的每次产品迭代上线都会牵一发而动全身.项目 ...
- Oracle发布开源的轻量级 Java 微服务框架 Helidon
近日,Oracle推出了一个新的开源框架Helidon,该项目是一个用于创建基于微服务的应用程序的Java库集合.和Payara Micro.Thorntail(之前的WildFly Swarm).O ...
- 企业级微服务框架落地
根据康威定律,当互联网公司业务和团队发展到一定规模,微服务架构是一种必然的演化趋势.我们看看唯品会对微服务框架体系的建设及实践. 先来看一下唯品会微服务基础中台架构的设计思路.围绕微服务,唯品会自主研 ...
- 微服务框架-Spring Cloud简介(一)
Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案. Spring Cloud对微服务基础框架Netflix的多个开源组件进 ...
- python 微服务框架_Python微服务框架NameKo 性能体验
Nameko是Python下的一个微服务框架,小巧简洁,通过RabbitMq消息组件来实现RPC服务 Github:NameKo 一.准备工作 1.RabbitMq 使用docker安装 docker ...
- Oracle微服务框架 Helidon尝鲜(一)!~
前言 晚上下班回家无聊看掘金Gayhub今日热门项目排行,突然瞄到一个有点意思关于微服务的项目.话说微服务框架在后端开发领域早已不是一个新的东西了,尤其是在框架这么多的Java平台,以spring b ...
- 如何实现一个优质的微服务框架:Apache ServiceComb 的开放性设计
2019独角兽企业重金招聘Python工程师标准>>> 写在前面 开源微服务框架 Apache ServiceComb 的前身为华为云的 微服务引擎 CSE (Cloud Servi ...
- 微服务架构 — 微服务框架
目录 文章目录 目录 微服务框架 第一代微服务框架 Spring Cloud Dubbo 下一代微服务框架 - Service Mesh Istio Envoy Kubernetes + Servic ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
最新文章
- awk1.0 — awk基础
- 自己动手写操作系统-实践
- 英特尔AI芯片首次商用交货!推理性能3.7倍于英伟达T4,年贡献245亿涨250%
- CEMAPI实战攻略(四)——发送短消息
- word转换成pdf java代码_java代码实现word转换成pdf
- 【WebRTC---入门篇】(一)WebRTC整体架构
- 对Linux课程内容的建议,Linux课程笔记 Day01 课程内容总结(示例代码)
- react如何遍历并比较_[前端进阶] 这可能是最通俗易懂的React 渲染原理及性能优化...
- 【HDU - 3342】Legal or Not(拓扑排序)
- 解决无法连接到visual studio开发服务器的问题
- IE6不支持hover赋予css样式的解决方法 如div:hover li:hover支持
- Laravel——通过邮件找回密码
- Tyvj - 1305 单调队列优化dp
- jQueryWEUI自定义对话框-带有textarea
- 数学四大思想八大方法_数学四大思想方法
- Android 判断是否有外网连接
- python学期总结
- 图像处理基本方法-python语言生成纯色BMP文件
- 哪些IP不会分配给公网使用
- OpenJudge NOI题库 1.7 编程基础之字符串