用于支持灰度發(fā)布的方法、訪問方法以及裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ] 本申請涉及灰度發(fā)布技術(shù),具體涉及一種用于支持灰度發(fā)布的方法和裝置。本申請同時(shí)提供一種用于支持灰度發(fā)布的訪問方法和裝置,以及一種用于支持灰度發(fā)布的系統(tǒng)。
【背景技術(shù)】
[0002]在產(chǎn)品新版本的開發(fā)過程中,隨著開發(fā)階段的推進(jìn),通常會對新版本進(jìn)行模塊功能測試、系統(tǒng)功能測試、用戶體驗(yàn)測試等,這些測試一般都是局限于開發(fā)人員或者極少數(shù)用戶的小范圍測試,如果僅完成這些測試就將新版本直接推向市場,那么這種跳躍式的發(fā)布是相對危險(xiǎn)的,如果新版本出現(xiàn)嚴(yán)重錯(cuò)誤(bug),所有用戶都會感受到,不僅會嚴(yán)重影響用戶體驗(yàn),而且由于收到用戶的大量投訴,對新版本的管理者或者開發(fā)者都會造成巨大壓力。
[0003]對于互聯(lián)網(wǎng)產(chǎn)品來說,由于使用者通常都比較多,如果采用上述發(fā)布方式風(fēng)險(xiǎn)就更大,在這種情況下出現(xiàn)了灰度發(fā)布(也叫灰度放量)的概念。所謂灰度發(fā)布,是互聯(lián)網(wǎng)應(yīng)用中的一種發(fā)布方式,只把新版本給一小部分用戶使用,然后監(jiān)控這一小部分用戶的使用狀態(tài),如果新版本出現(xiàn)嚴(yán)重bug,那么將僅限于這一小部分用戶會感受到這個(gè)bug,如果新版本運(yùn)行良好,則可以逐步擴(kuò)大使用群體的范圍。由此可見,灰度發(fā)布是一種能夠平滑過渡的漸進(jìn)式的發(fā)布方式,一方面可以保證整體系統(tǒng)的穩(wěn)定,另一方面可以在發(fā)布的早期(初始灰度階段,用戶比較少的階段),及時(shí)根據(jù)用戶的意見反饋改進(jìn)產(chǎn)品質(zhì)量,可以有效降低新版本所影響的用戶范圍。
[0004]傳統(tǒng)的灰度發(fā)布使用HTTP重定向技術(shù)(redirect)進(jìn)行灰度發(fā)布時(shí)的分流,其基本原理是這樣的:每個(gè)用戶的瀏覽器在首次訪問跳轉(zhuǎn)服務(wù)器時(shí),服務(wù)器會在客戶端存放包含用戶ID的Cookie (也稱為Cookie被種上用戶ID),此后瀏覽器再訪問跳轉(zhuǎn)服務(wù)器時(shí)就會攜帶該Cookie信息,而跳轉(zhuǎn)服務(wù)器接收到瀏覽器的請求后,對Cookie信息中包含的用戶ID進(jìn)行Hash取余,并將余數(shù)符合某些規(guī)則的用戶請求重定向到灰度服務(wù)器(提供新版本服務(wù)的服務(wù)器),而其他用戶請求則會被重定向到普通服務(wù)器,從而實(shí)現(xiàn)灰度發(fā)布功能。
[0005]傳統(tǒng)的灰度發(fā)布技術(shù)適用于互聯(lián)網(wǎng)應(yīng)用,由于客戶端是相對穩(wěn)定的瀏覽器,不需要經(jīng)常升級,所以灰度發(fā)布只要考慮服務(wù)端即可。但是對于無線App來說,一般情況下客戶端App和服務(wù)端都要升級,如果仍然采用傳統(tǒng)的灰度發(fā)布方式,則存在以下缺陷:
[0006]一方面,由于傳統(tǒng)灰度發(fā)布采用根據(jù)用戶ID進(jìn)行Hash取余的方法進(jìn)行用戶請求的分流,而用戶ID與客戶端App的版本沒有任何關(guān)系,因此無法保證新版本App訪問新版本服務(wù)器、而舊版本App訪問舊版本服務(wù)器,而且當(dāng)新版本服務(wù)出現(xiàn)問題時(shí),新版本App無法回退到舊版本,不僅影響灰度發(fā)布的正常進(jìn)行,同時(shí)也影響用戶的使用體驗(yàn)。
[0007]另一方面,由于傳統(tǒng)灰度發(fā)布是基于重定向技術(shù)的,服務(wù)端的返回結(jié)果分布在各個(gè)服務(wù)器上,因此無法有效地對返回結(jié)果進(jìn)行監(jiān)控和管理。
【發(fā)明內(nèi)容】
[0008]本申請?zhí)峁┮环N用于支持灰度發(fā)布的方法和裝置,以解決現(xiàn)有的灰度發(fā)布方法無法根據(jù)版本信息對客戶端訪問請求進(jìn)行分流的問題。本申請另外提供一種用于支持灰度發(fā)布的訪問方法和裝置,以及一種用于支持灰度發(fā)布的系統(tǒng)。
[0009]本申請?zhí)峁┮环N用于支持灰度發(fā)布的方法,包括:
[0010]接收來自客戶端的至少包含版本信息的訪問請求;
[0011]根據(jù)所述訪問請求中包含的版本信息,將所述訪問請求發(fā)送給與所述版本信息對應(yīng)的目標(biāo)服務(wù)器;
[0012]將所述目標(biāo)服務(wù)器針對所述訪問請求返回的結(jié)果發(fā)送給所述客戶端。
[0013]可選的,所述根據(jù)所述訪問請求中包含的版本信息,將所述訪問請求發(fā)送給與所述版本信息對應(yīng)的目標(biāo)服務(wù)器包括:
[0014]提取所述訪問請求包含的版本信息;
[0015]獲取包含版本信息和目標(biāo)服務(wù)器對應(yīng)關(guān)系的配置信息;
[0016]根據(jù)所述配置信息,將所述訪問請求發(fā)送給與所述版本信息對應(yīng)的目標(biāo)服務(wù)器。
[0017]可選的,所述獲取包含版本和目標(biāo)服務(wù)器對應(yīng)關(guān)系的配置信息,包括:
[0018]向提供所述配置信息的服務(wù)器發(fā)送獲取配置信息的請求;
[0019]接收上述服務(wù)器返回的配置信息。
[0020]可選的,在執(zhí)行所述接收來自客戶端的至少包含版本信息的訪問請求的步驟前,執(zhí)行下述步驟:
[0021]接收來自所述客戶端的獲取客戶端可用服務(wù)版本列表信息的請求;
[0022]獲取所述客戶端可用的服務(wù)版本列表信息;
[0023]將所述客戶端可用的服務(wù)版本列表信息發(fā)送給所述客戶端。
[0024]可選的,所述獲取所述客戶端可用的服務(wù)版本列表信息,包括:
[0025]向提供系統(tǒng)可用服務(wù)版本列表信息的服務(wù)器發(fā)送獲取所述客戶端可用的服務(wù)版本列表信息的請求;
[0026]接收上述服務(wù)器返回的客戶端可用服務(wù)版本列表信息。
[0027]可選的,所述獲取所述客戶端可用的服務(wù)版本列表信息,包括:
[0028]從所述獲取客戶端可用服務(wù)版本列表信息的請求中提取用戶標(biāo)識和所述客戶端支持的版本信息;
[0029]選擇在系統(tǒng)可用服務(wù)版本列表信息中包含的、并且所述客戶端也支持的服務(wù)版本,生成候選服務(wù)版本列表信息;
[0030]判斷所述候選服務(wù)版本列表信息中是否包含新版本信息;
[0031]若包含新版本信息,判斷所述用戶標(biāo)識是否在訪問新版本服務(wù)的客戶端列表中;若是,將所述候選服務(wù)版本列表信息作為所述客戶端可用的服務(wù)版本列表信息;若否,則根據(jù)訪問新版本服務(wù)的客戶端規(guī)模調(diào)整所述候選服務(wù)版本列表信息,使得訪問新版本服務(wù)的客戶端規(guī)模滿足預(yù)先設(shè)定的要求,并且將調(diào)整后的候選服務(wù)版本列表信息作為所述客戶端可用的服務(wù)版本列表信息。
[0032]若不包含新版本信息,則將所述候選服務(wù)版本列表信息作為所述客戶端可用的服務(wù)版本列表信息。
[0033]可選的,所述根據(jù)訪問新版本服務(wù)的客戶端規(guī)模調(diào)整所述候選服務(wù)版本列表信息,包括:
[0034]判斷訪問新版本服務(wù)的客戶端數(shù)量或者比例是否大于或者等于預(yù)先指定的數(shù)值;
[0035]若是,則從所述候選服務(wù)版本列表信息中剔除新版本服務(wù)的版本信息,并且將所述用戶標(biāo)識添加到訪問舊版本服務(wù)的客戶端列表中;
[0036]若否,將所述用戶標(biāo)識添加到訪問新版本服務(wù)的客戶端列表中,并更新訪問新版本服務(wù)的客戶端的數(shù)量或者比例。
[0037]可選的,在所述將所述客戶端可用的服務(wù)版本列表信息發(fā)送給所述客戶端的步驟之后,執(zhí)行下述步驟:
[0038]監(jiān)測系統(tǒng)可用服務(wù)版本列表信息是否發(fā)生變更;
[0039]若發(fā)生變更,向所述客戶端推送系統(tǒng)可用服務(wù)版本列表變更消息。
[0040]可選的,所述監(jiān)測所述系統(tǒng)可用服務(wù)版本列表信息是否變更,采用如下方式實(shí)現(xiàn):
[0041]定期向提供系統(tǒng)可用服務(wù)版本列表信息的服務(wù)器發(fā)送獲取所述系統(tǒng)可用服務(wù)版本列表的請求,并對接收到的系統(tǒng)可用服務(wù)版本列表信息和前次獲取的系統(tǒng)可用服務(wù)版本列表信息進(jìn)行比較,判斷所述信息是否發(fā)生了變更;或者,
[0042]接收提供系統(tǒng)可用服務(wù)版本列表信息的服務(wù)器推送的變更通知。
[0043]可選的,所述方法還包括:
[0044]監(jiān)控所述目標(biāo)服務(wù)器返回結(jié)果的相關(guān)信息。
[0045]可選的,所述監(jiān)控所述目標(biāo)服務(wù)器返回結(jié)果的相關(guān)信息,包括:
[0046]將所述目標(biāo)服務(wù)器返回結(jié)果的相關(guān)信息上報(bào)給負(fù)責(zé)監(jiān)控的服務(wù)器。
[0047]可選的,所述方法還包括:
[0048]將所述訪問請求發(fā)送給與所述版本信息對應(yīng)的目標(biāo)服務(wù)器不同的其他目標(biāo)服務(wù)器;
[0049]將與所述版本信息對應(yīng)的目標(biāo)服務(wù)器返回的結(jié)果和所述其他目標(biāo)服務(wù)器返回的結(jié)果進(jìn)行比較和統(tǒng)計(jì)。
[0050]可選的,所述根據(jù)所述訪問請求中包含的版本信息,將所述訪問請求發(fā)送給與所述版本信息對應(yīng)的目標(biāo)服務(wù)器,包括:
[0051]判斷所述訪問請求中包含的版本信息是否為舊版本;
[0052]若是,將所述訪問請求發(fā)送給與所述舊版本對應(yīng)的目標(biāo)服務(wù)器;
[0053]若否,按照預(yù)先設(shè)定的策略將所述訪問請求發(fā)送給對應(yīng)的目標(biāo)服務(wù)器,使得訪問新、舊版本服務(wù)的新版本客戶端的數(shù)量或者比例達(dá)到預(yù)先指定的數(shù)值。
[0054]相應(yīng)的,本申請還提供一種用于支持灰度發(fā)布的裝置,包括:
[0055]訪問請求接收單元,用于接收來自客戶端的至少包含版本信息的訪問請求;
[0056]訪問請求轉(zhuǎn)發(fā)單元,用于根據(jù)所述訪問請求中包含的版本信息,將所述訪問請求發(fā)送給與所述版本信息對應(yīng)的目標(biāo)服務(wù)器;
[0057]處理結(jié)果發(fā)送單元,用于將所述目標(biāo)服務(wù)器針對所述訪問請求返回的結(jié)果發(fā)送給所述客戶端。
[0058]此外,本申請還提供一種用于支持灰度發(fā)布的訪問方法,包括:
[0059]向服務(wù)端發(fā)送包含版本信息的訪問請求;
[0060]接收所述服務(wù)端返回的針對所述訪問請求的處理結(jié)果。
[0061]可選的,執(zhí)行所述向服務(wù)端發(fā)送包含版本信息的訪問請求的步驟之前,執(zhí)行下述步驟:
[0062]獲取客戶端可用服務(wù)版本列表信息;
[0063]根據(jù)所述客戶端可用服務(wù)版本列表信息包含的可用版本,執(zhí)行與所述可用版本對應(yīng)的初始化操作。
[0064]可選的,所述獲取客戶端可用服務(wù)版本列表信息,包括:
[0065]向所述服務(wù)端發(fā)送獲取客戶端可用服務(wù)版本列表信息的請求,并且在所述請求中包含能夠唯一標(biāo)識客戶端的用戶標(biāo)識信息和所述客戶端支持的版本信息;
[0066]接收所述服務(wù)端返回的客戶端可用服務(wù)版本列表信息。
[0067]可選的,如果在預(yù)先指定的時(shí)間內(nèi)沒有接收到所述服務(wù)端返回的客戶端可用服務(wù)版本列表信息,則采用上一次使用的服務(wù)版本作為可用版本。
[0068]可選的,所述根據(jù)所述客戶端可用服務(wù)版本列表信息包含的可用版本,執(zhí)行與所述可用版本對應(yīng)的初始化操作,具體是指,
[0069]從所述客戶端可用服務(wù)版本列表信息包含的可用版本中,選擇一個(gè)最新的版本,并執(zhí)行與所述最新的版本對應(yīng)的初始化操作。
[0070]可選的,在所述根據(jù)所述客戶端可用服務(wù)版本列表信息包含的可用版本,執(zhí)行與所述可用版本對應(yīng)的初始化操作之后,執(zhí)行下述步驟:
[0071]接收來自所述服務(wù)端的系統(tǒng)可用服務(wù)版本列表變更消息;
[0072]判