你还在手撕微服务?快试试 go-zero 的微服务自动生成

0. 为什么说做好微服务很难?

要想做好微服务,我们需要理解和掌握的知识点非常多,从几个维度上来说:

  • 基本功能层面

    1. 并发控制&限流,避免服务被突发流量击垮
    2. 服务注册与服务发现,确保能够动态侦测增减的节点
    3. 负载均衡,需要根据节点承受能力分发流量
    4. 超时控制,避免对已超时请求做无用功
    5. 熔断设计,快速失败,保障故障节点的恢复能力
  • 高阶功能层面

    1. 请求认证,确保每个用户只能访问自己的数据
    2. 链路追踪,用于理解整个系统和快速定位特定请求的问题
    3. 日志,用于数据收集和问题定位
    4. 可观测性,没有度量就没有优化

对于其中每一点,我们都需要用很长的篇幅来讲述其原理和实现,那么对我们后端开发者来说,要想把这些知识点都掌握并落实到业务系统里,难度是非常大的,不过我们可以依赖已经被大流量验证过的框架体系。go-zero微服务框架就是为此而生。

另外,我们始终秉承工具大于约定和文档的理念。我们希望尽可能减少开发人员的心智负担,把精力都投入到产生业务价值的代码上,减少重复代码的编写,所以我们开发了goctl工具。

下面我通过书店服务来演示通过go-zero快速的创建微服务的流程,走完一遍,你就会发现:原来编写微服务如此简单!

1. 书店服务示例简介

为了教程简单,我们用书店服务做示例,并且只实现其中的增加书目和检查价格功能。

写此书店服务是为了从整体上演示go-zero构建完整微服务的过程,实现细节尽可能简化了。

2. 书店微服务架构图

architecture

3. goctl各层代码生成一览

所有绿色背景的功能模块是自动生成的,按需激活,红色模块是需要自己写的,也就是增加下依赖,编写业务特有逻辑,各层示意图分别如下:

  • API Gateway

    api

  • RPC

rpc

  • model

model

下面我们来一起完整走一遍快速构建微服务的流程,Let’s Go!🏃‍♂️

4. 准备工作

  • 安装etcd, mysql, redis

  • 安装goctl工具

    GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl
  • 创建工作目录bookstore

  • bookstore目录下执行go mod init bookstore初始化go.mod

5. 编写API Gateway代码

  • bookstore/api目录下通过goctl生成api/bookstore.api

    goctl api -o bookstore.api

    编辑bookstore.api,为了简洁,去除了文件开头的info,代码如下:

    type (
        addReq struct {
            book  string `form:"book"`
            price int64  `form:"price"`
        }
    
        addResp struct {
            ok bool `json:"ok"`
        }
    )
    
    type (
        checkReq struct {
            book string `form:"book"`
        }
    
        checkResp struct {
            found bool  `json:"found"`
            price int64 `json:"price"`
        }
    )
    
    service bookstore-api {
        @server(
            handler: AddHandler
        )
        get /add(addReq) returns(addResp)
    
        @server(
            handler: CheckHandler
        )
        get /check(checkReq) returns(checkResp)
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值