帶你十天輕鬆搞定 Go 微服務系列(二)
上篇文章開始,我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
-
環境搭建
-
服務拆分(本文)
-
用戶服務
-
產品服務
-
訂單服務
-
支付服務
-
RPC 服務 Auth 驗證
-
服務監控
-
鏈路追蹤
-
分佈式事務
期望通過本系列帶你在本機利用 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)
2 產品服務(product)
3 訂單服務(order)
4 支付服務(pay)
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 社區羣裏一起討論。
項目地址
https://github.com/zeromicro/go-zero
歡迎使用 go-zero 並 star 支持我們!
微信交流羣
關注『微服務實踐』公衆號並點擊 交流羣 獲取社區羣二維碼。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/yjBGPm3CK3e26D-qi4-mxQ