微服務(wù)
以前所有的代碼都放在同一個(gè)工程中、部署在同一個(gè)服務(wù)器、同一項(xiàng)目的不同模塊不同功能互相搶占資源,微服務(wù)就是將工程根據(jù)不同的業(yè)務(wù)規(guī)則拆分成微服務(wù),部署在不同的服務(wù)器上,服務(wù)之間相互調(diào)用,java中有的微服務(wù)有dubbo(只能用來做微服務(wù))、springcloud( 提供了服務(wù)的發(fā)現(xiàn)、斷路器等)。
微服務(wù)的特點(diǎn)
1. 按業(yè)務(wù)劃分為一個(gè)獨(dú)立運(yùn)行的程序,即服務(wù)單元
2. 服務(wù)之間通過HTTP協(xié)議相互通信
3. 自動(dòng)化部署
4. 可以用不同的編程語言
5. 可以用不同的存儲(chǔ)技術(shù)
6. 服務(wù)集中化管理
7. 微服務(wù)是一個(gè)分布式系統(tǒng)
微服務(wù)的優(yōu)勢
1. 將一個(gè)復(fù)雜的業(yè)務(wù)拆分為若干小的業(yè)務(wù),將復(fù)雜的業(yè)務(wù)簡單化,新人只需要了解他所接管的服務(wù)的代碼,減少了新人的學(xué)習(xí)成本。
2. 由于微服務(wù)是分布式服務(wù),服務(wù)于服務(wù)之間沒有任何耦合。微服務(wù)系統(tǒng)的微服務(wù)單元具有很強(qiáng)的橫向拓展能力。
3. 服務(wù)于服務(wù)之間采用HTTP網(wǎng)絡(luò)通信協(xié)議來通信,單個(gè)服務(wù)內(nèi)部高度耦合,服務(wù)與服務(wù)之間完全獨(dú)立,無耦合。這使得微服務(wù)可以采用任何的開發(fā)語言和技術(shù)來實(shí)現(xiàn),提高開發(fā)效率、降低開發(fā)成本。
4. 微服務(wù)是按照業(yè)務(wù)進(jìn)行拆分的,并有堅(jiān)實(shí)的服務(wù)邊界,若要重寫某一業(yè)務(wù)代碼,不需了解所有業(yè)務(wù),重寫簡單。
5. 微服務(wù)的每個(gè)服務(wù)單元是獨(dú)立部署的,即獨(dú)立運(yùn)行在某個(gè)進(jìn)程中,微服務(wù)的修改和部署對其他服務(wù)沒有影響。
6. 微服務(wù)在CAP理論中采用的AP架構(gòu),具有高可用分區(qū)容錯(cuò)特點(diǎn)。高可用主要體現(xiàn)在系統(tǒng)7x24不間斷服務(wù),他要求系統(tǒng)有大量的服務(wù)器集群,從而提高系統(tǒng)的負(fù)載能力。分區(qū)容錯(cuò)也使得系統(tǒng)更加健壯。
微服務(wù)的不足
1. 微服務(wù)的復(fù)雜度:構(gòu)建一個(gè)微服務(wù)比較復(fù)雜,服務(wù)與服務(wù)之間通過HTTP協(xié)議或其他消息傳遞機(jī)制通信,開發(fā)者要選出最佳的通信機(jī)制,并解決網(wǎng)絡(luò)服務(wù)差時(shí)帶來的風(fēng)險(xiǎn)。
2. 分布式事物:將事物分成多階段提交,如果一階段某一節(jié)點(diǎn)失敗仍會(huì)導(dǎo)致數(shù)據(jù)不正確。如果事物涉及的節(jié)點(diǎn)很多,某一節(jié)點(diǎn)的網(wǎng)絡(luò)出現(xiàn)異常會(huì)導(dǎo)致整個(gè)事務(wù)處于阻塞狀態(tài),大大降低數(shù)據(jù)庫的性能。
3. 服務(wù)劃分:將一個(gè)完整的系統(tǒng)拆分成很多個(gè)服務(wù),是一件非常困難的事,因?yàn)檫@涉及了具體的業(yè)務(wù)場景。
4. 服務(wù)部署:最佳部署容器Docker。
微服務(wù)和SOA的關(guān)系
微服務(wù)相對于和ESB聯(lián)系在一起的SOA輕便敏捷的多,微服務(wù)將復(fù)雜的業(yè)務(wù)組件化,也是一種面向服務(wù)思想的體現(xiàn)。對于微服務(wù)來說,它是SOA的一種體現(xiàn),但是它比ESB實(shí)現(xiàn)的SOA更加輕便、敏捷和簡單。