專利名稱:一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別涉及一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法。
背景技術(shù):
灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。AB test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度。對于應(yīng)用服務(wù)平臺而言,由于灰度發(fā)布的具體方法需要結(jié)合應(yīng)用服務(wù)平臺系統(tǒng)的具體應(yīng)用路由方式,實現(xiàn)非常復(fù)雜,而現(xiàn)有的灰度發(fā)布方法并不適用于本應(yīng)用服務(wù)平臺系統(tǒng),因此,現(xiàn)有針對應(yīng)用服務(wù)平臺的灰度發(fā)布解決方案是個迫切解決的問題,也就是說,迫切需要一種新的灰度發(fā)布方法來支持應(yīng)用服務(wù)平臺系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明提供了一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法,該方法能夠在本申請的發(fā)明人創(chuàng)造性地提出的應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布。為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的;本發(fā)明公開了一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法,其特征在于,在應(yīng)用服務(wù)平臺系統(tǒng)中設(shè)置代理服務(wù)器和云計算應(yīng)用服務(wù)系統(tǒng),且在云計算應(yīng)用服務(wù)系統(tǒng)中保存應(yīng)用的描述信息以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系;應(yīng)用的描述信息中包括灰度發(fā)布因子,對于不采用灰度發(fā)布的應(yīng)用,將其對應(yīng)的灰度發(fā)布因子設(shè)置為空;該方法包括代理服務(wù)器接收到客戶端請求消息后,對客戶端請求消息進行解析,通過查詢中心服務(wù)器上保存的應(yīng)用的描述信息識別所述客戶端請求消息所對應(yīng)的應(yīng)用,如果找到多個應(yīng)用,則按如下方式選擇代理服務(wù)器先在灰度發(fā)布因子不為空的應(yīng)用中對其灰度發(fā)布因子進行匹配,如果匹配命中則選擇所命中的應(yīng)用,如果沒有匹配命中則選擇灰度發(fā)布因子為空的應(yīng)用;代理服務(wù)器根據(jù)所選擇的應(yīng)用以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給云計算應(yīng)用服務(wù)系統(tǒng)中的對應(yīng)應(yīng)用所在的應(yīng)用服務(wù)器。本發(fā)明實施例的有益效果是本發(fā)明提供了一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法,該方法能夠在本申請的發(fā)明人創(chuàng)造性地提出的應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布。
圖1是本發(fā)明實施例中的一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法的流程圖;圖2是本發(fā)明實施例中的應(yīng)用服務(wù)平臺系統(tǒng)的一個實際組網(wǎng)示意圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細(xì)描述。圖1是本發(fā)明實施例中的一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法的流程圖。在應(yīng)用服務(wù)平臺系統(tǒng)中設(shè)置代理服務(wù)器和云計算應(yīng)用服務(wù)系統(tǒng),且在云計算應(yīng)用服務(wù)系統(tǒng)中保存應(yīng)用的描述信息以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系;應(yīng)用的描述信息中包括灰度發(fā)布因子,對于不采用灰度發(fā)布的應(yīng)用,將其對應(yīng)的灰度發(fā)布因子設(shè)置為空;則如圖1所示,該方法包括101,代理服務(wù)器接收到客戶端請求消息后,對客戶端請求消息進行解析,通過查詢中心服務(wù)器上保存的應(yīng)用的描述信息識別所述客戶端請求消息所對應(yīng)的應(yīng)用,如果找到多個應(yīng)用,則按如下方式選擇代理服務(wù)器先在灰度發(fā)布因子不為空的應(yīng)用中對其灰度發(fā)布因子進行匹配,如果匹配命中則選擇所命中的應(yīng)用,如果沒有匹配命中則選擇灰度發(fā)布因子為空的應(yīng)用。本步驟中,所述代理服務(wù)器先在灰度發(fā)布因子不為空的應(yīng)用中對其灰度發(fā)布因子進行匹配包括代理服務(wù)器根據(jù)灰度發(fā)布因子不為空的應(yīng)用各自的描述信息分別創(chuàng)建應(yīng)用上下文,對于其中的每個應(yīng)用,根據(jù)其應(yīng)用上下文中的灰度發(fā)布因子匹配條件信息匹配其描述信息中的灰度發(fā)布因子,如果符合灰度發(fā)布因子所表達的條件,則命中。102,代理服務(wù)器根據(jù)所選擇的應(yīng)用以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給云計算應(yīng)用服務(wù)系統(tǒng)中的對應(yīng)應(yīng)用所在的應(yīng)用服務(wù)器。下面對本發(fā)明中的應(yīng)用灰度發(fā)布方法所適用的應(yīng)用服務(wù)平臺系統(tǒng)進行說明。圖2是本發(fā)明實施例中的應(yīng)用服務(wù)平臺系統(tǒng)的一個實際組網(wǎng)示意圖。如圖2所示, 該應(yīng)用服務(wù)平臺系統(tǒng)包括代理服務(wù)器和云計算應(yīng)用服務(wù)系統(tǒng),其中,云計算應(yīng)用服務(wù)系統(tǒng)中的應(yīng)用服務(wù)器集群上負(fù)載并運行應(yīng)用,并且云計算應(yīng)用服務(wù)系統(tǒng)中保存有應(yīng)用的描述信息以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系;代理服務(wù)器,用于接收客戶端請求消息,對客戶端請求消息進行解析,確定對應(yīng)的應(yīng)用,如果有多個對應(yīng)的應(yīng)用,根據(jù)灰度發(fā)布因子最終確定一個應(yīng)用,然后根據(jù)該應(yīng)用的描述信息創(chuàng)建該應(yīng)用的應(yīng)用上下文,在所述客戶端請求消息中添加應(yīng)用上下文后,根據(jù)所述應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給對應(yīng)的應(yīng)用所在的應(yīng)用服務(wù)器;接收應(yīng)用服務(wù)器端返回的處理結(jié)果,并返回給客戶端;所述云計算應(yīng)用服務(wù)系統(tǒng)中的所述應(yīng)用服務(wù)器,用于在接收到代理服務(wù)器發(fā)送的客戶端請求消息時,將該客戶端請求消息交給對應(yīng)的應(yīng)用進行處理,并將處理結(jié)果返回給代理服務(wù)器;所述對應(yīng)的應(yīng)用處理該客戶端請求消息所請求的任務(wù),根據(jù)所述應(yīng)用上下文進行數(shù)據(jù)資源定位,得出處理結(jié)果。應(yīng)用服務(wù)器將所述處理結(jié)果經(jīng)代理服務(wù)器返回給客戶端。上述云計算應(yīng)用服務(wù)系統(tǒng)中保存的應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系,采用表格保存,其中記錄有應(yīng)用進程名稱和應(yīng)用服務(wù)路徑,即應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系。
如圖2所示,本發(fā)明實施例中,云計算應(yīng)用服務(wù)系統(tǒng)包括中心服務(wù)器、資源服務(wù)器和由多個應(yīng)用服務(wù)器組成的服務(wù)器集群,其中中心服務(wù)器,用于接收外部上傳的應(yīng)用,將應(yīng)用的描述信息保存到應(yīng)用配置信息列表中,創(chuàng)建所述應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系,并在對應(yīng)的應(yīng)用服務(wù)器上部署該應(yīng)用,保存用于保存應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系的應(yīng)用運行信息列表;每個應(yīng)用服務(wù)器,用于將所負(fù)載的應(yīng)用的運行信息上傳到中心服務(wù)器上的用于保存應(yīng)用與應(yīng)用服務(wù)器之間對應(yīng)關(guān)系的應(yīng)用運行信息列表中;其中,應(yīng)用配置信息列表包括如下信息應(yīng)用ID、應(yīng)用名稱、應(yīng)用服務(wù)類型、應(yīng)用進程名、應(yīng)用服務(wù)元數(shù)據(jù)標(biāo)注和灰度發(fā)布因子;應(yīng)用運行信息列表包括如下信息應(yīng)用進程名稱、應(yīng)用的服務(wù)地址;資源服務(wù)器,用于保存應(yīng)用服務(wù)器上的各應(yīng)用處理客戶端請求消息所請求的任務(wù)時需要訪問的數(shù)據(jù)資源;在本實施例中,資源服務(wù)器包括數(shù)據(jù)庫服務(wù)器、文件服務(wù)器和內(nèi)存對象緩沖服務(wù)器。代理服務(wù)器,用于接收客戶端請求消息,通過查詢中心服務(wù)器上的應(yīng)用配置信息列表識別該客戶端請求消息所對應(yīng)的應(yīng)用,然后通過查詢中心服務(wù)器上的應(yīng)用配置信息列表和應(yīng)用運行信息列表獲得對應(yīng)的應(yīng)用的服務(wù)地址,根據(jù)所獲得的服務(wù)地址將客戶端請求消息分發(fā)給對應(yīng)的應(yīng)用所在的應(yīng)用服務(wù)器;接收應(yīng)用服務(wù)器端返回的處理結(jié)果,并返回給客戶端;在本發(fā)明的一個實施例中,代理服務(wù)器包括超文本傳輸協(xié)議HTTP代理服務(wù)器、 初始會話SIP代理服務(wù)器和短信系統(tǒng)SMS代理服務(wù)器。其中,HTTP代理服務(wù)器負(fù)責(zé)分發(fā) HTTP應(yīng)用,SIP代理服務(wù)器負(fù)責(zé)與客戶端的SIP長連接,SMS代理服務(wù)器負(fù)責(zé)分發(fā)短信上行應(yīng)用。此外,云計算應(yīng)用服務(wù)系統(tǒng)還包括與應(yīng)用服務(wù)器集群連接的基礎(chǔ)服務(wù)服務(wù)器(在圖2中未畫出該基礎(chǔ)服務(wù)服務(wù)器),用于提供平臺內(nèi)部需求的一些核心應(yīng)用或獨立應(yīng)用。在圖2所示的應(yīng)用服務(wù)平臺系統(tǒng)中,所述代理服務(wù)器,用于在接收到客戶端請求消息時,從客戶端請求消息中提取請求參數(shù),查詢中心服務(wù)器中的應(yīng)用配置信息列表,查找出請求參數(shù)與元數(shù)據(jù)標(biāo)注字段符合的應(yīng)用配置信息列表項,進而識別出對應(yīng)的應(yīng)用。例如當(dāng)接收到HTTP請求消息時,根據(jù)該請求消息中的統(tǒng)一資源定位符URL,查詢中心服務(wù)器上的應(yīng)用配置信息列表,查找出應(yīng)用元數(shù)據(jù)標(biāo)注字段包含有與所述URL —致信息的應(yīng)用配置信息列表項,根據(jù)所查找出的應(yīng)用配置信息列表項中的應(yīng)用名稱識別出該客戶端請求消息所對應(yīng)的應(yīng)用;或者,代理服務(wù)器在接收到與遠(yuǎn)程調(diào)用應(yīng)用組件RemoteAppBean對應(yīng)的遠(yuǎn)程調(diào)用過程協(xié)議Rpc請求時,根據(jù)該請求消息中的遠(yuǎn)程調(diào)用服務(wù)名稱(RemoteAppName),查找出中心服務(wù)器上應(yīng)用名稱(AppName)字段與所述遠(yuǎn)程調(diào)用服務(wù)名稱一致的應(yīng)用配置信息列表項,根據(jù)所查找出的應(yīng)用配置信息列表項中的應(yīng)用名稱字段識別出該請求消息所對應(yīng)的應(yīng)用;所述代理服務(wù)器,用于根據(jù)所查找出的應(yīng)用配置信息列表項中的應(yīng)用進程名,查找出中心服務(wù)器上的應(yīng)用進程名稱字段包含與所述應(yīng)用進程名一致信息的應(yīng)用運行信息列表項,從所查找出的應(yīng)用運行信息列表項中獲取應(yīng)用服務(wù)的服務(wù)地址信息。并根據(jù)所述應(yīng)用的服務(wù)地址信息將客戶端請求消息分發(fā)給對應(yīng)的應(yīng)用所在的應(yīng)用服務(wù)器。所述代理服務(wù)器,根據(jù)所查找出的應(yīng)用配置信息列表項中的元數(shù)據(jù)標(biāo)注字段中的關(guān)于加載應(yīng)用服務(wù)上下文信息,創(chuàng)建應(yīng)用服務(wù)上下文。在圖2所示的應(yīng)用服務(wù)平臺系統(tǒng)中,中心服務(wù)器,進一步用于保存資源列表;資源列表包括如下信息資源名稱、資源類型、應(yīng)用服務(wù)上下文類型、定位算法名稱和定位算法參數(shù);應(yīng)用在接收到客戶端請求消息后,在完成該客戶端請求消息所請求的任務(wù)的過程中根據(jù)應(yīng)用上下文以及資源列表中的對應(yīng)信息進行資源定位??梢姡景l(fā)明這種由上述代理服務(wù)器、應(yīng)用服務(wù)器集群、中心服務(wù)器和資源服務(wù)器構(gòu)成的應(yīng)用服務(wù)平臺系統(tǒng),將分散的服務(wù)器資源在邏輯上整合到一起,極大降低了應(yīng)用的開發(fā)難度,提高了部署的靈活性并降低了部署的難度。關(guān)于應(yīng)用上下文稱為AppContext本發(fā)明的應(yīng)用服務(wù)平臺系統(tǒng)中不僅將開發(fā)模式拆分為面向單獨信令,并且將信令與應(yīng)用上下文綁定在一起,應(yīng)用上下文稱為AppContext。在本發(fā)明的應(yīng)用服務(wù)平臺系統(tǒng)中, 應(yīng)用服務(wù)上下文(AppContext)是應(yīng)用調(diào)用及資源定位的關(guān)鍵。這里應(yīng)用調(diào)用包括代理服務(wù)器調(diào)用應(yīng)用服務(wù),以及應(yīng)用服務(wù)內(nèi)調(diào)用其他的應(yīng)用服務(wù),這兩種應(yīng)用都需要AppContext 來實現(xiàn)目標(biāo)應(yīng)用服務(wù)的定位。AppContext可以這樣理解=AppContext綁定一個當(dāng)前應(yīng)用運行的所在環(huán)境身份, 比如當(dāng)前用戶,這樣做,開發(fā)人員在開發(fā)時刻是基于AppContext (當(dāng)前用戶)進行開發(fā),訪問資源(數(shù)據(jù)庫,文件,緩存)都必須通過當(dāng)前的AppContext,這樣開發(fā)者可以不用管理數(shù)據(jù)庫,文件,緩存等的拆分問題,甚至用戶數(shù)據(jù)的跨機房問題,只關(guān)基于當(dāng)前用戶進行開發(fā)即可,極大的簡化了開發(fā)模式,將系統(tǒng)部署結(jié)構(gòu)與開發(fā)過程隔離開來,實現(xiàn)高效,便捷的 PaaS平臺。AppContext從數(shù)據(jù)構(gòu)成上分為兩部分,AppContext是可序列化與反序列化的(1)通用資源標(biāo)志符URI (Context Uri)為字符串格式,包括用戶的索引信息,負(fù)責(zé)后續(xù)的定位,如 id 230302023 ;session 13910000001。(2)附加數(shù)據(jù)(ContextData):是預(yù)定義好的強類型數(shù)據(jù)結(jié)構(gòu),可以包含多個字段;其包括該應(yīng)用的屬性信息;應(yīng)用的屬性信息包括會話參數(shù)、授權(quán)信息等;在某些場合,附加數(shù)據(jù)會由Proxy產(chǎn)生提供給后面應(yīng)用,在長連接的Proxy服務(wù)器場景(參見Proxys章節(jié))。支持getNamedValue (String fieldName)方法,可以獲取到一個特定字段名的數(shù)據(jù),此方法被用于灰度發(fā)布場合(見后文)。AppContext是抽象基類,在Framework中預(yù)定義了以下的AppContext子類NullContext 預(yù)定義的空上下文,用在不需要上下文的場合;SessionContext 預(yù)定義的只保存會話Id的上下文。在復(fù)雜應(yīng)用中,一般會在Biz Library中擴展特定的AppContext,比如一個IM系統(tǒng),在SIP Proxy上會保存用戶的Session,那么我們可以擴展UserContext,那么每個應(yīng)用處理的時候都會接收到Proxy上保存的Session信息。除標(biāo)準(zhǔn)AppContext,在使用本發(fā)明的應(yīng)用服務(wù)系統(tǒng)平臺進行擴展開發(fā)的時候,需要先定制業(yè)務(wù)相關(guān)的一些基礎(chǔ),AppContext就是其中之一。下面例舉一個關(guān)于AppContext 的具體實施例。例如使用本發(fā)明的應(yīng)用服務(wù)平臺系統(tǒng)開個一個即時消息(IM)系統(tǒng),這個IM 系統(tǒng)中的用戶都采用一個整數(shù)id進行定位,那么可以根據(jù)如下方式定制這個IM系統(tǒng)的 AppContex,從 AppContext 派生,命名為 UserContext · Uri部分“id :230302023”,表示用戶的id,那么通過這個用戶的id,可以定位用戶的應(yīng)用服務(wù)位置與數(shù)據(jù)庫存儲位置;· Data 部分_用戶的登錄網(wǎng)絡(luò)地址;-客戶端類型等;當(dāng)定制了用戶的UserContext,所有該系統(tǒng)內(nèi)基于用戶進行操作的AppBean都會用UserContext作為AppBean的C 參數(shù),如-獲取用戶資料;-設(shè)置用戶資料;-獲取好友列表等;此外,在本發(fā)明的應(yīng)用服務(wù)平臺系統(tǒng)中,除了提供基于單個用戶的AppContext 外,還提供了基于群組的業(yè)務(wù)類型,開發(fā)基于群組的應(yīng)用服務(wù),也需要定制基于群組的AppContext,IM系統(tǒng)使用一個整數(shù)用于標(biāo)識群組,從AppContext派生,命名為 GroupContext, GroupContext 的結(jié)構(gòu)如下· Uri部分“group 123123”,標(biāo)識群組id,表示用戶的id,那么通過這個群組的 id,我們可以定位群組的應(yīng)用服務(wù)位置,與數(shù)據(jù)庫存儲位置;· Data 部分-群組的會話參數(shù);-群組的授權(quán)等;當(dāng)定制了基于群組的GroupContext后,該系統(tǒng)內(nèi)基于群組進行操作的所有 AppBean 都會用 GroupContext 作為 AppBean 的 C 參數(shù),如-設(shè)置群組名稱;-更新群組權(quán)限;-獲取群離線消息等。應(yīng)用的元數(shù)據(jù)標(biāo)注(Annotations)信息在發(fā)明中,開發(fā)一個應(yīng)用AppBean及擴展AppBean時,會通過Java元數(shù)據(jù)標(biāo)注 (Annotation)標(biāo)注應(yīng)用的負(fù)載方式,運行方式等數(shù)據(jù),此數(shù)據(jù)編譯后,可以在運行期加載, 或從編譯后的二進制包中將數(shù)據(jù)從反射中提取出來。在本發(fā)明的實施例中,一些預(yù)定義的Annotations如下文描述,擴展的AppBean都會定義自己特定的Annotation。1. OAppName (應(yīng)用的名字和分類名)·聲明AppBean的名字以及分類名;-OAppName (category = 〃 Core", name=" GetUserInfo");這里@ΧΧΧ為Java語言對程序元數(shù)據(jù)的標(biāo)注?!?Category :name 全局唯一;· category 可以用于 AppBean 的分類;-方便運維人員進行配置與分類;-在一個Category中,如果允許一個AppBean能夠被其他Category中的AppBean 訪問,必須將這個AppBean聲明成為公開,或友好;· iPub IicO 允許所有的 AppBean 訪問;
· OFriendlly ( “Core,,)只允許指定 Category 訪問;· OFriendlly( "Core =AddBuddy")只允許指定應(yīng)用訪問。2. OStateful (應(yīng)用的狀態(tài)信息)·當(dāng)聲明一個AppBean為有狀態(tài)的,則此個AppBean可以將狀態(tài)保存在本機內(nèi)存中;·沒有標(biāo)注OStateful的應(yīng)用均視為無狀態(tài)應(yīng)用,禁止使用本機內(nèi)存進行狀態(tài)的保存; 如果一個Category 中的多個AppBean聲明的 Stateful 參數(shù)一樣(“Presence”), 則這個幾個AppBean啟動到一個進程中,并且不允許單獨熱更新;· iStateful的應(yīng)用在熱更新的時候會丟失狀態(tài),所以盡量用memcache方式去代替,建議僅在某些性能要求很高的領(lǐng)域啟動;·當(dāng)某個AppBean被聲明為Stateful時,針對這個AppBean的訪問會采用這個 AppBean的AppContext綁定的一致性Hash的方式進行路由。3. OHttpPrefixHttpPrefix (HTTP 前綴,只針對 HttpAppBean)·用于標(biāo)注一個HttpAppBean處理的Http請求范圍; 如@HttpPrefix(〃 /login, do");-表示該HttpAppBean處理以login,do為起始的http請求。Message Name (事件名稱,只針對 MessageAppBean)·用于標(biāo)注一個MessageAppBean的名稱;·如@Message Name4. iContextLoader (加載應(yīng)用服務(wù)上下文信息)·用于標(biāo)注一個AppBean如何加載AppContext 如@ContextLoader (name = 〃 CookieParser〃 )-表示通過名為CookieParser的程序去處理處理Context;-CookieParser程序內(nèi)置在Proxy當(dāng)中,通過處理HttpRequest中的Cookie字段去加載用戶相關(guān)信息。在本發(fā)明的實施例中,一些預(yù)定義的Annotations不限于如上的幾種,可以根據(jù)實際業(yè)務(wù)需求增加其他的標(biāo)注。基于AppContext的資源訪問定位在本發(fā)明中,定義并實現(xiàn)一個具有某種業(yè)務(wù)功能的應(yīng)用后,這個應(yīng)用勢必要訪問各種資源,如數(shù)據(jù)庫、文件服務(wù)器、內(nèi)存對象緩沖服務(wù)器或其他提供的服務(wù)等。本發(fā)明中的應(yīng)用服務(wù)平臺系統(tǒng)是大型分布式系統(tǒng),所以這些資源都不是單點服務(wù),也就是同一個類型的數(shù)據(jù)庫可能存在多個縱向拆分(Sharding)的實例。本發(fā)明中將一個應(yīng)用能夠訪問的資源綁定在了其應(yīng)用上下文AppContext上。比如,聲明一個獲取用戶信息的應(yīng)用,名為GetUserlnfoApp,在應(yīng)用的實現(xiàn)環(huán)節(jié)讀取用戶數(shù)據(jù)庫(UserDB),將結(jié)果返回。其中UserDB存在多個通過用戶id進行取模后進行縱向拆分的實例。那么具體過程如下
1.代理服務(wù)器Http Proxy接收到來自于客戶端的Http請求;2. Http Proxy通過Http請求的URL判斷該請求對應(yīng)的應(yīng)用;具體為HttpProxy 通過訪問中心服務(wù)器上的應(yīng)用配置信息列表,找到元數(shù)據(jù)標(biāo)注Annotations字段中的@ HttpPrefix與Http請求的URL —致的應(yīng)用配置信息列表項,該表項對應(yīng)的應(yīng)用即為該 Http請求所對應(yīng)的應(yīng)用;3. Http Proxy通過步驟2識別該請求是GetUserInfoApp的請求,并需要 UserContext作為上下文參數(shù);4. Http Prorxy根據(jù)應(yīng)用配置信息表項中的Annotations字段中的@ ContextLoader,以及Http請求報文中提取的相關(guān)信息創(chuàng)建UserContext ;5. Http Proxy在來自客戶端的Http請求中添加了 UserContext數(shù)據(jù)后將Http 請求轉(zhuǎn)發(fā)到GetUserlnfoApp所在的應(yīng)用服務(wù)器;這里通過查詢應(yīng)用運行信息列表獲得 GetUserInfoAPP的服務(wù)地址。6.應(yīng)用服務(wù)器上的運行GetUserInf0App的應(yīng)用進程接收到Http請求,提取 UserContext,并交給 GetUserInfoApp 處理;7. GetUserInfoApp 讀取 UserDB,在讀取 UserDB 的時候,通過 UserContext 中的 id 信息,進行UserDB的定位;8. GetUserInfoApp 組織返回報文,并返回給 Http Proxy ;9. Http Proxy將返回報文返回給客戶端。在上述過程的步驟7中,通過資源(Resource)表進行定位。在本發(fā)明的一個實施例中的資源表如表1所示
權(quán)利要求
1.一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法,其特征在于,在應(yīng)用服務(wù)平臺系統(tǒng)中設(shè)置代理服務(wù)器和云計算應(yīng)用服務(wù)系統(tǒng),且在云計算應(yīng)用服務(wù)系統(tǒng)中保存應(yīng)用的描述信息以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系;應(yīng)用的描述信息中包括灰度發(fā)布因子,對于不采用灰度發(fā)布的應(yīng)用,將其對應(yīng)的灰度發(fā)布因子設(shè)置為空;該方法包括代理服務(wù)器接收到客戶端請求消息后,對客戶端請求消息進行解析,通過查詢中心服務(wù)器上保存的應(yīng)用的描述信息識別所述客戶端請求消息所對應(yīng)的應(yīng)用,如果找到多個應(yīng)用,則按如下方式選擇代理服務(wù)器先在灰度發(fā)布因子不為空的應(yīng)用中對其灰度發(fā)布因子進行匹配,如果匹配命中則選擇所命中的應(yīng)用,如果沒有匹配命中則選擇灰度發(fā)布因子為空的應(yīng)用;代理服務(wù)器根據(jù)所選擇的應(yīng)用以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給云計算應(yīng)用服務(wù)系統(tǒng)中的對應(yīng)應(yīng)用所在的應(yīng)用服務(wù)器。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述灰度發(fā)布因子為條件表達式;所述代理服務(wù)器先在灰度發(fā)布因子不為空的應(yīng)用中對其灰度發(fā)布因子進行匹配包括代理服務(wù)器根據(jù)灰度發(fā)布因子不為空的應(yīng)用各自的描述信息分別創(chuàng)建應(yīng)用上下文,對于其中的每個應(yīng)用,根據(jù)其應(yīng)用上下文中的灰度發(fā)布因子匹配條件信息匹配其描述信息中的灰度發(fā)布因子,如果符合灰度發(fā)布因子所表達的條件,則命中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,當(dāng)發(fā)布了應(yīng)用B和調(diào)用B的應(yīng)用A后,又對相應(yīng)的升級版本B’和A’進行了灰度發(fā)布,并將B’的灰度因子設(shè)定為匹配A’的版本號, 則客戶端請求消息路由到A’后的過程如下A’在應(yīng)用的描述信息中尋找要調(diào)用的應(yīng)用,找到B和B’;由于B’的灰度發(fā)布因子不為空,因此先進行匹配;A’獲取自身的版本號后匹配B’的灰度發(fā)布因子,命中;A’選擇B’作為調(diào)用的應(yīng)用。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述灰度發(fā)布因子的條件表達式為基本條件表達式,或多個基本條件表達式之間的邏輯運算關(guān)系表達式;基本條件表達式為取值點.取值條件;其中,取值點滿足取值條件時,命中。
5.根據(jù)權(quán)利要求1至4中任一項所述的方法,其特征在于,該方法進一步包括所述代理服務(wù)器根據(jù)所選擇應(yīng)用的描述信息創(chuàng)建應(yīng)用上下文,在所述客戶端請求消息中添加應(yīng)用上下文后,再根據(jù)所述應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給云計算應(yīng)用服務(wù)系統(tǒng)中的對應(yīng)應(yīng)用所在的應(yīng)用服務(wù)器;所述云計算應(yīng)用服務(wù)系統(tǒng)中的所述應(yīng)用服務(wù)器在接收到代理服務(wù)器發(fā)送的客戶端請求消息時,將該客戶端請求消息交給對應(yīng)的應(yīng)用進行處理;所述對應(yīng)的應(yīng)用處理該客戶端請求消息所請求的任務(wù),根據(jù)所述應(yīng)用上下文進行數(shù)據(jù)資源定位,得出處理結(jié)果;應(yīng)用服務(wù)器將所述處理結(jié)果經(jīng)代理服務(wù)器返回給客戶端。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述云計算應(yīng)用服務(wù)系統(tǒng)包括中心服務(wù)器、資源服務(wù)器和由多個應(yīng)用服務(wù)器組成的應(yīng)用服務(wù)器集群;其中,在資源服務(wù)器上保存應(yīng)用服務(wù)器上的各應(yīng)用處理客戶端請求消息所請求的任務(wù)時需要訪問的數(shù)據(jù)資源;所述應(yīng)用服務(wù)器集群上負(fù)載并運行應(yīng)用;所述在云計算應(yīng)用服務(wù)系統(tǒng)中保存應(yīng)用的描述信息以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系包括中心服務(wù)器接收外部上傳的應(yīng)用,將應(yīng)用的描述信息保存到應(yīng)用配置信息列表中,并將應(yīng)用部署到應(yīng)用服務(wù)器集群中的應(yīng)用服務(wù)器上;應(yīng)用服務(wù)器集群中的應(yīng)用服務(wù)器將所負(fù)載的應(yīng)用的運行信息上傳到中心服務(wù)器上的用于保存應(yīng)用與應(yīng)用服務(wù)器之間對應(yīng)關(guān)系的應(yīng)用運行信息列表中;其中,應(yīng)用配置信息列表包括如下信息應(yīng)用ID、應(yīng)用名稱、應(yīng)用類型、應(yīng)用進程名、應(yīng)用元數(shù)據(jù)標(biāo)注和灰度發(fā)布因子;應(yīng)用運行信息列表包括如下信息應(yīng)用進程名稱和應(yīng)用的服務(wù)地址;代理服務(wù)器根據(jù)應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給云計算應(yīng)用服務(wù)系統(tǒng)中的對應(yīng)應(yīng)用所在的應(yīng)用服務(wù)器包括代理服務(wù)器通過查詢中心服務(wù)器上的應(yīng)用配置信息列表和應(yīng)用運行信息列表獲得對應(yīng)的應(yīng)用的服務(wù)地址,根據(jù)所獲得的服務(wù)地址將客戶端請求消息分發(fā)給對應(yīng)的應(yīng)用服務(wù)所在的應(yīng)用服務(wù)器。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述代理服務(wù)器根據(jù)應(yīng)用的描述信息創(chuàng)建應(yīng)用上下文包括代理服務(wù)器在接收到客戶端請求消息時,從客戶端請求消息中提取請求參數(shù),查詢中心服務(wù)器中的應(yīng)用配置信息列表,查找出請求參數(shù)與元數(shù)據(jù)標(biāo)注字段符合的應(yīng)用配置信息列表項,然后根據(jù)該應(yīng)用配置信息列表項中的元數(shù)據(jù)標(biāo)注字段中的關(guān)于加載應(yīng)用上下文的信息,創(chuàng)建應(yīng)用上下文。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述中心服務(wù)器上還保存資源列表;資源列表包括如下信息資源名稱、資源類型、應(yīng)用上下文類型、定位算法名稱和定位算法參數(shù);所述應(yīng)用處理客戶端請求消息所請求的任務(wù),根據(jù)所述應(yīng)用上下文進行數(shù)據(jù)資源定位包括應(yīng)用在接收到客戶端請求消息后,在完成該客戶端請求消息所請求的任務(wù)的過程中根據(jù)應(yīng)用上下文以及資源列表中的對應(yīng)信息進行資源定位。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述代理服務(wù)器在接收到客戶端請求消息時,對客戶端請求消息進行解析,通過查詢中心服務(wù)器上的應(yīng)用配置信息列表識別所述客戶端請求消息所對應(yīng)的應(yīng)用包括代理服務(wù)器在接收到HTTP請求消息時,根據(jù)該請求消息中的統(tǒng)一資源定位符URL,查找出中心服務(wù)器上的應(yīng)用元數(shù)據(jù)標(biāo)注字段包括有與所述URL—致信息的應(yīng)用配置信息列表項,根據(jù)所查找出的應(yīng)用配置信息列表項中的應(yīng)用名稱識別出該客戶端請求消息所對應(yīng)的應(yīng)用;或者,代理服務(wù)器在接收到Rpc請求消息時,根據(jù)該請求消息中的遠(yuǎn)程調(diào)用服務(wù)名稱,查找出中心服務(wù)器上應(yīng)用名稱字段與所述遠(yuǎn)程調(diào)用服務(wù)名稱一致的應(yīng)用配置信息列表項,根據(jù)所查找出的應(yīng)用配置信息列表項中應(yīng)用名稱字段識別出該請求消息所對應(yīng)的應(yīng)用;所述通過查詢中心服務(wù)器上的應(yīng)用配置信息列表和應(yīng)用運行信息列表獲得對應(yīng)的應(yīng)用的服務(wù)地址包括代理服務(wù)器根據(jù)所查找出的應(yīng)用配置信息列表項中的應(yīng)用進程名,查找出中心服務(wù)器上的應(yīng)用進程名稱字段包含與所述應(yīng)用進程名一致信息的應(yīng)用運行信息列表項,從所查找出的應(yīng)用運行信息列表項中獲取應(yīng)用的服務(wù)地址信息。
10.根據(jù)權(quán)利要求6所述的方法,其特征在于,該方法進一步包括 將所述應(yīng)用服務(wù)器集群中的多個應(yīng)用服務(wù)器分為多個不同組; 在所述中心服務(wù)器上保存應(yīng)用服務(wù)器列表和應(yīng)用服務(wù)器分組列表;其中,應(yīng)用服務(wù)器列表包括如下信息應(yīng)用服務(wù)器名稱、應(yīng)用服務(wù)器所屬的分組名稱和應(yīng)用服務(wù)器地址;應(yīng)用服務(wù)器分組列表包括應(yīng)用服務(wù)器分組名稱和分組中的應(yīng)用服務(wù)器描述信息;中心服務(wù)器在接收到外部上傳的應(yīng)用時,根據(jù)外部指令將該應(yīng)用部署到單個應(yīng)用服務(wù)器上,或者部署到屬于同一組的多個服務(wù)器上。
全文摘要
本發(fā)明公開了一種在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布的方法。該方法包括在應(yīng)用服務(wù)平臺系統(tǒng)中的云計算應(yīng)用服務(wù)系統(tǒng)中保存應(yīng)用的描述信息以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系;應(yīng)用的描述信息中包括灰度發(fā)布因子;代理服務(wù)器接收到客戶端請求消息后,查詢應(yīng)用的描述信息識別所述客戶端請求消息所對應(yīng)的應(yīng)用,如果找到多個應(yīng)用,按如下方式選擇先在灰度發(fā)布因子不為空的應(yīng)用中對其灰度發(fā)布因子進行匹配,如果沒有匹配命中則選擇灰度發(fā)布因子為空的應(yīng)用;根據(jù)所選擇的應(yīng)用以及應(yīng)用與應(yīng)用服務(wù)器之間的對應(yīng)關(guān)系將客戶端請求消息分發(fā)給云計算應(yīng)用服務(wù)系統(tǒng)中的對應(yīng)應(yīng)用服務(wù)器。本發(fā)明的技術(shù)方案能夠在應(yīng)用服務(wù)平臺系統(tǒng)中對應(yīng)用進行灰度發(fā)布。
文檔編號H04L29/08GK102497454SQ201110460620
公開日2012年6月13日 申請日期2011年12月31日 優(yōu)先權(quán)日2011年12月31日
發(fā)明者趙博然, 高磊 申請人:北京新媒傳信科技有限公司