一.先弄清楚業(yè)務(wù)流程欢顷,捋清業(yè)務(wù)界限然后才能進(jìn)行技術(shù)設(shè)計(jì)
捋清楚業(yè)務(wù)界限和方向,再進(jìn)行微服務(wù)的劃分轨淌,數(shù)據(jù)模型(業(yè)務(wù)信息主體)的確定鸥印,然后在業(yè)務(wù)實(shí)現(xiàn)和不同業(yè)務(wù)交互的過(guò)程中再引入隊(duì)列、緩存蹬音、搜索上煤、數(shù)據(jù)庫(kù)等技術(shù),然后再基礎(chǔ)設(shè)施建設(shè)監(jiān)控著淆、安全
對(duì)于水平層面結(jié)構(gòu)的劃分楼入,應(yīng)該根據(jù)系統(tǒng)規(guī)模的需求
參考到家設(shè)計(jì)
重點(diǎn)看看極客時(shí)間 怎樣設(shè)計(jì)聚合
有效降低層與層之間的依賴
二.基本的水平結(jié)構(gòu):
web層(包括前端)、應(yīng)用層(跨領(lǐng)域服務(wù))牧抽、領(lǐng)域?qū)樱ㄊ蔷酆蟽?nèi)容,跨實(shí)體)遥赚、數(shù)據(jù)層
三扬舒、DDD中的實(shí)體對(duì)象和值對(duì)象
實(shí)體對(duì)象:有唯一標(biāo)識(shí)的對(duì)象,擁有id凫佛,其他屬性變了id不變?nèi)阅艽_定是這個(gè)對(duì)象
值對(duì)象:沒(méi)有唯一標(biāo)識(shí)讲坎,一旦屬性發(fā)生變化表示的就是另外一個(gè)對(duì)象,單個(gè)的值愧薛,字典
判斷是不是同一個(gè)對(duì)象的依據(jù)
實(shí)體對(duì)象:id晨炕; 值對(duì)象:值
DDD 引入值對(duì)象是希望實(shí)現(xiàn)從“數(shù)據(jù)建模為中心”向“領(lǐng)域建模為中心”轉(zhuǎn)變,減少數(shù)據(jù)庫(kù)表的數(shù)量和表與表之間復(fù)雜的依賴關(guān)系毫炉,盡可能地簡(jiǎn)化數(shù)據(jù)庫(kù)設(shè)計(jì)瓮栗,提升數(shù)據(jù)庫(kù)性能。在整個(gè)系統(tǒng)中二者根據(jù)具體的業(yè)務(wù)需求來(lái)確定,可以同時(shí)采用
將數(shù)據(jù)主體設(shè)置成值對(duì)象還是實(shí)體對(duì)象费奸,主要看這個(gè)對(duì)象是當(dāng)做主體來(lái)用還是當(dāng)做字典來(lái)用弥激,像同樣是地址,當(dāng)做為“收貨地址”來(lái)用 可以設(shè)置成值對(duì)象愿阐,當(dāng)做為“商圈”來(lái)用 可以做成實(shí)體對(duì)象 一個(gè)城市就有五個(gè)商圈 商圈是一個(gè)主體
跨實(shí)體的業(yè)務(wù)通過(guò)領(lǐng)域服務(wù)來(lái)實(shí)現(xiàn)(領(lǐng)域?qū)樱┪⒎瑢I(yè)務(wù)需要的實(shí)體聚合到一起也可以稱為聚合服務(wù)這個(gè)過(guò)程堅(jiān)持“高內(nèi)聚,低耦合”缨历,跨多個(gè)聚合的服務(wù)通過(guò)應(yīng)用層來(lái)實(shí)現(xiàn)
三以蕴、微服務(wù)解耦的關(guān)鍵:異步
領(lǐng)域事件需要數(shù)據(jù)交互 可以通過(guò)分布式事務(wù)和隊(duì)列兩種方式
微服務(wù)內(nèi)部可以采用分布式事務(wù)
微服務(wù)之間可以采用 異步 消息隊(duì)列
四、降低層與層之間的依賴
定義好聚合之間的界限辛孵,降低層與層之間的耦合
跨聚合應(yīng)該是應(yīng)用層
每一層只能與其下方的一層發(fā)生耦合
微服務(wù)存在重組和拆分:
微服務(wù)之間有拆分和重組丛肮,微服務(wù)內(nèi)部也有拆分和重組
拆分:
1.某個(gè)聚合經(jīng)常被高頻訪問(wèn),可以考慮拆分為獨(dú)立的服務(wù)(new-cpassport)
2.像服務(wù)1中的聚合b觉吭,隨著業(yè)務(wù)的發(fā)展可以放到服務(wù)2中去
重組:
1.比如領(lǐng)域服務(wù)a腾供、b、c鲜滩,隨著系統(tǒng)外部接入的越來(lái)越多伴鳖,發(fā)現(xiàn)b和c服務(wù)同時(shí)多次被一個(gè)應(yīng)用服務(wù)調(diào)用了,執(zhí)行順序也基本一致徙硅,可以考慮將b和c服務(wù)合并榜聂,再將應(yīng)用服務(wù)中b和c的功能下沉到領(lǐng)域?qū)樱葸M(jìn)成新的領(lǐng)域服務(wù)(b+c)嗓蘑。
四.中臺(tái)建設(shè)
中臺(tái)概念的形成是企業(yè)將原來(lái)分散的系統(tǒng)想要形成一個(gè)閉環(huán)生態(tài)须肆,生態(tài)需要共有的數(shù)據(jù)將各系統(tǒng)鏈接起來(lái),這樣產(chǎn)生了公共的數(shù)據(jù)和公共的業(yè)務(wù)桩皿,將這些公共的內(nèi)容向下沉淀抽取形成了中臺(tái)豌汇,中臺(tái)本身的定義就是“企業(yè)級(jí)能力的復(fù)用平臺(tái)”,在形成中臺(tái)的過(guò)程中有兩個(gè)方向泄隔,通用中臺(tái)(偏向工具)拒贱、核心中臺(tái)(偏向企業(yè)的核心數(shù)據(jù))。
1.中臺(tái)是不是僅僅是個(gè)Dao層佛嬉?
(1).數(shù)據(jù)中臺(tái)是領(lǐng)域服務(wù)的一種體現(xiàn)
(2).并不是簡(jiǎn)單的提供對(duì)單表數(shù)據(jù)的增刪改查逻澳,需要體現(xiàn)聚合的概念,像創(chuàng)建某個(gè)業(yè)務(wù)數(shù)據(jù)時(shí)暖呕,需要將這個(gè)業(yè)務(wù)的所有數(shù)據(jù)作為參數(shù)傳入中臺(tái)服務(wù)接口斜做,由中臺(tái)服務(wù)分發(fā)各個(gè)數(shù)據(jù)到對(duì)應(yīng)的表中;當(dāng)查詢時(shí)只需提供一個(gè)聚合根也就是業(yè)務(wù)id湾揽,由中臺(tái)服務(wù)組裝所有表的數(shù)據(jù)然后返給調(diào)用方
(3).如果業(yè)務(wù)方一個(gè)服務(wù)需要同時(shí)調(diào)用中臺(tái)多個(gè)服務(wù)瓤逼,這時(shí)可以提供一個(gè)適配層服務(wù)笼吟,對(duì)外只是一個(gè)接口,由適配層來(lái)調(diào)用多個(gè)中臺(tái)服務(wù)完成業(yè)務(wù)流程
? 以上能保證核心的數(shù)據(jù)和核心的業(yè)務(wù)在中臺(tái)抛姑,也實(shí)現(xiàn)中臺(tái)的模塊化赞厕,提高了與業(yè)務(wù)系統(tǒng)的解耦
2.中臺(tái)拆分的考慮
? 中臺(tái)也分核心中臺(tái)和通用中臺(tái),核心中臺(tái)是核心的競(jìng)爭(zhēng)力核心的數(shù)據(jù)定硝,通用中臺(tái)是通用的功能
? 在拆分的時(shí)候考慮 元素單元:是否是同一個(gè)業(yè)務(wù)內(nèi)的數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)特征:像登錄皿桑,name 、password蔬啡、賬號(hào)(訪問(wèn)高诲侮、不輕易變動(dòng)的數(shù)據(jù))是一個(gè)表,箱蟆,登錄次數(shù)沟绪,時(shí)間,記錄(訪問(wèn)量不高空猜,變化多)的數(shù)據(jù)是一個(gè)表绽慈,,辈毯,這樣能防止鎖表鎖行坝疼,提高執(zhí)行效率
《企業(yè)IT架構(gòu)轉(zhuǎn)型之道:阿里巴巴中臺(tái)戰(zhàn)略轉(zhuǎn)型思想和實(shí)戰(zhàn)》
3.中臺(tái)的作用
(1)進(jìn)行數(shù)據(jù)和功能的復(fù)用,防止重復(fù)性開(kāi)發(fā)谆沃,簡(jiǎn)化上層代碼钝凶,同時(shí)也單獨(dú)維護(hù)了通用業(yè)務(wù)邏輯和核心的數(shù)據(jù)
(2)對(duì)于家政來(lái)說(shuō),現(xiàn)在的中臺(tái)功能(商家中心唁影,支付中心耕陷,訂單中心)非常完備,如果出現(xiàn)了一個(gè)新的家政類型(不是保潔据沈、保姆哟沫、月嫂),這時(shí)候只需要開(kāi)發(fā)上層業(yè)務(wù)場(chǎng)景代碼就能直接實(shí)現(xiàn)這個(gè)功能锌介,不需要底層開(kāi)發(fā)
五嗜诀、DDD設(shè)計(jì)案例