微服務(wù)是指使用一套小服務(wù)來開發(fā)單個(gè)應(yīng)用的方式,每個(gè)服務(wù)運(yùn)行在獨(dú)立的進(jìn)程里,一般采用輕量級(jí)的通訊機(jī)制互聯(lián),并且它們可以通過自動(dòng)化的方式部署
微服務(wù)的特征
- 單一職責(zé)
只把緊密相關(guān)的服務(wù)放在一起,無關(guān)的業(yè)務(wù)獨(dú)立出去;
例如:訂單和支付、登錄和注冊(cè)、郵件、短信分別放在一起 - 輕量級(jí)通訊
定義:與平臺(tái)無關(guān),與開發(fā)語言無關(guān)
例如:Http
非輕量級(jí):Java的RMI,.Net的Remoting - 隔離性
每個(gè)微服務(wù)運(yùn)行在自己的進(jìn)程中,不會(huì)相互干擾 - 有自己的數(shù)據(jù)
業(yè)務(wù)數(shù)據(jù)的獨(dú)立性,每個(gè)微服務(wù)都有自己獨(dú)立的存儲(chǔ)系統(tǒng) - 技術(shù)多樣性
可選擇自己熟悉的語言(Java、C、Golang、Python),提供api就可以了
微服務(wù)誕生的背景
- 互聯(lián)網(wǎng)的快速發(fā)展
需求變化快、用戶數(shù)量變化快 - 敏捷開發(fā),精益方法深入人心
用最小的代價(jià)做最快的迭代,頻繁修改、測(cè)試、上線 - 容器技術(shù)的成熟
docker容器
微服務(wù)架構(gòu)圖
假定業(yè)務(wù)場(chǎng)景
— 在線教育網(wǎng)站
- 用戶可以注冊(cè)、登錄,獲取用戶信息
- 發(fā)短信、郵件功能
-
查看課程列表和課程的基本CURD
單體架構(gòu)圖:
image.png
微服務(wù)架構(gòu)圖:
image.png
優(yōu)勢(shì)
- 獨(dú)立性
每個(gè)服務(wù)都是單獨(dú)運(yùn)行,與其他服務(wù)互不影響,數(shù)據(jù)庫也獨(dú)立開來,修改的時(shí)候就不用考慮會(huì)影響其他模塊 - 敏捷性
功能單一,有清晰的API - 技術(shù)棧靈活
每個(gè)微服務(wù)都可以有自己獨(dú)立的技術(shù)棧 - 高效團(tuán)隊(duì)
每個(gè)團(tuán)隊(duì)只負(fù)責(zé)自己的服務(wù)
不足
- 額外的工作
考慮哪些服務(wù)放在一起,哪些服務(wù)需要拆分,不宜太大也不宜太小 - 數(shù)據(jù)一致性
盡量保證對(duì)數(shù)據(jù)庫的連表操作,數(shù)據(jù)表盡量搭在同一個(gè)微服務(wù)內(nèi)
單體:只有一個(gè)數(shù)據(jù)庫,可采用事物來進(jìn)行多表級(jí)聯(lián)修改、刪除,很容易達(dá)成一致性 - 溝通成本
想修改某個(gè)不是本組負(fù)責(zé)的服務(wù),需要與其他組進(jìn)行溝通處理

