0
点赞
收藏
分享

微信扫一扫

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

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

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

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

完整示例代码:​​github.com/nivin-studi…​​

服务拆分

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

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

带你十天轻松搞定 Go 微服务系列(二)_数据模型

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 api​​​,​​user rpc​​​,​​user model​​ 目录
$ mkdir -p user/api
$ mkdir -p user/rpc
$ mkdir -p user/model
  • 创建​​product api​​​,​​product rpc​​​,​​product model​​ 目录
$ mkdir -p product/api
$ mkdir -p product/rpc
$ mkdir -p product/model
  • 创建​​order api​​​,​​order rpc​​​,​​order model​​ 目录
$ mkdir -p order/api
$ mkdir -p order/rpc
$ mkdir -p order/model
  • 创建​​pay api​​​,​​pay rpc​​​,​​pay 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 社区群里一起讨论。

项目地址

​​github.com/zeromicro/g…​​

欢迎使用 ​​go-zero​​ 并 ​star​ 支持我们!

微信交流群

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

举报

相关推荐

0 条评论