go-zero - 具有 cli 工具的云原生 Go 微服务框架,可提高生产力。

Created at: 2020-08-07 23:37:57
Language: Go
License: MIT

Go-Zero是一个Web和RPC框架,具有许多内置的工程实践。它的诞生是为了通过弹性设计确保繁忙服务的稳定性,多年来一直为拥有数千万用户的网站提供服务。

去 科德科夫 去成绩单 释放 围棋参考  awesome 围棋 授权协议: MIT 不和

🤷 什么是零点?

中文 |简体中文

go-zero - 用 Go 编写的 Web 和 rpc 框架。|产品搜寻

go-zero(列在CNCF Landscape:https://landscape.cncf.io/?selected=go-zero)是一个Web和RPC框架,具有许多内置的工程实践。它的诞生是为了通过弹性设计确保繁忙服务的稳定性,多年来一直为拥有数千万用户的网站提供服务。

go-zero 包含简单的 API 描述语法和代码生成工具,称为 .你可以使用.api文件生成Go,iOS,Android,Kotlin,Dart,TypeScript,JavaScript。

goctl
goctl

零点的优点:

  • 提高日活跃用户数千万的服务稳定性
  • 内置链式超时控制、并发控制、速率限制、自适应断路器、自适应减载,甚至无需配置
  • 内置中间件也可以集成到你的框架中
  • 简单的 API 语法,一个命令生成几种不同的语言
  • 自动验证来自客户端的请求参数
  • 大量内置微服务管理和并发工具包

建筑

零点的背景

在2018年初,我们决定重新设计我们的系统,从Java+MongoDB的单体架构到微服务架构。经过研究和比较,我们选择:

  • 基于戈朗
    • 出色的性能
    • 简单的语法
    • 久经考验的工程效率
    • 极致部署体验
    • 减少服务器资源消耗
  • 自主设计的微服务架构
    • 我有丰富的微服务架构设计经验
    • 易于定位问题
    • 易于扩展功能

零点的设计注意事项

通过设计微服务架构,我们希望确保稳定性和生产力。从一开始,我们就拥有以下设计原则:

  • 保持简单
  • 高可用性
  • 在高并发时稳定
  • 易于扩展
  • 弹性设计,面向故障的编程
  • 尽量对业务逻辑开发友好,封装复杂
  • 一件事,一种方式

时隔近半年,我们完成了从单体系统到微服务系统的转移,并于 2018 年 8 月部署。新系统保证了业务增长和系统稳定性。

go-zero的实现和特点

Go-Zero是一个Web和RPC框架,集成了许多工程实践。功能主要如下:

  • 包括强大的工具,编写的代码更少
  • 简单的界面
  • 与 net/http 完全兼容
  • 支持中间件,易于扩展
  • 高性能
  • 面向故障的编程,弹性设计
  • 内置服务发现、负载均衡
  • 内置并发控制、自适应断路器、自适应减载、自动触发、自动恢复
  • 自动验证 API 请求参数
  • 链式超时控制
  • 自动管理数据缓存
  • 呼叫跟踪、指标和监控
  • 高并发保护

如下,go-zero 通过几层和机制保护系统:

达观

我们在go-zero中使用的简化架构

图像

安装

在项目下运行以下命令:

go get -u github.com/zeromicro/go-zero

快速入门

  1. 完整的示例可以从下面查看:

    微服务系统的快速发展

    微服务系统的快速开发 - 多个 RPC

  2. 安装 goctl

    goctl
    可以读作 。 意味着不被代码控制,相反,我们控制它。里面不是.一开始,我期望它能帮助我们提高生产力,让我们的生活更轻松。
    go control
    goctl
    go
    golang

    # for Go
    go install github.com/zeromicro/go-zero/tools/goctl@latest
    
    # For Mac
    brew install goctl
    
    # docker for amd64 architecture
    docker pull kevinwan/goctl
    # run goctl like
    docker run --rm -it -v `pwd`:/app kevinwan/goctl goctl --help
    
    # docker for arm64 (M1) architecture
    docker pull kevinwan/goctl:latest-arm64
    # run goctl like
    docker run --rm -it -v `pwd`:/app kevinwan/goctl:latest-arm64 goctl --help

    确保goctl是可执行的。

  3. 创建 API 文件,像 greet.api 一样,可以在 VS 代码中安装 goctl 的插件,支持 API 语法。

    type (
      Request {
        Name string `path:"name,options=[you,me]"` // parameters are auto validated
      }
    
      Response {
        Message string `json:"message"`
      }
    )
    
    service greet-api {
      @handler GreetHandler
      get /greet/from/:name(Request) returns (Response)
    }

    .api文件也可以由goctl生成,如下所示:

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

    goctl api go -api greet.api -dir greet

    生成的文件如下所示:

    ├── greet
    │   ├── etc
    │   │   └── greet-api.yaml        // configuration file
    │   ├── greet.go                  // main file
    │   └── internal
    │       ├── config
    │       │   └── config.go         // configuration definition
    │       ├── handler
    │       │   ├── greethandler.go   // get/put/post/delete routes are defined here
    │       │   └── routes.go         // routes list
    │       ├── logic
    │       │   └── greetlogic.go     // request logic can be written here
    │       ├── svc
    │       │   └── servicecontext.go // service context, mysql/redis can be passed in here
    │       └── types
    │           └── types.go          // request/response defined here
    └── greet.api                     // api description file
    

    the generated code can be run directly:

    cd greet
    go mod init
    go mod tidy
    go run greet.go -f etc/greet-api.yaml

    by default, it’s listening on port 8888, while it can be changed in the configuration file.

    you can check it by curl:

    curl -i http://localhost:8888/greet/from/you

    the response looks like below:

    HTTP/1.1 200 OK
    Date: Sun, 30 Aug 2020 15:32:35 GMT
    Content-Length: 0
  5. 编写业务逻辑代码

    • 依赖关系可以传递到servicecontext.go中的逻辑中,如mysql,reds等。
    • 根据 .api 文件在逻辑包中添加逻辑代码
  6. 仅从api文件生成Java,TypeScript,Dart,JavaScript等代码

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

基准

基准

签出测试代码

文件

聊天组

通过 https://discord.gg/4JQvC5A4Fe 加入聊天

云原生环境

   

go-zero已加入CNCF云原生环境

给一颗星星!⭐

如果你喜欢或正在使用此项目来学习或启动你的解决方案,请给它一颗星。谢谢!

请我喝杯咖啡

给我买杯咖啡