go-zero 目錄拆分

2022-04-25 17:47 更新

目錄拆分

目錄拆分是指配合go-zero的最佳實(shí)踐的目錄拆分,這和微服務(wù)拆分有著關(guān)聯(lián),在團(tuán)隊(duì)內(nèi)部最佳實(shí)踐中, 我們按照業(yè)務(wù)橫向拆分,將一個(gè)系統(tǒng)拆分成多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)應(yīng)擁有獨(dú)立的持久化存儲,緩存系統(tǒng)。 如一個(gè)商城系統(tǒng)需要有用戶系統(tǒng)(user),商品管理系統(tǒng)(product),訂單系統(tǒng)(order),購物車系統(tǒng)(cart),結(jié)算中心系統(tǒng)(pay),售后系統(tǒng)(afterSale)等組成。

系統(tǒng)結(jié)構(gòu)分析

在上文提到的商城系統(tǒng)中,每個(gè)系統(tǒng)在對外(http)提供服務(wù)的同時(shí),也會提供數(shù)據(jù)給其他子系統(tǒng)進(jìn)行數(shù)據(jù)訪問的接口(rpc),因此每個(gè)子系統(tǒng)可以拆分成一個(gè)服務(wù),而且對外提供了兩種訪問該系統(tǒng)的方式api和rpc,因此, 以上系統(tǒng)按照目錄結(jié)構(gòu)來拆分有如下結(jié)構(gòu):

.
├── afterSale
│   ├── api
│   └── rpc
├── cart
│   ├── api
│   └── rpc
├── order
│   ├── api
│   └── rpc
├── pay
│   ├── api
│   └── rpc
├── product
│   ├── api
│   └── rpc
└── user
    ├── api
    └── rpc

rpc調(diào)用鏈建議

在設(shè)計(jì)系統(tǒng)時(shí),盡量做到服務(wù)之間調(diào)用鏈?zhǔn)菃蜗虻模茄h(huán)調(diào)用,例如:order服務(wù)調(diào)用了user服務(wù),而user服務(wù)反過來也會調(diào)用order的服務(wù), 當(dāng)其中一個(gè)服務(wù)啟動故障,就會相互影響,進(jìn)入死循環(huán),你order認(rèn)為是user服務(wù)故障導(dǎo)致的,而user認(rèn)為是order服務(wù)導(dǎo)致的,如果有大量服務(wù)存在相互調(diào)用鏈, 則需要考慮服務(wù)拆分是否合理。

常見服務(wù)類型的目錄結(jié)構(gòu)

在上述服務(wù)中,僅列舉了api/rpc服務(wù),除此之外,一個(gè)服務(wù)下還可能有其他更多服務(wù)類型,如rmq(消息處理系統(tǒng)),cron(定時(shí)任務(wù)系統(tǒng)),script(腳本)等, 因此一個(gè)服務(wù)下可能包含以下目錄結(jié)構(gòu):

user
    ├── api //  http訪問服務(wù),業(yè)務(wù)需求實(shí)現(xiàn)
    ├── cronjob // 定時(shí)任務(wù),定時(shí)數(shù)據(jù)更新業(yè)務(wù)
    ├── rmq // 消息處理系統(tǒng):mq和dq,處理一些高并發(fā)和延時(shí)消息業(yè)務(wù)
    ├── rpc // rpc服務(wù),給其他子系統(tǒng)提供基礎(chǔ)數(shù)據(jù)訪問
    └── script // 腳本,處理一些臨時(shí)運(yùn)營需求,臨時(shí)數(shù)據(jù)修復(fù)

完整工程目錄結(jié)構(gòu)示例

mall // 工程名稱
├── common // 通用庫
│   ├── randx
│   └── stringx
├── go.mod
├── go.sum
└── service // 服務(wù)存放目錄
    ├── afterSale
    │   ├── api
    │   └── model
    │   └── rpc
    ├── cart
    │   ├── api
    │   └── model
    │   └── rpc
    ├── order
    │   ├── api
    │   └── model
    │   └── rpc
    ├── pay
    │   ├── api
    │   └── model
    │   └── rpc
    ├── product
    │   ├── api
    │   └── model
    │   └── rpc
    └── user
        ├── api
        ├── cronjob
        ├── model
        ├── rmq
        ├── rpc
        └── script


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號