go-zero

0. go-zero介绍

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

go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。

使用go-zero的好处:

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

1. go-zero框架背景

18年初,晓黑板后端在经过频繁的宕机后,决定从Java+MongoDB的单体架构迁移到微服务架构,经过仔细思考和对比,我们决定:

  • 基于Go语言

    • 高效的性能
    • 简洁的语法
    • 广泛验证的工程效率
    • 极致的部署体验
    • 极低的服务端资源成本
  • 自研微服务框架
    • 个人有过很多微服务框架自研经验
    • 需要有更快速的问题定位能力
    • 更便捷的增加新特性

2. go-zero框架设计思考

对于微服务框架的设计,我们期望保障微服务稳定性的同时,也要特别注重研发效率。所以设计之初,我们就有如下一些准则:

  • 保持简单
  • 高可用
  • 高并发
  • 易扩展
  • 弹性设计,面向故障编程
  • 尽可能对业务开发友好,封装复杂度
  • 尽可能约束做一件事只有一种方式

我们经历不到半年时间,彻底完成了从Java+MongoDBGolang+MySQL为主的微服务体系迁移,并于18年8月底完全上线,稳定保障了晓黑板后续增长,确保了整个服务的高可用。

3. go-zero项目实现和特点

go-zero是一个集成了各种工程实践的包含web和rpc框架,有如下主要特点:

  • 强大的工具支持,尽可能少的代码编写
  • 极简的接口
  • 完全兼容net/http
  • 支持中间件,方便扩展
  • 高性能
  • 面向故障编程,弹性设计
  • 内建服务发现、负载均衡
  • 内建限流、熔断、降载,且自动触发,自动恢复
  • API参数自动校验
  • 超时级联控制
  • 自动缓存控制
  • 链路跟踪、统计报警等
  • 高并发支撑,稳定保障了晓黑板疫情期间每天的流量洪峰

如下图,我们从多个层面保障了整体服务的高可用:

4. go-zero近期开发计划

  • 自动生成API mock server,便于客户端开发
  • 自动生成服务端功能测试

5. Installation

在项目目录下通过如下命令安装:

go get -u github.com/tal-tech/go-zero

6. Quick Start

  1. 完整示例请查看从0到1快速构建一个高并发的微服务系统

  2. 编译goctl工具

    go build tools/goctl/goctl.go
    

    把goctl放到$PATH的目录下,确保goctl可执行

  3. 定义API文件,比如greet.api,可以在vs code里安装goctl插件,支持api语法

    type Request struct {Name string `path:"name,options=you|me"` // 框架自动验证请求参数是否合法
    }type Response struct {Message string `json:"message"`
    }service greet-api {@server(handler: GreetHandler)get /greet/from/:name(Request) returns (Response);
    }
    

    也可以通过goctl生成api模本文件,命令如下:

    goctl api -o greet.api
    
  4. 生成go服务端代码

    goctl api go -api greet.api -dir greet
    

    生成的文件结构如下:

    ├── greet
    │   ├── etc
    │   │   └── greet-api.json        // 配置文件
    │   ├── greet.go                  // main文件
    │   └── internal
    │       ├── config
    │       │   └── config.go         // 配置定义
    │       ├── handler
    │       │   ├── greethandler.go   // get/put/post/delete等路由定义文件
    │       │   └── routes.go         // 路由列表
    │       ├── logic
    │       │   └── greetlogic.go     // 请求逻辑处理文件
    │       ├── svc
    │       │   └── servicecontext.go // 请求上下文,可以传入mysql, redis等依赖
    │       └── types
    │           └── types.go          // 请求、返回等类型定义
    └── greet.api                     // api描述文件
    

    生成的代码可以直接运行:

   cd greetgo run greet.go -f etc/greet-api.json

默认侦听在8888端口(可以在配置文件里修改),可以通过curl请求:

   ➜  go-zero git:(master) curl -w "\ncode: %{http_code}\n" http://localhost:8888/greet/from/kevin{"code":0}code: 200

编写业务代码:

  • 可以在servicecontext.go里面传递依赖给logic,比如mysql, redis等

    • 在api定义的get/post/put/delete等请求对应的logic里增加业务处理逻辑
  1. 可以根据api文件生成前端需要的Java, TypeScript, Dart, JavaScript代码

    goctl api java -api greet.api -dir greet
    goctl api dart -api greet.api -dir greet
    ...
    

7. Benchmark

测试代码见这里

8. 文档 (逐步完善中)

  • 从0到1快速构建一个高并发的微服务系统
  • goctl使用帮助
  • 关键字替换和敏感词过滤工具

9. 微信交流群

添加我的微信:kevwan,请注明go-zero,我拉进go-zero社区群

好未来晓黑板go-zero微服务框架: 你不需要懂微服务,懂业务就行相关推荐

  1. 微服务框架 Go-Micro 集成 Nacos 实战之服务注册与发现

    作者 | 张斌斌 导读:本文主要介绍如何使用 Golang 生态中的微服务框架 Go-Micro(v2) 集成 Nacos 进行服务注册与发现.(Go-Micro 目前已经是 v3 版本,但由于某些原 ...

  2. 微服务框架Go-Micro集成Nacos实战之服务注册与发现

    简介:本文主要介绍如何使用 Golang 生态中的微服务框架 Go-Micro(v2) 集成 Nacos 进行服务注册与发现.(Go-Micro 目前已经是 v3 版本,但由于某些原因项目已经更名为 ...

  3. go开源文件服务器框架,golang微服务框架go-zero系列-4:go-zero文件服务

    golang微服务框架go-zero系列-4:go-zero文件服务 go-zero本身支持文件服务,但是我们需要写相关的handler文件,本文目的在于 不写任何一个和文件相关的handler 如果 ...

  4. 使用开源微前端框架 Luigi 创建一个基于微前端架构的工程

    官网地址 微前端通常被称为"前端微服务". 它们允许您将大型单体前端分解为独立的.可扩展的.可以协同工作的独立部分. 微前端架构对于复杂的产品或拥有众多团队的公司尤其有用,可以帮助 ...

  5. http get请求相同的key_B站微服务框架Kratos详细教程(2)HTTP服务

    背景 在像微服务这样的分布式架构中,经常会有一些需求需要你调用多个服务,但是还需要确保服务的安全性.统一化每次的 请求日志或者追踪用户完整的行为等等. 你可能需要一个框架来帮助你实现这些功能.比如说帮 ...

  6. 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦

    秒杀springboot--未来轻量级高性能的Java云原生微服务框架来啦 引子 自2003年Rod.Juergen 和 Yann开发并发布Spring项目后,J2EE 迎来了新的开始.在 2013 ...

  7. 华为18级大牛倾情奉送:分布式服务框架和微服务设计原理实战文档,啃完发现涨薪如此简单

    前言 分布式服务框架不仅仅包含核心的运行时类库,还包括服务划分原则.服务化最佳实践.服务治理.服务监控.服务开发框架等,它是一套完整的解决方案,用来协助应用做服务化改造,以及指导用户如何构建适合自己业 ...

  8. 微服务等于 Spring Cloud?了解微服务架构和框架

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

  9. 滴滴大型微服务框架设计实践

    导读:在不久前的 Gopher China 大会中,滴滴高级专家工程师杜欢以<大型微服务框架设计实践>为主题的深度分享. ---- 大家好,我是杜欢,很荣幸能代表滴滴来做分享.我来滴滴的第 ...

最新文章

  1. 全屏背景:15个jQuery插件实现全屏背景图像或媒体
  2. tbb flow graph node types
  3. Android官方开发文档Training系列课程中文版:多样屏幕之支持不同的屏幕密度
  4. 一些JavaScript基本函数
  5. Java Scala获取所有注解的类信息
  6. android发布新版忘记keystore(jks)密码终极解决方案
  7. Java 学习/面试指南
  8. 洛克菲勒:一部西方石油工业的传奇史
  9. 【接口测试】Jmeter+ant安装及简单使用教程(集成)
  10. 【破解】百度网盘不限速(亲测可用)
  11. 百练2801解题报告---填词
  12. excel中插入图表改变横纵坐标问题
  13. 高级人工智能之语音识别
  14. 缓动动画_核心动画概念:缓入缓出
  15. 2021年中国电力行业境外电力项目签约额分析:实现签约项目536个 签约合同总金额440.6亿美元[图]
  16. java程序框图 质数_判断质数的程序框图和算法
  17. el-table 动态多级表头以及数据
  18. 一般计算机电源都在什么服务,工控服务器电源与普通电脑电源的区别
  19. 【voice-ui】代码用例展示并改主题配色,添加一键复制功能
  20. serverless knative实战

热门文章

  1. 基于hive的SQL排名函数详解
  2. 计算机补码的表示形式,补码(计算机中数字的表示方式)
  3. python做什么副业_适合上班族的25个副业,做什么副业好
  4. css行高和盒子高区别
  5. 计算苹果的价格(计算物品类的价格可借鉴)
  6. 发电机励磁问题的简单解决——发电机不发电的简单判断和解决
  7. python中x+=y和x=x+y的区别
  8. C语言取整(含强制转换)
  9. Vue+Element之SpingBoot书本管理系统
  10. 三子棋(C语言实现)