上篇文章开始,我们通过一个系列文章跟大家详细展示一个 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 支持我们!

微信交流群

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

带你十天轻松搞定 Go 微服务系列(二)的更多相关文章

  1. 带你十天轻松搞定 Go 微服务系列(一)

    本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建(本文) 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Au ...

  2. 带你十天轻松搞定 Go 微服务系列(三)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务(本文) 产品服务 订单服务 支付服务 RPC 服务 Auth ...

  3. 带你十天轻松搞定 Go 微服务系列(五)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务(本文) 支付服务 RPC 服务 Auth ...

  4. 带你十天轻松搞定 Go 微服务系列(六)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务(本文) RPC 服务 Auth ...

  5. 带你十天轻松搞定 Go 微服务系列(七)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证( ...

  6. 带你十天轻松搞定 Go 微服务系列(八、服务监控)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  7. 带你十天轻松搞定 Go 微服务系列(九、链路追踪)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  8. 带你十天轻松搞定 Go 微服务之大结局(分布式事务)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  9. 【微服务】之二:从零开始,轻松搞定SpringCloud微服务系列--注册中心(一)

    微服务体系,有效解决项目庞大.互相依赖的问题.目前SpringCloud体系有强大的一整套针对微服务的解决方案.本文中,重点对微服务体系中的服务发现注册中心进行详细说明.本篇中的注册中心,采用Netf ...

随机推荐

  1. react Input 表单

    ​ input react 表单 input 密码框在谷歌浏览器下 会有黄色填充 官网的不太用,这个比较好用 type="password" autoComplete=" ...

  2. RPA账户和密码管理方案

    如何将登录业务系统的账户和密码"更好的,更合适"地交给RPA? 相信很多小伙伴们在做RPA的时候, 都会或多或少的遇到类似的问题. 正常情况下IT管理人员都会给真实的业务人员分配业 ...

  3. Android 崩溃错误

    SIGSEGV ---段错误. 遇到此错误的可能情况是: 1.缓冲区溢出---通常由指针引用超出范围引起. 2.堆栈溢出---请记住默认堆栈大小为8192K. 3.我们的判断系统禁止文件访问---文件 ...

  4. 【LeetCode】1166. Design File System 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 目录树 日期 题目地址https://leetc ...

  5. 【九度OJ】题目1178:复数集合 解题报告

    [九度OJ]题目1178:复数集合 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1178 题目描述: 一个复数(x+iy)集合,两种 ...

  6. 基于CA认证(结合文档在线预览)的电子签章解决方案

    分享一个基于CA认证(结合文档在线预览)的电子签章实现思路,恰巧是最近项目中遇到的,欢迎大家一起讨论. 一. 项目背景 在公司业务系统中,按照传统的签章方式,存在以下痛点: 1.成本高,体现在纸质合同 ...

  7. Codeforces 888C: K-Dominant Character(水题)

    You are given a string s consisting of lowercase Latin letters. Character c is called k-dominant iff ...

  8. Codeforces 1073C:Vasya and Robot(二分)

    C. Vasya and Robot time limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard ...

  9. C# RabbitMQ的使用

    本文目的如题. 安装 先说一下RabbitMQ的安装,建议使用Docker镜像安装,Docker安装的好处是不管Windows系统还是Linux,安装步骤少,安装方法相同,不容易出错.使用下面的命令就 ...

  10. RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

    RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...