本發(fā)明涉及軟件開發(fā)技術領域,特別是涉及一種基于微服務的軟件開發(fā)方法、裝置及系統(tǒng)。
背景技術:
隨著企業(yè)級應用系統(tǒng)的規(guī)模和復雜度不斷增加,系統(tǒng)變得更加笨重和龐大,這對系統(tǒng)的開發(fā)、部署和升級提出了新的挑戰(zhàn),對企業(yè)應用架構的高效性和擴展性提出了更高的要求。
模塊化是解決復雜性問題的重要工具,可以把龐大的應用程序分割成多個模塊,每個模塊完成獨立的功能,模塊之間協(xié)同工作。這樣的模塊我們稱為組件。這些組件可以進行單獨開發(fā)、單獨編譯、單獨測試,把所有的組件組合在一起得到了完整的系統(tǒng)。采用組件化的應用結構,使系統(tǒng)的結構更加清晰,簡化大型應用系統(tǒng)在開發(fā)、部署和升級的難度,實現(xiàn)多種業(yè)務功能的分離。
傳統(tǒng)實現(xiàn)組件的方式是通過庫(library)或者面向開放服務網管(openservicegatewayinitiative,osgi)框架。
采用庫的方式是將通用的、與業(yè)務邏輯無關的工具類打成jar包放到web應用相應的目錄下,如j2ee平臺的web-inf/lib目錄。
osgi是一種動態(tài)模塊化標準,它為模塊化應用的開發(fā)定義了一個基礎架構?;趏sgi架構的應用程序由一系列osgi模塊組建。一般根據業(yè)務功能將 系統(tǒng)分解成多個osgi模塊,每個模塊是一個獨立的工程項目,包含了實現(xiàn)完整業(yè)務功能的所有前端代碼和后端代碼?;趏sgi架構的應用系統(tǒng)結構圖參見附圖1。
各業(yè)務模塊通過中間層的osgi動態(tài)模塊框架整合到一個web應用中,web應用作為一個整體運行在服務器上。基于osgi模塊化的應用系統(tǒng),實現(xiàn)了模塊的單獨開發(fā),而且可以在不重啟應用的情況下,動態(tài)地安裝、卸載、啟動和停止應用程序中的模塊。
通過庫實現(xiàn)組件化的方式,只是對后端工具類代碼進行了封裝,無法根據業(yè)務功能進行完整切分,各個業(yè)務功能的代碼混雜在一起,調試和部署難度大,一個或多個jar包的修改,需要重啟整個應用。
基于osgi模塊化技術的業(yè)務應用系統(tǒng),在開發(fā)期,可以實現(xiàn)模塊的物理分離,每個業(yè)務模塊獨立開發(fā)和調試,但是在部署運行時,仍需要將多個模塊耦合在一起發(fā)布到web容器上。這種方式帶來如下問題:首先,全部模塊在一個web應用中加載啟動,對資源要求高,需要高配置的服務器或集群來支撐系統(tǒng)的運行,部署成本高,而且不利于向云環(huán)境擴展。另外,不同的業(yè)務模塊所需資源不同,有些可能是cpu密集型的,另一些可能是io密集型的,在這種架構模式下,各個模塊不能獨立部署運行,當出現(xiàn)性能問題時只能擴展整個業(yè)務系統(tǒng),而不能針對模塊擴展其資源能力,系統(tǒng)擴展性差,而且相同的模塊在不同業(yè)務系統(tǒng)中需要重復部署,造成了資源浪費。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提供一種基于微服務的軟件開發(fā)方法、裝置及系統(tǒng),其采用一組微服務的方式來構建一個應用,通過將業(yè)務功能分解到各個離散的微 服務中實現(xiàn)對系統(tǒng)功能組件的解耦,能夠降低大型復雜業(yè)務系統(tǒng)的開發(fā)難度,克服傳統(tǒng)jar包或osgi方式部署成本高、系統(tǒng)擴展性差和資源浪費的問題,從而更加適于實用。
為了達到上述第一個目的,本發(fā)明提供的基于微服務的軟件開發(fā)方法的技術方案如下:
本發(fā)明提供的種基于微服務的軟件開發(fā)方法包括以下步驟:
將待開發(fā)軟件分解為若干微服務,并構建微服務框架;
將每個所述微服務分別作為一個獨立的開發(fā)、調試、部署和運行單元,進行獨立開發(fā);
通過所述微服務框架,實現(xiàn)所述若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控,完成所述待開發(fā)軟件的開發(fā)。
本發(fā)明提供的基于微服務的軟件開發(fā)方法還可采用以下技術措施進一步實現(xiàn)。
作為優(yōu)選,當需要對所述待開發(fā)軟件進行擴展時,通過對所述若干微服務中的任一或者若干獨立地進行水平擴展實現(xiàn)。
作為優(yōu)選,所述若干微服務包括web微服務和若干業(yè)務微服務,
所述web微服務用于對外提供http訪問,和,通過服務接口處理所述若干微服務的處理業(yè)務邏輯;
所述若干業(yè)務微服務用于具體業(yè)務。
作為優(yōu)選,所述若干微服務之間能夠通過rpc協(xié)議進行通信。
為了達到上述第二個目的,本發(fā)明提供的基于微服務的軟件開發(fā)裝置的技術方案如下:
本發(fā)明提供的基于微服務的軟件開發(fā)裝置包括微服務分解單元、微服務框 架構建單元,
所述微服務分解單元用于將待開發(fā)軟件分解為若干微服務;
所述微服務框架構建單元用于構建微服務框架,使得,通過所述微服務框架,能夠實現(xiàn)所述若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控。
本發(fā)明提供的基于微服務的軟件開發(fā)裝置還可采用以下技術措施進一步實現(xiàn)。
作為優(yōu)選,所述基于微服務的軟件開發(fā)裝置還包括擴展單元,
所述擴展單元用于通過對所述微服務中的任一或者若干獨立地進行水平擴展。
作為優(yōu)選,所述若干微服務包括web微服務和若干業(yè)務微服務,
所述web微服務用于對外提供http訪問,和,通過服務接口處理所述若干微服務的處理業(yè)務邏輯;
所述若干業(yè)務微服務用于具體業(yè)務。
作為優(yōu)選,所述若干微服務之間能夠通過rpc協(xié)議進行通信。
為了達到上述第三個目的,本發(fā)明提供的基于微服務的軟件開發(fā)系統(tǒng)的技術方案如下:
本發(fā)明提供的基于微服務的軟件開發(fā)系統(tǒng)包括微服務運行時容器和本地服務注冊中心,
所述微服務運行時容器用于為所述微服務的運行提供支撐;
所述本地服務注冊中心用于微服務的注冊發(fā)現(xiàn)、注冊中心之間消息同步和事件廣播、微服務集群組建,和,所述微服務集群中物理機的狀態(tài)監(jiān)測。
本發(fā)明提供的基于微服務的軟件開發(fā)系統(tǒng)還可采用以下技術措施進一步實現(xiàn)。
作為優(yōu)選,所述微服務運行時容器包括輕量級服務器、運行指標收集器、服務發(fā)現(xiàn)器、服務注冊器、負載均衡器、輕量級rpc中的一種或幾種。
作為優(yōu)選,所述負載均衡器選自軟負載均衡及容錯機制,或者,硬件負載均衡器。
作為優(yōu)選,所述輕量級rpc用于提供基于接口方法的透明遠程過程調用。
作為優(yōu)選,所述本地服務注冊中心用于維護服務提供者列表,其中,所述服務提供者列表為一個服務接口名和服務地址的映射表,保存了業(yè)務系統(tǒng)內所有微服務對外提供的服務信息。
作為優(yōu)選,所述本地服務注冊中心通過心跳檢測的方式獲取集群中各物理機的狀態(tài),當有機器宕機時,自動更新服務提供者列表,并向其他注冊中心廣播消息以實現(xiàn)服務列表同步更新。
作為優(yōu)選,所述微服務注冊用于,在微服務容器啟動時,服務注冊器向本地注冊中心發(fā)送消息,將微服務對外提供的業(yè)務服務進行注冊,同時服務發(fā)現(xiàn)器從注冊中心獲取該微服務調用的服務列表并緩存到微服務運行時容器的服務提供者列表中。
作為優(yōu)選,所述服務發(fā)現(xiàn)器每隔一定時間向注冊中心發(fā)送消息獲取服務列表的校驗碼,并與緩存的校驗碼進行對比,校驗不一致表明其所調用的服務地址發(fā)送變更,則服務發(fā)現(xiàn)器重新向本地注冊中心發(fā)送請求獲取服務列表;
本地注冊中心監(jiān)測服務發(fā)現(xiàn)器發(fā)送消息的時間間隔,并和設置的閾值進行對比,當超過閾值時,則認為此微服務容器異常,本地注冊中心更新本地服務提供者列表刪除該微服務對外發(fā)布的服務并廣播消息到其他的服務注冊中心。
本發(fā)明提供的基于微服務的軟件開發(fā)方法、裝置及系統(tǒng)通過將待開發(fā)軟件分解為若干微服務,并構建微服務框架;再將每個微服務分別作為一個獨立的 開發(fā)、調試、部署和運行單元,進行獨立開發(fā);最后通過微服務框架,實現(xiàn)若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控,完成待開發(fā)軟件的開發(fā)。其采用一組微服務的方式來構建一個應用,通過將業(yè)務功能分解到各個離散的微服務中實現(xiàn)對系統(tǒng)功能組件的解耦,業(yè)務系統(tǒng)的開發(fā)被分解成若干微服務的開發(fā),開發(fā)人員只需要關注微服務內部業(yè)務功能的邏輯實現(xiàn),微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控由微服務框架完成,能夠降低大型復雜業(yè)務系統(tǒng)的開發(fā)難度,解決傳統(tǒng)jar包或osgi方式部署成本高、系統(tǒng)擴展性差和資源浪費的問題。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1為現(xiàn)有基于osgi架構的應用系統(tǒng)結構圖;
圖2為本發(fā)明實施例一提供的基于微服務的軟件開發(fā)方法的步驟流程圖;
圖3為本發(fā)明實施例一提供的基于微服務的軟件開發(fā)方法中,web微服務與各業(yè)務微服務之間的架構關系示意圖,其中,對業(yè)務微服務2進行了水平擴展;
圖4為本發(fā)明實施例二提供的基于微服務的軟件開發(fā)裝置的信號流向關系示意圖;
圖5為本分買那個實施例三提供的基于微服務的軟件開發(fā)系統(tǒng)的信號流向關系示意圖。
具體實施方式
本發(fā)明為解決現(xiàn)有技術存在的問題,提供一種基于微服務的軟件開發(fā)方法、裝置及系統(tǒng),其采用一組微服務的方式來構建一個應用,通過將業(yè)務功能分解到各個離散的微服務中實現(xiàn)對系統(tǒng)功能組件的解耦,能夠降低大型復雜業(yè)務系統(tǒng)的開發(fā)難度,克服傳統(tǒng)jar包或osgi方式部署成本高、系統(tǒng)擴展性差和資源浪費的問題,從而更加適于實用。
為更進一步闡述本發(fā)明為達成預定發(fā)明目的所采取的技術手段及功效,以下結合附圖及較佳實施例,對依據本發(fā)明提出的基于微服務的軟件開發(fā)方法、裝置及系統(tǒng),其具體實施方式、結構、特征及其功效,詳細說明如后。在下述說明中,不同的“一實施例”或“實施例”指的不一定是同一實施例。此外,一或多個實施例中的特定特征、結構、或特點可由任何合適形式組合。
本文中術語“和/或”,僅僅是一種描述關聯(lián)對象的關聯(lián)關系,表示可以存在三種關系,例如,a和/或b,具體的理解為:可以同時包含有a與b,可以單獨存在a,也可以單獨存在b,能夠具備上述三種任一種情況。
實施例一
參見附圖2,本發(fā)明實施例一提供的種基于微服務的軟件開發(fā)方法包括以下步驟:
步驟1:將待開發(fā)軟件分解為若干微服務,并構建微服務框架;
步驟2:將每個微服務分別作為一個獨立的開發(fā)、調試、部署和運行單元,進行獨立開發(fā);
步驟3:通過微服務框架,實現(xiàn)若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控,完成待開發(fā)軟件的開發(fā)。
本發(fā)明實施例一提供的基于微服務的軟件開發(fā)方法通過將待開發(fā)軟件分解 為若干微服務,并構建微服務框架;再將每個微服務分別作為一個獨立的開發(fā)、調試、部署和運行單元,進行獨立開發(fā);最后通過微服務框架,實現(xiàn)若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控,完成待開發(fā)軟件的開發(fā)。其采用一組微服務的方式來構建一個應用,通過將業(yè)務功能分解到各個離散的微服務中實現(xiàn)對系統(tǒng)功能組件的解耦,業(yè)務系統(tǒng)的開發(fā)被分解成若干微服務的開發(fā),開發(fā)人員只需要關注微服務內部業(yè)務功能的邏輯實現(xiàn),微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控由微服務框架完成,能夠降低大型復雜業(yè)務系統(tǒng)的開發(fā)難度,解決傳統(tǒng)jar包或osgi方式部署成本高、系統(tǒng)擴展性差和資源浪費的問題。此外,該微服務框架實現(xiàn)了企業(yè)級應用系統(tǒng)功能組件服務化,實現(xiàn)組件分離、共享、動態(tài)擴展的目標。其中關鍵技術是微服務框架設計、微服務的動態(tài)注冊、去中心化的微服務發(fā)現(xiàn)及透明化的服務通信。
參見附圖2和附圖3,當需要對待開發(fā)軟件進行擴展時,通過對若干微服務中的任一或者若干獨立地進行水平擴展實現(xiàn)。
參見附圖3,若干微服務包括web微服務和若干業(yè)務微服務,web微服務用于對外提供http訪問,和,通過服務接口處理若干微服務的處理業(yè)務邏輯;若干業(yè)務微服務用于具體業(yè)務。
其中,web微服務,主要包括靜態(tài)ui資源,如html、js、css文件,web微服務通過組合使用各個業(yè)務微服務而向外提供訪問接口。服務接口包含微服務對外提供服務的接口定義。接口是微服務之間進行交互的規(guī)約,通過接口的方式實現(xiàn)了微服務之間的解耦。
參見附圖3,若干微服務之間能夠通過rpc協(xié)議進行通信。
實施例二
參見附圖4,本發(fā)明實施例二提供的基于微服務的軟件開發(fā)裝置包括微服務 分解單元、微服務框架構建單元,
微服務分解單元用于將待開發(fā)軟件分解為若干微服務;
微服務框架構建單元用于構建微服務框架,使得,通過微服務框架,能夠實現(xiàn)若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控。
本發(fā)明實施例二提供的基于微服務的軟件開發(fā)裝置通過微服務分解單元,將待開發(fā)軟件分解為若干微服務;再通過微服務框架構建單元構建微服務框架,使得,通過微服務框架,能夠實現(xiàn)若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控;在此基礎上,將每個微服務分別作為一個獨立的開發(fā)、調試、部署和運行單元,進行獨立開發(fā);最后通過微服務框架,實現(xiàn)若干微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控,完成待開發(fā)軟件的開發(fā)。其采用一組微服務的方式來構建一個應用,通過將業(yè)務功能分解到各個離散的微服務中實現(xiàn)對系統(tǒng)功能組件的解耦,業(yè)務系統(tǒng)的開發(fā)被分解成若干微服務的開發(fā),開發(fā)人員只需要關注微服務內部業(yè)務功能的邏輯實現(xiàn),微服務之間的注冊、發(fā)現(xiàn)、調用和監(jiān)控由微服務框架完成,能夠降低大型復雜業(yè)務系統(tǒng)的開發(fā)難度,解決傳統(tǒng)jar包或osgi方式部署成本高、系統(tǒng)擴展性差和資源浪費的問題。
實施例三
參見附圖5,本發(fā)明實施例三提供的基于微服務的軟件開發(fā)系統(tǒng)包括微服務運行時容器和本地服務注冊中心,
微服務運行時容器用于為微服務的運行提供支撐;
本地服務注冊中心用于微服務的注冊發(fā)現(xiàn)、注冊中心之間消息同步和事件廣播、微服務集群組建,和,微服務集群中物理機的狀態(tài)監(jiān)測。
其中,本實施例中,本地服務注冊中心是一個獨立的可執(zhí)行程序,在微服務所部署的物理機上運行,注冊中心之間通過gossip協(xié)議進行通訊,實現(xiàn)不同 物理機之間服務信息的同步。本地服務注冊中心的方式避免了傳統(tǒng)單一集中式注冊中心的單點故障問題。
其中,本實施例中,輕量級服務器是一個以嵌入式方式運行的應用服務器,內嵌到微服務中,使微服務可以直接啟動,無需再部署到應用服務器中。
其中,微服務運行時容器包括輕量級服務器、運行指標收集器、服務發(fā)現(xiàn)器、服務注冊器、負載均衡器、輕量級rpc中的一種或幾種。
其中,負載均衡器選自軟負載均衡及容錯機制,或者,硬件負載均衡器。本實施例中,負載均衡器為軟負載均衡及容錯機制,其能夠降低成本。
其中,輕量級rpc用于提供基于接口方法的透明遠程過程調用。其就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何api侵入。
其中,本地服務注冊中心用于維護服務提供者列表,其中,服務提供者列表為一個服務接口名和服務地址的映射表,保存了業(yè)務系統(tǒng)內所有微服務對外提供的服務信息。
其中,本地服務注冊中心通過心跳檢測的方式獲取集群中各物理機的狀態(tài),當有機器宕機時,自動更新服務提供者列表,并向其他注冊中心廣播消息以實現(xiàn)服務列表同步更新。
其中,微服務注冊用于,在微服務容器啟動時,服務注冊器向本地注冊中心發(fā)送消息,將微服務對外提供的業(yè)務服務進行注冊,同時服務發(fā)現(xiàn)器從注冊中心獲取該微服務調用的服務列表并緩存到微服務運行時容器的服務提供者列表中。
其中,服務發(fā)現(xiàn)器每隔一定時間向注冊中心發(fā)送消息獲取服務列表的校驗碼,并與緩存的校驗碼進行對比,校驗不一致表明其所調用的服務地址發(fā)送變更,則服務發(fā)現(xiàn)器重新向本地注冊中心發(fā)送請求獲取服務列表;
本地注冊中心監(jiān)測服務發(fā)現(xiàn)器發(fā)送消息的時間間隔,并和設置的閾值進行對比,當超過閾值時,則認為此微服務容器異常,本地注冊中心更新本地服務提供者列表刪除該微服務對外發(fā)布的服務并廣播消息到其他的服務注冊中心。
本發(fā)明提供的基于微服務的軟件開發(fā)方法、裝置及系統(tǒng)通過微服務架構的設計,通過離散的本地服務中心實現(xiàn)服務的注冊發(fā)布和同步,通過微服務運行時容器實現(xiàn)微服務的加載運行,負載均衡和通信;離散式本地注冊中心的方式避免了集中式注冊中心的單點故障問題;服務自動注冊與發(fā)現(xiàn),不需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的ip地址,并且能夠平滑添加或刪除服務提供者;基于微服務實現(xiàn)業(yè)務系統(tǒng)的組件化,實現(xiàn)組件的水平擴展;前端靜態(tài)資源和后端業(yè)務邏輯分離部署,根據資源特點采用不同的負載均衡策略。
此外,微服務框架屏蔽了遠程通信、服務發(fā)現(xiàn)等細節(jié),開發(fā)人員只需要關注業(yè)務功能的實現(xiàn);每個微服務單獨部署,節(jié)省關鍵競爭資源,降低部署成本和維護成本;每個微服務可實現(xiàn)彈性水平擴展,提升大型復雜業(yè)務系統(tǒng)運行期動態(tài)擴展能力;由于分解出的功能模塊粒度更細、功能職責更單一,相對于傳統(tǒng)架構和開發(fā)模式而言,這種模式更有利于軟件資產復用,避免功能上的重復建設;基于微服務框架的應用系統(tǒng)不依賴于外部的負載均衡軟硬件實現(xiàn)集群部署,提升了業(yè)務系統(tǒng)服務集群構建的靈活性,降低集群構建成本。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領域內的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及 其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。