更新時間:2020年04月10日14時21分 來源:傳智播客 瀏覽次數(shù):
就目前來看微服務(wù)并沒有一個嚴(yán)格的定義,每一個人對微服務(wù)的理解都是不一樣的. Martin Fowler 在它的博客中是這樣表述微服務(wù)的
微服務(wù)架構(gòu)風(fēng)格是一種將一個單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每一個服務(wù)運行在自己的進程中,服務(wù)間通信采用的輕量級通信機制(通常用 HTTP 資源 API)。 這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并且可通過全自動部署機制獨立部署。這些服務(wù)公用一個最小型的集中式的管理,服務(wù)可用不同的語言開發(fā),使用不同的數(shù)據(jù)存儲技術(shù), 微服務(wù)架構(gòu)如下圖所示:
微服務(wù)的優(yōu)點
·易于開發(fā)和維護: 一個微服務(wù)只會關(guān)注一個特定的業(yè)務(wù)功能,所以它業(yè)務(wù)清晰、代碼量少。開發(fā)和維護單個微服務(wù)相當(dāng)簡單。而整個應(yīng)用是若干個微服務(wù)構(gòu)建而成的,所以整個應(yīng)用也被維持在一個可控狀態(tài)。
·單個微服務(wù)啟動較快: 單個微服務(wù)代碼量較少,所以啟動會比較快。
·局部修改容易部署: 單個應(yīng)用只要有修改,就得重新部署整個應(yīng)用,微服務(wù)解決了這樣的問題。一般來說,對某個微服務(wù)進行修改,只需要重新部署這個服務(wù)即可。
·技術(shù)棧不受限: 在微服務(wù)架構(gòu)中,可以結(jié)合項目業(yè)務(wù)及團隊的特點,合理選擇技術(shù)棧。例如某些服務(wù)可以使用關(guān)系型數(shù)據(jù)庫 Mysql,有些服務(wù)可以使用非關(guān)系型數(shù)據(jù)庫如 redis;甚至可根據(jù)需求,部分微服務(wù)使用 Java 開發(fā),部分微服務(wù)使用 Node.js 開發(fā)。按需收縮: 可根據(jù)需求,實現(xiàn)細粒度的擴展。例如,系統(tǒng)中的某個微服務(wù)遇到了瓶頸,可以結(jié)合這個微服務(wù)的業(yè)務(wù)特點,增加內(nèi)存、升級 CPU 或者增加節(jié)點。
微服務(wù)的缺點
·運維要求較高: 更多的服務(wù)意味著更多的運維投入。在單體架構(gòu)中,只需要保證一個應(yīng)用的正常運行。而在微服務(wù)中,需要保證幾十甚至幾百個服務(wù)正常運行與協(xié)作,這給運維帶來了很大的挑戰(zhàn)。
·分布式固有的復(fù)雜性: 使用微服務(wù)構(gòu)建的是分布式系統(tǒng)。對于一個分布式系統(tǒng),系統(tǒng)容錯、網(wǎng)絡(luò)延遲等都會帶來巨大的挑戰(zhàn)。
·接口調(diào)整成本高: 微服務(wù)之間通過接口進行通信。如果修改某一個微服務(wù) API,可能所有使用該接口的微服務(wù)都需要調(diào)整。
猜你喜歡:
java中級程序員學(xué)習(xí)線路圖
如何通過Netty寫出一個客戶端和服務(wù)器?[java培訓(xùn)]
2020-04-07solr完成VIP等級排名實例教程[java培訓(xùn)]
2020-04-07傳智播客疫情期間如何保證教學(xué)質(zhì)量?教輔團隊轉(zhuǎn)戰(zhàn)線上
2020-04-03什么是Neo4j?如何通過Neo4j構(gòu)建《人民的名義》的關(guān)系圖譜?
2020-04-03傳智播客Java實戰(zhàn)項目紀(jì)實:java實戰(zhàn)項目過程再現(xiàn)
2020-04-03黑馬AI機器人實戰(zhàn)教程[Java培訓(xùn)]
2020-03-26