上篇文章开始,我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。
完整示例代码:https://github.com/nivin-studio/go-zero-mall
一个商城项目可拆分用户服务(user)、订单服务(order)、产品服务(product)、支付服务(pay)、售后服务(afterSale)...
每个服务都可以再分为 api
服务和 rpc
服务。api
服务对外,可提供给 app
调用。rpc
服务是对内的,可提供给内部 api
服务或者其他 rpc
服务调用。整个项目服务依赖流程图大致如下:
api 服务 | 端口:8000 | rpc 服务 | 端口:9000 |
---|---|---|---|
login | 用户登录接口 | login | 用户登录接口 |
register | 用户注册接口 | register | 用户注册接口 |
userinfo | 用户信息接口 | userinfo | 用户信息接口 |
... | ... | ... | ... |
api 服务 | 端口:8001 | rpc 服务 | 端口:9001 |
---|---|---|---|
create | 产品创建接口 | create | 产品创建接口 |
update | 产品修改接口 | update | 产品修改接口 |
remove | 产品删除接口 | remove | 产品删除接口 |
detail | 产品详情接口 | detail | 产品详情接口 |
... | ... | ... | ... |
api 服务 | 端口:8002 | rpc 服务 | 端口:9002 |
---|---|---|---|
create | 订单创建接口 | create | 订单创建接口 |
update | 订单修改接口 | update | 订单修改接口 |
remove | 订单删除接口 | remove | 订单删除接口 |
detail | 订单详情接口 | detail | 订单详情接口 |
list | 订单列表接口 | list | 订单列表接口 |
paid | 订单支付接口 | ||
... | ... | ... | ... |
api 服务 | 端口:8003 | rpc 服务 | 端口:9003 |
---|---|---|---|
create | 支付创建接口 | create | 支付创建接口 |
detail | 支付详情接口 | detail | 支付详情接口 |
callback | 支付回调接口 | callback | 支付回调接口 |
... | ... | ... | ... |
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 社区群里一起讨论。
https://github.com/zeromicro/go-zero
https://gitee.com/kevwan/go-zero
欢迎使用 go-zero
并 star 支持我们!
关注『微服务实践』公众号并点击 交流群 获取社区群二维码。
|