有问有答 | 你真的理解微服务架构吗?
戳藍(lán)字“CSDN云計(jì)算”關(guān)注我們哦!
過(guò)去幾年來(lái),“微服務(wù)架構(gòu)”這個(gè)術(shù)語(yǔ)出現(xiàn)了,它描述了一種將軟件應(yīng)用程序設(shè)計(jì)為可獨(dú)立部署的服務(wù)套件的特定方式。近幾年微服務(wù)吵的也比較火,那么為什么微服務(wù)會(huì)受到這么多的關(guān)注?今天,我們就來(lái)看看有關(guān)于微服務(wù)的精華問(wèn)答吧
1
Q:微服務(wù)的主要作用是什么?
A:微服務(wù)被用來(lái)創(chuàng)建一些復(fù)雜的系統(tǒng),這些系統(tǒng)由小型且自治的服務(wù)構(gòu)成,而這些服務(wù)通過(guò)各自的API接口進(jìn)行數(shù)據(jù)交換,同時(shí)有相應(yīng)的有界上下文明確它們的范圍,一定程度來(lái)說(shuō),微服務(wù)就是面向?qū)ο缶幊谭椒ㄋ诖臇|西。
Q:微服務(wù)應(yīng)該如何拆分?
A:服務(wù)拆分有3個(gè)層次:
第一,是把技術(shù)性功能拆分出來(lái)比如,短信服務(wù)、郵件服務(wù);這是最簡(jiǎn)單的沒有大的難點(diǎn);無(wú)非是接口管理優(yōu)化一下。
第二,是把并行的無(wú)交集的業(yè)務(wù)流拆分出來(lái);如果業(yè)務(wù)庫(kù)拆分了,則難點(diǎn)是跨庫(kù)表連接如何處理。一般只能把需要連接的數(shù)據(jù)進(jìn)行同步。
第三,是將某業(yè)務(wù)流中串行的業(yè)務(wù)節(jié)點(diǎn)拆分出來(lái);業(yè)務(wù)節(jié)點(diǎn)分別在不同jvm中運(yùn)行,則難點(diǎn)是分布式事物。
跨jvm的分布式事物,可以用micro-datasource解決。
Q:如何把應(yīng)用分成若干個(gè)小服務(wù)?
A:第一,按業(yè)務(wù)功能分解,將應(yīng)用分解成能產(chǎn)生業(yè)務(wù)價(jià)值的最小單元。第二,對(duì)于跨多個(gè)業(yè)務(wù)的類(如訂單會(huì)被訂單管理、訂單交付多個(gè)服務(wù)用到)用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD),使用子域和邊界上下文的概念來(lái)著手解決。
Q:在微服務(wù), 前后端分離的場(chǎng)景下,服務(wù)端的設(shè)計(jì)的接口應(yīng)該是復(fù)合性的接口還是原子性的接口?例如:?一個(gè)web首頁(yè), 需要展示帖子列表、推薦帖子、活動(dòng)信息等多個(gè)模塊,那么服務(wù)端應(yīng)該分別提供 查詢帖子列表,查詢推薦帖子列表,查詢活動(dòng)信息列表等多個(gè)原子性接口。還是給前端提供一個(gè)復(fù)合接口, 一次性返回所有數(shù)據(jù)?
A:在微服務(wù)的系統(tǒng)架構(gòu)體系內(nèi),倡導(dǎo)的是解耦!從后端的角度看,業(yè)務(wù)系統(tǒng)的設(shè)計(jì)(或者說(shuō)數(shù)據(jù)庫(kù)設(shè)計(jì))應(yīng)該遵循領(lǐng)域建模的原則,給前端提供的接口,無(wú)非是對(duì)模型(表)的CRUD,那么對(duì)于活動(dòng)信息、帖子信息等,明顯不屬于一個(gè)領(lǐng)域模型。如果做耦合會(huì)不利于后面的
業(yè)務(wù)擴(kuò)展。http接口的定義要與實(shí)際的交互相結(jié)合,在滿足架構(gòu)設(shè)計(jì)的原則下,也需要和前端進(jìn)行溝通,一起制定。
Q:現(xiàn)在有個(gè)微服務(wù)項(xiàng)目,項(xiàng)目框架搭建中,多個(gè)微服務(wù)創(chuàng)建的過(guò)程中會(huì)用到一些spring boot常用的依賴,比如spring-boot-starter-web,spring-cloud-starter-eureka-server等必須的依賴,難道每個(gè)服務(wù)的pom文件中都要有這樣的依賴嗎,如果每個(gè)pom文件都這樣,后期jar升級(jí)是不是很麻煩,于是做了一個(gè)共通的jar,把所需要的共通依賴加載進(jìn)來(lái),可是后面發(fā)現(xiàn)好像會(huì)有jar沖突的現(xiàn)象,不知道有什么好的解決方案?
A:第一步,創(chuàng)建一個(gè)maven工程作為父工程(此工程放子工程公共依賴);第二步,把Packaging標(biāo)簽改為pom并保存;第三步,點(diǎn)擊Overview視圖找到Modules標(biāo)簽,標(biāo)簽右邊有兩個(gè)按鈕一個(gè)Add,一個(gè)Create);第四步,點(diǎn)擊Create標(biāo)簽創(chuàng)建子工程,子工程自動(dòng)依賴父工程pom,子工程特殊依賴只要在子工程pom加入即可。
---------------- ?完? --------------
1.微信群:
添加小編微信:color_ld,備注“進(jìn)群+姓名+公司職位”即可,加入【云計(jì)算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
2.征稿:
投稿郵箱:liudan@csdn.net;微信號(hào):color_ld。請(qǐng)備注投稿+姓名+公司職位。
推薦閱讀
云計(jì)算到底是怎么玩的?
企業(yè)云存儲(chǔ)建設(shè)之路
AI in 美團(tuán):吃喝玩樂背后的黑科技
開除“野狗”式程序員,團(tuán)隊(duì)的效率提高了
Windows 成“棄子”,Linux 終上位?
可替代Android的6大開源移動(dòng)操作系統(tǒng)
程序員求助:被領(lǐng)導(dǎo)強(qiáng)行要求寫B(tài)ug該怎么辦?網(wǎng)友的回答讓我笑翻
點(diǎn)擊“閱讀原文”,打開 CSDN App 閱讀更貼心!
總結(jié)
以上是生活随笔為你收集整理的有问有答 | 你真的理解微服务架构吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么牌子的铁锅好?
- 下一篇: 云漫圈 | 什么是微服务?