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