• 带你十天轻松搞定 Go 微服务系列(二)


    上篇文章开始,我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:

    1. 环境搭建
    2. 服务拆分(本文)
    3. 用户服务
    4. 产品服务
    5. 订单服务
    6. 支付服务
    7. RPC 服务 Auth 验证
    8. 服务监控
    9. 链路追踪
    10. 分布式事务

    期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。

    完整示例代码:https://github.com/nivin-studio/go-zero-mall

    服务拆分

    一个商城项目可拆分用户服务(user)、订单服务(order)、产品服务(product)、支付服务(pay)、售后服务(afterSale)...

    每个服务都可以再分为 api 服务和 rpc 服务。api 服务对外,可提供给 app 调用。rpc 服务是对内的,可提供给内部 api 服务或者其他 rpc 服务调用。整个项目服务依赖流程图大致如下:

    1 用户服务(user)

    api 服务 端口:8000 rpc 服务 端口:9000
    login 用户登录接口 login 用户登录接口
    register 用户注册接口 register 用户注册接口
    userinfo 用户信息接口 userinfo 用户信息接口
    ... ... ... ...

    2 产品服务(product)

    api 服务 端口:8001 rpc 服务 端口:9001
    create 产品创建接口 create 产品创建接口
    update 产品修改接口 update 产品修改接口
    remove 产品删除接口 remove 产品删除接口
    detail 产品详情接口 detail 产品详情接口
    ... ... ... ...

    3 订单服务(order)

    api 服务 端口:8002 rpc 服务 端口:9002
    create 订单创建接口 create 订单创建接口
    update 订单修改接口 update 订单修改接口
    remove 订单删除接口 remove 订单删除接口
    detail 订单详情接口 detail 订单详情接口
    list 订单列表接口 list 订单列表接口
    paid 订单支付接口
    ... ... ... ...

    4 支付服务(pay)

    api 服务 端口:8003 rpc 服务 端口:9003
    create 支付创建接口 create 支付创建接口
    detail 支付详情接口 detail 支付详情接口
    callback 支付回调接口 callback 支付回调接口
    ... ... ... ...

    5 创建项目目录

    • 创建 mall 工程
    $ mkdir mall && cd mall
    $ go mod init mall
    
    • 创建 common 目录
    $ mkdir common
    
    • 创建 service 目录
    $ mkdir service && cd service
    
    • 创建 user apiuser rpcuser model 目录
    $ mkdir -p user/api
    $ mkdir -p user/rpc
    $ mkdir -p user/model
    
    • 创建 product apiproduct rpcproduct model 目录
    $ mkdir -p product/api
    $ mkdir -p product/rpc
    $ mkdir -p product/model
    
    • 创建 order apiorder rpcorder model 目录
    $ mkdir -p order/api
    $ mkdir -p order/rpc
    $ mkdir -p order/model
    
    • 创建 pay apipay rpcpay model 目录
    $ mkdir -p pay/api
    $ mkdir -p pay/rpc
    $ mkdir -p pay/model
    
    • 最终项目目录
    ├── common           # 通用库
    ├── service          # 服务
    │   ├── order
    │   │   ├── api      # order api 服务
    │   │   ├── model    # order 数据模型
    │   │   └── rpc      # order rpc 服务
    │   ├── pay
    │   │   ├── api      # pay api 服务
    │   │   ├── model    # pay 数据模型
    │   │   └── rpc      # pay rpc 服务
    │   ├── product
    │   │   ├── api      # product api 服务
    │   │   ├── model    # product 数据模型
    │   │   └── rpc      # product rpc 服务
    │   └── user
    │       ├── api      # user api 服务
    │       ├── model    # user 数据模型
    │       └── rpc      # user rpc 服务
    └── go.mod
    

    一些思考

    微服务拆分并没有统一的标准,相同的业务在不同的公司很可能拆分方式会有所区别,用户规模、团队大小、组员能力等都会是考虑因素。但我们还是有一些基本原则可以遵循:

    • 由粗到细,避免过度拆分,遵循渐进式演进的原则
    • 不同服务之间应该是正交的,不要你中有我我中有你
    • 避免环形依赖,服务依赖关系应该是有向无环图
    • 避免不同服务之间共享同一个数据库

    go-zero 也是一个渐进式微服务框架,你可以在业务早期使用单体来快速满足业务,当业务增长并有需要的时候,做最小的改动即可做到渐进式的服务拆分。

    此类话题也可以在 go-zero 社区群里一起讨论。

    项目地址

    https://github.com/zeromicro/go-zero

    欢迎使用 go-zerostar 支持我们!

    微信交流群

    关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

  • 相关阅读:
    P4178 Tree
    CF437D The Child and Zoo
    CF1032G Chattering ST表+倍增
    P4165 [SCOI2007]组队 推柿子+差分
    P1450 [HAOI2008]硬币购物 容斥原理+完全背包
    P6275 [USACO20OPEN]Sprinklers 2: Return of the Alfalfa P 轮廓线DP
    P6009 [USACO20JAN]Non-Decreasing Subsequences P 矩阵优化DP
    P2605 [ZJOI2010]基站选址 线段树优化DP
    P5597 【XR-4】复读 思维题 +二叉树合并
    P5304 [GXOI/GZOI2019]旅行者 最短路+位运算优化
  • 原文地址:https://www.cnblogs.com/kevinwan/p/15829251.html
Copyright © 2020-2023  润新知