1.一種基于容器的服務(wù)多版本共存實(shí)現(xiàn)方法,其特征在于,通過在服務(wù)端配置多個(gè)服務(wù)節(jié)點(diǎn),每個(gè)服務(wù)節(jié)點(diǎn)內(nèi)配置多個(gè)容器,每個(gè)容器裝載不同的服務(wù)集,不僅使服務(wù)的多個(gè)版本共存,也使在服務(wù)共存環(huán)境中清晰地區(qū)分不同服務(wù)類型及同一服務(wù)類型的不同版本;利用容器區(qū)分新、老版本服務(wù),當(dāng)添加新服務(wù)或停止舊服務(wù)后,客戶端能根據(jù)自身的版本自動(dòng)篩選欲調(diào)用的服務(wù)版本,并從相應(yīng)的容器內(nèi)獲得服務(wù)調(diào)用結(jié)果,減少因客戶端與調(diào)用服務(wù)版本不相一致時(shí)的人為控制調(diào)用;多版本服務(wù)的共存使服務(wù)應(yīng)用在升級(jí)過程不需要再通過重新啟動(dòng)加載新服務(wù),簡(jiǎn)化服務(wù)升級(jí)的繁瑣流程,實(shí)現(xiàn)分布式環(huán)境中的服務(wù)熱部署;具體步驟如下:
步驟1:環(huán)境初始化,(1)服務(wù)端內(nèi)配置多個(gè)服務(wù)節(jié)點(diǎn),不同服務(wù)節(jié)點(diǎn)以IP地址和端口號(hào)作為唯一識(shí)別;(2)服務(wù)節(jié)點(diǎn)配置多個(gè)裝載服務(wù)集的容器,并為不同容器分配唯一的ID號(hào);(3)服務(wù)節(jié)點(diǎn)啟動(dòng),并檢查服務(wù)集的配置信息,并檢查服務(wù)集的配置信息,配置信息指明當(dāng)前需要發(fā)布的服務(wù)集名稱和版本,以及這些服務(wù)集在服務(wù)節(jié)點(diǎn)內(nèi)如何分配的信息;
所述服務(wù)集,是業(yè)務(wù)服務(wù)的集合,是業(yè)務(wù)服務(wù)在容器內(nèi)部署的最小單位;每一次新服務(wù)發(fā)布前,服務(wù)節(jié)點(diǎn)要從服務(wù)集倉(cāng)庫(kù)中下載欲發(fā)布的服務(wù)集,獲取服務(wù)集配置信息;服務(wù)集由服務(wù)集倉(cāng)庫(kù)統(tǒng)一管理,服務(wù)集倉(cāng)庫(kù)提供服務(wù)集的上傳、下載及版本管理;
所述容器,是部署服務(wù)集的組件,是用于提供服務(wù)集運(yùn)行的必要環(huán)境;
所述服務(wù)節(jié)點(diǎn),是包含容器的服務(wù)應(yīng)用;一臺(tái)物理機(jī)能部署多個(gè)服務(wù)節(jié)點(diǎn),一個(gè)服務(wù)節(jié)點(diǎn)內(nèi)能部署多個(gè)容器;
步驟2:服務(wù)節(jié)點(diǎn)運(yùn)行過程中啟動(dòng)服務(wù)節(jié)點(diǎn)中的容器,服務(wù)節(jié)點(diǎn)按照經(jīng)檢查過的服務(wù)集配置信息,將各服務(wù)集裝載入相應(yīng)的容器中;每個(gè)容器僅裝載一個(gè)服務(wù)集,且不同版本的服務(wù)集也由不同的容器裝載;
特別地,在服務(wù)節(jié)點(diǎn)的運(yùn)行過程中,服務(wù)節(jié)點(diǎn)能通過啟動(dòng)容器、停止容器、發(fā)布服務(wù)集的操作,動(dòng)態(tài)地操作容器裝載需要發(fā)布的服務(wù)集或停止正在運(yùn)行的容器;
步驟3:由各個(gè)容器啟動(dòng)裝載在各自內(nèi)部的服務(wù)集,將服務(wù)集中當(dāng)前需要對(duì)外發(fā)布的服務(wù)注冊(cè)信息輸入服務(wù)注冊(cè)中心,注冊(cè)消息包含需注冊(cè)服務(wù)的名稱、服務(wù)版本號(hào)、服務(wù)所在服務(wù)節(jié)點(diǎn)的IP地址和接口號(hào),以及服務(wù)所在容器的ID號(hào);
步驟4:服務(wù)注冊(cè)中心接收到由服務(wù)節(jié)點(diǎn)內(nèi)容器發(fā)送的服務(wù)注冊(cè)信息后,存儲(chǔ)服務(wù)注冊(cè)信息,并提取服務(wù)名稱、服務(wù)版本號(hào)、服務(wù)所在容器的ID號(hào),并依據(jù)黑白名單規(guī)則,針對(duì)記錄在白名單中的客戶端,向它推送所有有關(guān)該注冊(cè)服務(wù)的服務(wù)信息;針對(duì)記錄在黑名單中的客戶端,則拒絕推送;
步驟5:客戶端接收由服務(wù)注冊(cè)中心發(fā)送的服務(wù)名稱、服務(wù)版本號(hào)、服務(wù)所在容器的ID號(hào)和服務(wù)所在容器的編號(hào),并將接收到的上述信息緩存至本地,保存在客戶端的服務(wù)列表中;
所述服務(wù)列表,存儲(chǔ)關(guān)于某一項(xiàng)服務(wù)的服務(wù)名稱、服務(wù)版本號(hào)、服務(wù)所在容器的ID號(hào)等;
步驟6:當(dāng)客戶端有服務(wù)調(diào)用需求時(shí),從本地緩存中獲取服務(wù)列表,當(dāng)客戶端有服務(wù)調(diào) 用需求時(shí),從本地緩存中獲取服務(wù)列表,綜合考慮客戶端調(diào)用需求、客戶端版本、調(diào)用服務(wù)的版本及調(diào)用服務(wù)的當(dāng)前版本更新情況,在服務(wù)列表中進(jìn)行篩選,確定唯一且合適的裝載調(diào)用服務(wù)的服務(wù)節(jié)點(diǎn)和容器;步驟6中,客戶端本地緩存有關(guān)于某一項(xiàng)服務(wù)多個(gè)版本的信息,客戶端在服務(wù)調(diào)用過程中,能根據(jù)客戶端版本和服務(wù)調(diào)用需求,選擇合適的服務(wù)版本進(jìn)行調(diào)用;
步驟7:客戶端根據(jù)經(jīng)步驟6篩選出的服務(wù),將服務(wù)的服務(wù)名稱、服務(wù)版本號(hào)、服務(wù)所在容器的ID號(hào)形成服務(wù)調(diào)用請(qǐng)求,按照服務(wù)所在服務(wù)節(jié)點(diǎn)的IP地址和接口號(hào),將調(diào)用請(qǐng)求發(fā)送至對(duì)應(yīng)的服務(wù)節(jié)點(diǎn)處理;
步驟8:服務(wù)節(jié)點(diǎn)接收到服務(wù)調(diào)用請(qǐng)求后,解析請(qǐng)求內(nèi)容,獲取欲調(diào)用服務(wù)所在容器的ID號(hào),并根據(jù)容器ID號(hào)選擇該服務(wù)所在的容器對(duì)服務(wù)調(diào)用請(qǐng)求進(jìn)行處理;
步驟9:服務(wù)節(jié)點(diǎn)將服務(wù)調(diào)用請(qǐng)求發(fā)送至步驟8中已選擇的容器,由接收調(diào)用請(qǐng)求的容器根據(jù)請(qǐng)求信息中的服務(wù)名稱及服務(wù)版本號(hào),找到容器中服務(wù)集內(nèi)對(duì)應(yīng)的服務(wù),執(zhí)行服務(wù)并將結(jié)果反饋至客戶端;
步驟10:針對(duì)正在運(yùn)行的服務(wù)節(jié)點(diǎn),如欲向服務(wù)節(jié)點(diǎn)內(nèi)添加服務(wù)集或卸載服務(wù)集時(shí),由接收到請(qǐng)求的服務(wù)節(jié)點(diǎn)根據(jù)請(qǐng)求指令執(zhí)行容器的啟動(dòng)或關(guān)閉;在新添服務(wù)集和卸載服務(wù)集的過程中,以容器隔離新添的服務(wù)集與其他服務(wù)集、欲卸載的服務(wù)集與其他服務(wù)集的聯(lián)系,使客戶端對(duì)其他容器內(nèi)的服務(wù)集調(diào)用不會(huì)受到更新和卸載的影響。
2.根據(jù)權(quán)利要求1所述的一種基于容器的服務(wù)多版本實(shí)現(xiàn)方法,其特征在于,步驟1中所述服務(wù)集倉(cāng)庫(kù)和所述容器不同屬于一個(gè)概念,所述服務(wù)集倉(cāng)庫(kù)中存儲(chǔ)所有當(dāng)前需要發(fā)布的服務(wù)集的配置信息,而所述容器是用于加載所述服務(wù)集倉(cāng)庫(kù)中的某一個(gè)服務(wù)集的內(nèi)容。
3.根據(jù)權(quán)利要求1所述的一種基于容器的服務(wù)多版本實(shí)現(xiàn)方法,其特征在于,步驟2中所述服務(wù)節(jié)點(diǎn)的運(yùn)行過程中,服務(wù)節(jié)點(diǎn)能通過啟動(dòng)容器、停止容器、發(fā)布服務(wù)集的操作,動(dòng)態(tài)地操作容器裝載需要發(fā)布的服務(wù)集或停止正在運(yùn)行的容器。
4.根據(jù)權(quán)利要求1所述的一種基于容器的服務(wù)多版本實(shí)現(xiàn)方法,其特征在于,步驟6中所述的綜合客戶端調(diào)用需求、客戶端版本、調(diào)用服務(wù)的版本及調(diào)用服務(wù)的當(dāng)前版本更新情況,對(duì)服務(wù)列表的篩選步驟包括:(1)根據(jù)服務(wù)名稱和版本號(hào),從服務(wù)列表中篩選出符合要求的服務(wù);(2)在服務(wù)列表中,如果匹配到服務(wù)名稱,但是無法匹配版本號(hào),則選擇版本號(hào)最大的服務(wù)進(jìn)行匹配;(3)從篩選出的服務(wù)中,依據(jù)相應(yīng)的負(fù)載均衡算法邏輯,選擇出裝載該服務(wù)的唯一服務(wù)節(jié)點(diǎn)內(nèi)的容器,向篩選出的容器發(fā)送服務(wù)調(diào)用請(qǐng)求。
5.根據(jù)權(quán)利要求1所述的一種基于容器的服務(wù)多版本實(shí)現(xiàn)方法,其特征在于,在所述步驟10中,當(dāng)應(yīng)用更新過程中需要新添服務(wù)集時(shí),服務(wù)節(jié)點(diǎn)從服務(wù)集倉(cāng)庫(kù)中下載服務(wù)集,按照服務(wù)集配置信息啟動(dòng)服務(wù)節(jié)點(diǎn)內(nèi)的容器,并加載新服務(wù)集至容器中;容器通過向注冊(cè)中心發(fā)送服務(wù)注冊(cè)信息,實(shí)現(xiàn)新版本服務(wù)的公開發(fā)布;若是停止服務(wù)需要卸載服務(wù)集時(shí),首先,注冊(cè)中心從推送服務(wù)列表中刪除欲停止的服務(wù),并將最新的服務(wù)列表推送給所有客戶端,以 確保之后不會(huì)有請(qǐng)求訪問欲停止服務(wù)的新請(qǐng)求;然后,注冊(cè)中心通知服務(wù)節(jié)點(diǎn)停止服務(wù),當(dāng)服務(wù)節(jié)點(diǎn)接收到消息后,將停止服務(wù)所在的容器,并執(zhí)行銷毀容器的操作,包括停止服務(wù)的對(duì)外服務(wù)、取消在注冊(cè)中心內(nèi)的服務(wù)注冊(cè)。
6.根據(jù)權(quán)利要求1或4所述一種基于容器的服務(wù)多版本實(shí)現(xiàn)方法,其特征在于,所述客戶端的本地緩存中存有關(guān)于某一項(xiàng)服務(wù)多個(gè)版本的信息,客戶端在服務(wù)調(diào)用過程中,能根據(jù)客戶端版本和服務(wù)調(diào)用需求,選擇合適的服務(wù)版本進(jìn)行調(diào)用;
當(dāng)服務(wù)升級(jí)后,客戶端仍能在未升級(jí)的情況下,正常繼續(xù)對(duì)服務(wù)的調(diào)用,不會(huì)因服務(wù)的更新而間斷服務(wù)的調(diào)用;在新版本服務(wù)添加成功后,依據(jù)客戶端版本與服務(wù)版本的區(qū)別,有不同的服務(wù)調(diào)用邏輯:若客戶端版本號(hào)與調(diào)用服務(wù)的老版本號(hào)一致,當(dāng)服務(wù)新版本發(fā)布后,客戶端按照版本號(hào)完全匹配優(yōu)先原則,依然直接調(diào)用老版本服務(wù);只有在服務(wù)老版本完全停止后,客戶端才會(huì)自動(dòng)訪問新版本服務(wù);若客戶端版本號(hào)和調(diào)用服務(wù)的老版本號(hào)不一致,當(dāng)服務(wù)新版本發(fā)布后,客戶端直接獲取新版本服務(wù)集。