對(duì)著互聯(lián)網(wǎng)的快速發(fā)展,能夠微服務(wù)架構(gòu)作為一種能夠在云中部署應(yīng)用和服務(wù)的新技術(shù)受到廣泛關(guān)注。那么微服務(wù)到底有什么特性呢?中培偉業(yè)《-微服務(wù)架構(gòu)設(shè)計(jì)與最佳實(shí)踐》培訓(xùn)專(zhuān)家龔老師在這里進(jìn)行了介紹。龔老師指出,微服務(wù)作為當(dāng)前的熱門(mén)技術(shù),主要有以下幾個(gè)方面的特性。
1.單一職責(zé)
微服務(wù)架構(gòu)中的每個(gè)服務(wù),都是具有業(yè)務(wù)邏輯的,符合高內(nèi)聚、低耦合原則以及單一職責(zé)原則的單元,不同的服務(wù)通過(guò)“管道”的方式靈活組合,從而構(gòu)建出龐大的系統(tǒng)。
2. 輕量級(jí)通信
服務(wù)之間通過(guò)輕量級(jí)的通信機(jī)制實(shí)現(xiàn)互通互聯(lián),而所謂的輕量級(jí),通常指語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)的交互方式。
對(duì)于輕量級(jí)通信的格式而言,我們熟悉的 XML 和 JSON,它們是語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)的;對(duì)于通信的協(xié)議而言,通?;?HTTP,能讓服務(wù)間的通信變得標(biāo)準(zhǔn)化、無(wú)狀態(tài)化。目前大家熟悉的 REST(Representational State Transfer)是實(shí)現(xiàn)服務(wù)間互相協(xié)作的輕量級(jí)通信機(jī)制之一。使用輕量級(jí)通信機(jī)制,可以讓團(tuán)隊(duì)選擇更適合的語(yǔ)言、工具或者平臺(tái)來(lái)開(kāi)發(fā)服務(wù)本身。
3. 獨(dú)立性
每個(gè)服務(wù)在應(yīng)用交付過(guò)程中,獨(dú)立地開(kāi)發(fā)、測(cè)試和部署。
在單塊架構(gòu)中所有功能都在同一個(gè)代碼庫(kù),功能的開(kāi)發(fā)不具有獨(dú)立性;當(dāng)不同小組完成多個(gè)功能后,需要經(jīng)過(guò)集成和回歸測(cè)試,測(cè)試過(guò)程也不具有獨(dú)立性;當(dāng)測(cè)試完成后,應(yīng)用被構(gòu)建成一個(gè)包,如果某個(gè)功能存在 bug,將導(dǎo)致整個(gè)部署失敗或者回滾。
在微服務(wù)架構(gòu)中,每個(gè)服務(wù)都是獨(dú)立的業(yè)務(wù)單元,與其他服務(wù)高度解耦,只需要改變當(dāng)前服務(wù)本身,就可以完成獨(dú)立的開(kāi)發(fā)、測(cè)試和部署。
4. 進(jìn)程隔離
單塊架構(gòu)中,整個(gè)系統(tǒng)運(yùn)行在同一個(gè)進(jìn)程中,當(dāng)應(yīng)用進(jìn)行部署時(shí),必須停掉當(dāng)前正在運(yùn)行的應(yīng)用,部署完成后再重啟進(jìn)程,無(wú)法做到獨(dú)立部署。
有時(shí)候我們會(huì)將重復(fù)的代碼抽取出來(lái)封裝成組件,在單塊架構(gòu)中,組件通常的形態(tài)叫做共享庫(kù)(如 jar 包或者 DLL),但是當(dāng)程序運(yùn)行時(shí),所有組件最終也會(huì)被加載到同一進(jìn)程中運(yùn)行。
在微服務(wù)架構(gòu)中,應(yīng)用程序由多個(gè)服務(wù)組成,每個(gè)服務(wù)都是高度自治的獨(dú)立業(yè)務(wù)實(shí)體,可以運(yùn)行在獨(dú)立的進(jìn)程中,不同的服務(wù)能非常容易地部署到不同的主機(jī)上。
理論上所有服務(wù)可以部署在同一個(gè)服務(wù)器節(jié)點(diǎn),但是并不推薦這么做,因?yàn)槲⒎?wù)架構(gòu)的主旨就是高度自治和高度隔離。