微服務(wù)架構(gòu)是什么?微服務(wù)最早由Martin Fowler與James Lewis于2014年共同提出,微服務(wù)架構(gòu)風(fēng)格是一種使用一套小服務(wù)來開發(fā)單個(gè)應(yīng)用的方式途徑,每個(gè)服務(wù)運(yùn)行在自己的進(jìn)程中,并使用輕量級機(jī)制通信,通常是HTTP API,這些服務(wù)基于業(yè)務(wù)能力構(gòu)建,并能夠通過自動化部署機(jī)制來獨(dú)立部署,這些服務(wù)使用不同的編程語言實(shí)現(xiàn),以及不同數(shù)據(jù)存儲技術(shù),并保持最低限度的集中式管理。
微服務(wù)設(shè)計(jì)原則
單一職責(zé)原則
每個(gè)微服務(wù)只需要實(shí)現(xiàn)自己的業(yè)務(wù)邏輯即可。比如訂單管理模塊,它只需要處理訂單的業(yè)務(wù)邏輯就可以,其它的不必考慮。
圖中左邊是單體架構(gòu)的集群,右邊是微服務(wù)集群
傳統(tǒng)的單體架構(gòu)是以整個(gè)系統(tǒng)為單位進(jìn)行部署,而微服務(wù)則是以每一個(gè)獨(dú)立組件為單位進(jìn)行部署。
服務(wù)自治原則
每個(gè)微服務(wù)從開發(fā)、測試、運(yùn)維等都是相互獨(dú)立,互不干擾,包括存儲的數(shù)據(jù)庫也是,自己就有一套完整的流程,我們完全可以把它當(dāng)成一個(gè)項(xiàng)目來對待,不必依賴于其它模塊。

微服務(wù)的設(shè)計(jì)思想對團(tuán)隊(duì)的劃分有著一定的影響,使得團(tuán)隊(duì)組織架構(gòu)的劃分更傾向于垂直架構(gòu),比如用戶業(yè)務(wù)是一個(gè)團(tuán)隊(duì)來負(fù)責(zé),支付業(yè)務(wù)是一個(gè)團(tuán)隊(duì)來負(fù)責(zé)。
輕量級通信原則
首先是通信的語言非常的輕量,第二,該通信方式需要跨語言、跨平臺,之所以要跨平臺、跨語言就是為了讓每個(gè)微服務(wù)都有足夠的獨(dú)立性,可以不受技術(shù)的鉗制。

接口明確原則
由于微服務(wù)之間可能存在著調(diào)用關(guān)系,為了盡量避免以后由于某個(gè)微服務(wù)的接口變化而導(dǎo)致其它微服務(wù)都做調(diào)整,在設(shè)計(jì)之初就要考慮到所有情況,讓接口盡量做得更通用,更靈活,從而盡量避免其它模塊也做調(diào)整。

微服務(wù)特點(diǎn)
易于開發(fā)和維護(hù)
由于微服務(wù)單個(gè)模塊就相當(dāng)于一個(gè)項(xiàng)目,開發(fā)這個(gè)模塊我們就只需關(guān)心這個(gè)模塊的邏輯即可,代碼量和邏輯復(fù)雜度都會降低,從而易于開發(fā)和維護(hù)。
啟動較快
這是相對單個(gè)微服務(wù)來講的,相比于啟動單體架構(gòu)的整個(gè)項(xiàng)目,啟動某個(gè)模塊的服務(wù)速度明顯是要快很多的。
局部修改易于部署
在開發(fā)中發(fā)現(xiàn)了一個(gè)問題,如果是單體架構(gòu)的話,我們就需要重新發(fā)布并啟動整個(gè)項(xiàng)目,非常耗時(shí)間,但是微服務(wù)則不同,哪個(gè)模塊出現(xiàn)了bug我們只需要解決那個(gè)模塊的bug就可以了,解決完bug之后,我們只需要重啟這個(gè)模塊的服務(wù)即可,部署相對簡單,不必重啟整個(gè)項(xiàng)目從而大大節(jié)約時(shí)間。
如上圖,每個(gè)微服務(wù)都有自己的業(yè)務(wù)層和數(shù)據(jù)庫,這樣做,改變其中一個(gè)微服務(wù),不會影響其他的服務(wù)。
技術(shù)棧不受限
比如訂單微服務(wù)和短信微服務(wù)原來都是用java寫的,現(xiàn)在我們想把短信微服務(wù)改成nodeJs技術(shù),這是完全可以的,而且由于所關(guān)注的只是短信的邏輯而已,技術(shù)更換的成本也就會因此少很多。
按需伸縮
根據(jù)實(shí)際運(yùn)營需求,快速水平擴(kuò)展服務(wù)部署。
運(yùn)維要求較高
對于單體架構(gòu)來講,我們只需要維護(hù)好這一個(gè)項(xiàng)目就可以了,但是對于微服務(wù)架構(gòu)來講,由于項(xiàng)目是由多個(gè)微服務(wù)構(gòu)成的,每個(gè)模塊出現(xiàn)問題都會造成整個(gè)項(xiàng)目運(yùn)行出現(xiàn)異常,想要知道是哪個(gè)模塊造成的問題往往是不容易的,因?yàn)槲覀儫o法一步一步通過debug的方式來跟蹤,這就對運(yùn)維人員提出了很高的要求。
分布式的復(fù)雜性
對于單體架構(gòu)來講,我們可以不使用分布式,但是對于微服務(wù)架構(gòu)來說,分布式幾乎是必會用的技術(shù),由于分布式本身的復(fù)雜性,導(dǎo)致微服務(wù)架構(gòu)也變得復(fù)雜起來。
微服務(wù)開發(fā)框架
常用微服務(wù)的開發(fā)框架:
1.Spring Cloud:http://projects.spring.io/spring-cloud(現(xiàn)在非常流行的微服務(wù)架構(gòu))
2.Dubbo:http://dubbo.io
3.Dropwizard:http://www.dropwizard.io(關(guān)注單個(gè)微服務(wù)的開發(fā))
4.Consul、etcd&etc.(微服務(wù)的模塊)
Sprint cloud和Sprint boot區(qū)別
Spring Boot:
旨在簡化創(chuàng)建產(chǎn)品級的Spring應(yīng)用和服務(wù),簡化了配置文件,使用嵌入式web服務(wù)器,含有諸多開箱即用微服務(wù)功能,可以和spring cloud聯(lián)合部署。
Spring Cloud:
微服務(wù)工具包,為開發(fā)者提供了在分布式系統(tǒng)的配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線等開發(fā)工具包。
電商云平臺展示
電商云平臺基于多年的業(yè)務(wù)沉淀,以“大中臺小前臺的”思想,以微服務(wù)的架構(gòu),將各業(yè)務(wù)線中共享的功能沉淀到中臺服務(wù),加強(qiáng)中臺賦能業(yè)務(wù)前臺的能力。



