帶你十天輕松搞定 Go 微服務(wù)系列(二)
上篇文章開始,我們通過一個(gè)系列文章跟大家詳細(xì)展示一個(gè) go-zero 微服務(wù)示例,整個(gè)系列分十篇文章,目錄結(jié)構(gòu)如下:
環(huán)境搭建 服務(wù)拆分(本文) 用戶服務(wù) 產(chǎn)品服務(wù) 訂單服務(wù) 支付服務(wù) RPC 服務(wù) Auth 驗(yàn)證 服務(wù)監(jiān)控 鏈路追蹤 分布式事務(wù)
期望通過本系列帶你在本機(jī)利用 Docker 環(huán)境利用 go-zero 快速開發(fā)一個(gè)商城系統(tǒng),讓你快速上手微服務(wù)。
完整示例代碼:https://github.com/nivin-studio/go-zero-mall
服務(wù)拆分
一個(gè)商城項(xiàng)目可拆分用戶服務(wù)(user)、訂單服務(wù)(order)、產(chǎn)品服務(wù)(product)、支付服務(wù)(pay)、售后服務(wù)(afterSale)...
每個(gè)服務(wù)都可以再分為 api 服務(wù)和 rpc 服務(wù)。api 服務(wù)對(duì)外,可提供給 app 調(diào)用。rpc 服務(wù)是對(duì)內(nèi)的,可提供給內(nèi)部 api 服務(wù)或者其他 rpc 服務(wù)調(diào)用。整個(gè)項(xiàng)目服務(wù)依賴流程圖大致如下:

1 用戶服務(wù)(user)
api 服務(wù) | 端口:8000 | rpc 服務(wù) | 端口:9000 |
|---|---|---|---|
| login | 用戶登錄接口 | login | 用戶登錄接口 |
| register | 用戶注冊(cè)接口 | register | 用戶注冊(cè)接口 |
| userinfo | 用戶信息接口 | userinfo | 用戶信息接口 |
| ... | ... | ... | ... |
2 產(chǎn)品服務(wù)(product)
api 服務(wù) | 端口:8001 | rpc 服務(wù) | 端口:9001 |
|---|---|---|---|
| create | 產(chǎn)品創(chuàng)建接口 | create | 產(chǎn)品創(chuàng)建接口 |
| update | 產(chǎn)品修改接口 | update | 產(chǎn)品修改接口 |
| remove | 產(chǎn)品刪除接口 | remove | 產(chǎn)品刪除接口 |
| detail | 產(chǎn)品詳情接口 | detail | 產(chǎn)品詳情接口 |
| ... | ... | ... | ... |
3 訂單服務(wù)(order)
api 服務(wù) | 端口:8002 | rpc 服務(wù) | 端口:9002 |
|---|---|---|---|
| create | 訂單創(chuàng)建接口 | create | 訂單創(chuàng)建接口 |
| update | 訂單修改接口 | update | 訂單修改接口 |
| remove | 訂單刪除接口 | remove | 訂單刪除接口 |
| detail | 訂單詳情接口 | detail | 訂單詳情接口 |
| list | 訂單列表接口 | list | 訂單列表接口 |
| paid | 訂單支付接口 | ||
| ... | ... | ... | ... |
4 支付服務(wù)(pay)
api 服務(wù) | 端口:8003 | rpc 服務(wù) | 端口:9003 |
|---|---|---|---|
| create | 支付創(chuàng)建接口 | create | 支付創(chuàng)建接口 |
| detail | 支付詳情接口 | detail | 支付詳情接口 |
| callback | 支付回調(diào)接口 | callback | 支付回調(diào)接口 |
| ... | ... | ... | ... |
5 創(chuàng)建項(xiàng)目目錄
創(chuàng)建 mall工程
$?mkdir?mall?&&?cd?mall
$?go?mod?init?mall
創(chuàng)建 common目錄
$?mkdir?common
創(chuàng)建 service目錄
$?mkdir?service?&&?cd?service
創(chuàng)建 user api,user rpc,user model目錄
$?mkdir?-p?user/api
$?mkdir?-p?user/rpc
$?mkdir?-p?user/model
創(chuàng)建 product api,product rpc,product model目錄
$?mkdir?-p?product/api
$?mkdir?-p?product/rpc
$?mkdir?-p?product/model
創(chuàng)建 order api,order rpc,order model目錄
$?mkdir?-p?order/api
$?mkdir?-p?order/rpc
$?mkdir?-p?order/model
創(chuàng)建 pay api,pay rpc,pay model目錄
$?mkdir?-p?pay/api
$?mkdir?-p?pay/rpc
$?mkdir?-p?pay/model
最終項(xiàng)目目錄
├──?common???????????#?通用庫
├──?service??????????#?服務(wù)
│???├──?order
│???│???├──?api??????#?order?api?服務(wù)
│???│???├──?model????#?order?數(shù)據(jù)模型
│???│???└──?rpc??????#?order?rpc?服務(wù)
│???├──?pay
│???│???├──?api??????#?pay?api?服務(wù)
│???│???├──?model????#?pay?數(shù)據(jù)模型
│???│???└──?rpc??????#?pay?rpc?服務(wù)
│???├──?product
│???│???├──?api??????#?product?api?服務(wù)
│???│???├──?model????#?product?數(shù)據(jù)模型
│???│???└──?rpc??????#?product?rpc?服務(wù)
│???└──?user
│???????├──?api??????#?user?api?服務(wù)
│???????├──?model????#?user?數(shù)據(jù)模型
│???????└──?rpc??????#?user?rpc?服務(wù)
└──?go.mod
一些思考
微服務(wù)拆分并沒有統(tǒng)一的標(biāo)準(zhǔn),相同的業(yè)務(wù)在不同的公司很可能拆分方式會(huì)有所區(qū)別,用戶規(guī)模、團(tuán)隊(duì)大小、組員能力等都會(huì)是考慮因素。但我們還是有一些基本原則可以遵循:
由粗到細(xì),避免過度拆分,遵循漸進(jìn)式演進(jìn)的原則 不同服務(wù)之間應(yīng)該是正交的,不要你中有我我中有你 避免環(huán)形依賴,服務(wù)依賴關(guān)系應(yīng)該是有向無環(huán)圖 避免不同服務(wù)之間共享同一個(gè)數(shù)據(jù)庫
go-zero 也是一個(gè)漸進(jìn)式微服務(wù)框架,你可以在業(yè)務(wù)早期使用單體來快速滿足業(yè)務(wù),當(dāng)業(yè)務(wù)增長并有需要的時(shí)候,做最小的改動(dòng)即可做到漸進(jìn)式的服務(wù)拆分。
推薦閱讀
