干貨技術(shù),第一時(shí)間送達(dá)! ![]() 一、什么是API網(wǎng)關(guān)![]() 簡(jiǎn)述:API網(wǎng)關(guān)出現(xiàn)的原因是微服務(wù)架構(gòu)的出現(xiàn),不同的微服務(wù)一般會(huì)有不同的網(wǎng)絡(luò)地址,而外部的客戶端可能需要調(diào)用多個(gè)服務(wù)的接口才能完成一個(gè)業(yè)務(wù)需求,這個(gè)時(shí)候系統(tǒng)結(jié)構(gòu)會(huì)顯得非常錯(cuò)綜復(fù)雜,會(huì)出現(xiàn)許多問(wèn)題:
微服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中的一個(gè)關(guān)鍵角色,用來(lái)保護(hù),增強(qiáng)和控制對(duì)于微服務(wù)的訪問(wèn),微服務(wù)網(wǎng)關(guān)是一個(gè)處于應(yīng)用程序或服務(wù)之前的系統(tǒng),用來(lái)管理授權(quán),訪問(wèn)控制和流量限制等,這樣微服務(wù)就會(huì)被微服務(wù)網(wǎng)關(guān)保護(hù)起來(lái)對(duì)所有的調(diào)用者透明。因此,隱藏在微服務(wù)網(wǎng)關(guān)后面的業(yè)務(wù)系統(tǒng)就可以更加專注于業(yè)務(wù)本身。 組成:
優(yōu)點(diǎn):
職能:
二、微服務(wù)網(wǎng)關(guān)常見(jiàn)技術(shù)
2.1 gateway是什么Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態(tài)系中的網(wǎng)關(guān),目標(biāo)是替代Zuul,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點(diǎn),和限流等。 ![]() 幾個(gè)概念
2.2gateway怎么用說(shuō)到底predicate就是為了實(shí)現(xiàn)一組匹配規(guī)則,方便讓請(qǐng)求過(guò)來(lái)找到對(duì)應(yīng)的Route進(jìn)行處理,而spring cloud gateway內(nèi)置了幾種predicate的使用。 1、通過(guò)時(shí)間匹配 Predicate 支持設(shè)置一個(gè)時(shí)間,在請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)的時(shí)候,可以通過(guò)判斷在這個(gè)時(shí)間之前或者之后進(jìn)行轉(zhuǎn)發(fā)。比如我們現(xiàn)在設(shè)置只有在 2018 年 1 月 20 日才會(huì)轉(zhuǎn)發(fā)到我的網(wǎng)站,在這之前不進(jìn)行轉(zhuǎn)發(fā),我就可以這樣配置:
2、通過(guò)cookie匹配 Cookie Route Predicate 可以接收兩個(gè)參數(shù),一個(gè)是 Cookie name , 一個(gè)是正則表達(dá)式,路由規(guī)則會(huì)通過(guò)獲取對(duì)應(yīng)的 Cookie name 值和正則表達(dá)式去匹配,如果匹配上就會(huì)執(zhí)行路由,如果沒(méi)有匹配上則不執(zhí)行。
3、通過(guò)請(qǐng)求路徑匹配 Path Route Predicate 接收一個(gè)匹配路徑的參數(shù)來(lái)判斷是否走路由。
如果請(qǐng)求路徑符合要求,則此路由將匹配,例如:/foo/1或者/foo/bar。 當(dāng)然內(nèi)置的匹配規(guī)則還有很多,通過(guò)請(qǐng)求參數(shù),請(qǐng)求方式,請(qǐng)求IP地址等去匹配,也可以組合使用。 注意: 一個(gè)請(qǐng)求滿足多個(gè)路由的謂詞條件時(shí),請(qǐng)求只會(huì)被首個(gè)成功匹配的路由轉(zhuǎn)發(fā) 本次提測(cè)版本,開(kāi)發(fā)使用spring-cloud-gateway來(lái)將平臺(tái)業(yè)務(wù)側(cè)引入網(wǎng)關(guān), 將網(wǎng)關(guān)作為調(diào)用PaaS的唯一入口,便于維護(hù),同時(shí)利用網(wǎng)關(guān)的能力實(shí)現(xiàn)限流,熔斷,鑒權(quán),灰度驗(yàn)證等功能。第一期只接入統(tǒng)一前裝,充分驗(yàn)證后后續(xù)接入其他應(yīng)用。因此,本次測(cè)試的重點(diǎn)在路由轉(zhuǎn)發(fā)功能。 三、常見(jiàn)測(cè)試點(diǎn)
知道了網(wǎng)關(guān)的基礎(chǔ)知識(shí)和基本原理之后,對(duì)于我們?nèi)绾螠y(cè)試它,作為一名測(cè)試人員心中已經(jīng)有了大概的思路,接下來(lái)就是根據(jù)我們實(shí)際的需求去列出測(cè)試點(diǎn),并進(jìn)一步轉(zhuǎn)換為用例去執(zhí)行。從上面開(kāi)發(fā)給出的配置能知道,此次開(kāi)發(fā)提測(cè)主要是實(shí)現(xiàn)了基于路徑匹配的路由轉(zhuǎn)發(fā)功能,其余功能暫未引入,這樣想來(lái)就簡(jiǎn)單了許多。 3.1功能測(cè)試常見(jiàn)請(qǐng)求正常轉(zhuǎn)發(fā)
3.2插件測(cè)試API網(wǎng)關(guān)插件各個(gè)公司根據(jù)不同的需求有不同的插件,此次提測(cè)也沒(méi)有涉及,所以收集整理了一些常見(jiàn)的通用插件,例如降級(jí),限流,熔斷,跨域,abtest插件等,提供一些測(cè)試思路。 限流基本概念: 客戶端請(qǐng)求太多,超出了服務(wù)端的承受能力,導(dǎo)致服務(wù)端不可用或無(wú)法響應(yīng),耗盡服務(wù)端資源甚至是服務(wù)崩潰。解決方案:服務(wù)端對(duì)客戶端進(jìn)行限流,保護(hù)服務(wù)端資源。對(duì)各類請(qǐng)求設(shè)置最高的QPS閾值,當(dāng)請(qǐng)求高于閾值時(shí)直接阻斷。 限流插件測(cè)試思路:可以在API網(wǎng)關(guān)平臺(tái)為對(duì)應(yīng)測(cè)試接口配置限流策略。根據(jù)不同時(shí)間,使用壓測(cè)工具進(jìn)行階段性的壓力測(cè)試,并統(tǒng)計(jì)阻斷接口數(shù),具體的數(shù)值可以根據(jù)自身業(yè)務(wù)場(chǎng)景進(jìn)行測(cè)試。 降級(jí)基本概念:服務(wù)降級(jí)是指當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況,將一些不重要的接口換種簡(jiǎn)單的方式處理,從而將服務(wù)器資源釋放給當(dāng)前的核心業(yè)務(wù)使其可以高效運(yùn)作。 降級(jí)插件測(cè)試思路:降級(jí)策略主要看開(kāi)發(fā)如何選擇,有的就是讓請(qǐng)求無(wú)法訪問(wèn)到后端服務(wù),借口暫停使用,當(dāng)接口配置降級(jí)插件。插件開(kāi)關(guān)打開(kāi),返回API網(wǎng)關(guān)所配置的響應(yīng)信息狀態(tài)碼等,接口是無(wú)法真正的請(qǐng)求到后端服務(wù)。 熔斷基本概念: 微服務(wù)架構(gòu)中,各個(gè)微服務(wù)之間相互依賴非常普遍,因此在整個(gè)鏈路中 ,有一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,都會(huì)造成整個(gè)上下游服務(wù)調(diào)用出現(xiàn)問(wèn)題,服務(wù)出現(xiàn)宕機(jī)。也就是說(shuō),熔斷就是調(diào)用方發(fā)起服務(wù)調(diào)用時(shí),如果被調(diào)用方返回的錯(cuò)誤率超過(guò)一定的閾值,那么后續(xù)的請(qǐng)求不會(huì)真正發(fā)起請(qǐng)求,而是調(diào)用方直接返回錯(cuò)誤。兩個(gè)關(guān)鍵點(diǎn),判斷何時(shí)熔斷和何時(shí)從熔斷狀態(tài)恢復(fù)。 熔斷插件測(cè)試思路: 不同的網(wǎng)關(guān)有不同的熔斷策略,例如針對(duì)5xx的返回,根據(jù)不同的入?yún)⒖刂品祷?,可返?xx,4xx,5xx,當(dāng)規(guī)定的時(shí)間5xx數(shù)達(dá)到閾值,服務(wù)是否開(kāi)啟熔斷。熔斷恢復(fù)測(cè)試也是一樣,比如10s,允許部分請(qǐng)求通過(guò),你可以繼續(xù)控制請(qǐng)求,若這部分請(qǐng)求都成功,恢復(fù)熔斷。具體的case設(shè)計(jì)還是要根據(jù)自身業(yè)務(wù)為準(zhǔn)。 跨域基本概念: 跨域是指,只要協(xié)議,域名,端口有任何一個(gè)不相同,都被當(dāng)作是不同的域。所謂同源策略就是指,協(xié)議,域名和端口都要相同,其中有一個(gè)不同都會(huì)產(chǎn)生跨域。 跨域測(cè)試思路: CORS是一種基于HTTP頭的機(jī)制,該機(jī)制通過(guò)允許服務(wù)器標(biāo)識(shí)除了自己以外的其他origin,這樣瀏覽器可以訪問(wèn)加載這些資源。瀏覽器必須首先使用OPTIONS方法發(fā)起一個(gè)預(yù)檢請(qǐng)求,從而獲知服務(wù)端是否允許該垮源請(qǐng)求。服務(wù)器允許之后,才發(fā)起實(shí)際的HTTP請(qǐng)求。在預(yù)檢請(qǐng)求的返回中,服務(wù)端也可以通知客戶端,是否需要攜帶身份憑證。測(cè)試時(shí),我們就可以通過(guò)是否需要攜帶參數(shù),身份憑證等;各種參數(shù)組合,不同請(qǐng)求等方面去設(shè)計(jì)case。 3.3容錯(cuò)測(cè)試
注意: 數(shù)據(jù)庫(kù)down,因?yàn)橛斜镜鼐彺?,?yàn)證本地緩存是否生效,所以數(shù)據(jù)庫(kù)重啟或者down掉,不能影響已經(jīng)生效的路由和插件;后端服務(wù)down掉一臺(tái),驗(yàn)證eureka是否有將死掉的節(jié)點(diǎn)刪除,若eureka并沒(méi)有將死掉的節(jié)點(diǎn)刪除,則會(huì)報(bào)錯(cuò)。添加新的節(jié)點(diǎn),需要看請(qǐng)求是否有輪詢;redis主要用于限流,在redis down掉限流策略失效,但是其他插件功能及路由應(yīng)該不受影響;eureka是注冊(cè)中心,注冊(cè)中心在啟動(dòng)的時(shí)候會(huì)將所有資源加載本地,所以eureka掛一臺(tái)或者多臺(tái),不影響已經(jīng)加載到本地的。總上所述,總結(jié)來(lái)說(shuō)就是API網(wǎng)關(guān)的所有依賴都可以down,但是gateway不可以不用。 3.4壓力測(cè)試
注意: 項(xiàng)目資源的作用是進(jìn)行線程隔離,每個(gè)項(xiàng)目資源分配應(yīng)該是固定的,不能搶占其他項(xiàng)目資源而導(dǎo)致其他服務(wù)不可用,進(jìn)行負(fù)載測(cè)試時(shí),增加壓力,增加和減少后端服務(wù)節(jié)點(diǎn),請(qǐng)求應(yīng)該不報(bào)錯(cuò)。 四、總結(jié)上述內(nèi)容,是對(duì)一些網(wǎng)關(guān)通用功能的測(cè)試思路總結(jié)。由于本次開(kāi)發(fā)提測(cè)網(wǎng)關(guān)版本并沒(méi)有涉及過(guò)多的功能,例如還有集群的熱加載,插件在集群項(xiàng)目與API間的運(yùn)用,API的發(fā)布,下線,插件的隨時(shí)切換,監(jiān)控等需求,親身實(shí)踐還不夠,只能提供一些思路,還需要具體結(jié)合項(xiàng)目的業(yè)務(wù)進(jìn)行更為準(zhǔn)確的case設(shè)計(jì)。 |
|
來(lái)自: 測(cè)試開(kāi)發(fā)技術(shù) > 《待分類》