智能支付稳定性测试实战
本文根據(jù)美團(tuán)高級(jí)測(cè)試開(kāi)發(fā)工程師勛偉在美團(tuán)第43期技術(shù)沙龍“美團(tuán)金融千萬(wàn)級(jí)交易系統(tǒng)質(zhì)量保障之路”的演講整理而成。主要介紹了美團(tuán)智能支付業(yè)務(wù)在穩(wěn)定性方向遇到的挑戰(zhàn),并重點(diǎn)介紹QA在穩(wěn)定性測(cè)試中的一些方法與實(shí)踐。
背景
美團(tuán)支付承載了美團(tuán)全部的交易流量,按照使用場(chǎng)景可以將其分為線上支付和智能支付兩類業(yè)務(wù)。線上支付,支撐用戶線上消費(fèi)場(chǎng)景,處理美團(tuán)所有線上交易,為團(tuán)購(gòu)、外賣、酒店旅游等業(yè)務(wù)線提供支付能力;智能支付,支撐用戶到店消費(fèi)場(chǎng)景,處理美團(tuán)所有線下交易,通過(guò)智能POS、二維碼支付、盒子支付等方式,為商家提供高效、智能化的收銀解決方案。其中,智能支付作為新擴(kuò)展的業(yè)務(wù)場(chǎng)景,去年也成為了美團(tuán)增速最快的業(yè)務(wù)之一。
面臨的挑戰(zhàn)
而隨著業(yè)務(wù)的快速增長(zhǎng),看似簡(jiǎn)單的支付動(dòng)作,背后系統(tǒng)的復(fù)雜度卻在持續(xù)提升。體現(xiàn)在:上層業(yè)務(wù)入口、底層支付渠道的不斷豐富,微服務(wù)化背景下系統(tǒng)的縱向分層、服務(wù)的橫向拆分,還有對(duì)外部系統(tǒng)(營(yíng)銷中心、會(huì)員中心、風(fēng)控中心等)、內(nèi)部基礎(chǔ)設(shè)施(隊(duì)列、緩存等)的依賴也越來(lái)越多,整條鏈路上的核心服務(wù)節(jié)點(diǎn)超過(guò)20個(gè),業(yè)務(wù)復(fù)雜度可想而知。
此外,技術(shù)團(tuán)隊(duì)在短時(shí)間內(nèi)就完成了從幾個(gè)人到近百人規(guī)模的擴(kuò)張,這也是一個(gè)潛在的不穩(wěn)定因素。曾經(jīng)在一段時(shí)間內(nèi),整個(gè)系統(tǒng)處在“牽一發(fā)而動(dòng)全身”的狀態(tài),即使自身系統(tǒng)不做任何發(fā)版升級(jí),也會(huì)因?yàn)橐恍┗A(chǔ)設(shè)施、上下游服務(wù)的問(wèn)題,業(yè)務(wù)會(huì)毫無(wú)征兆地受到影響。
痛定思痛,我們對(duì)發(fā)生過(guò)的線上問(wèn)題進(jìn)行復(fù)盤(pán),分析影響服務(wù)穩(wěn)定性的原因。通過(guò)數(shù)據(jù)發(fā)現(xiàn),72%的嚴(yán)重故障集中在第三方服務(wù)和基礎(chǔ)設(shè)施故障,對(duì)應(yīng)的一些典型事故場(chǎng)景,比如:第三方支付通道不穩(wěn)定、基礎(chǔ)設(shè)施(如消息隊(duì)列)不穩(wěn)定,進(jìn)而導(dǎo)致整個(gè)系統(tǒng)雪崩,當(dāng)依賴方故障恢復(fù)后,我們的業(yè)務(wù)卻很難立即恢復(fù)。
解決方案
基于這些問(wèn)題,我們開(kāi)展了穩(wěn)定性建設(shè)專項(xiàng),目的很明確:提升服務(wù)的可用性。目標(biāo)是逐步將系統(tǒng)可用性從2個(gè)9提升到3個(gè)9,再向4個(gè)9去努力。這個(gè)過(guò)程中最核心的兩個(gè)策略:柔性可用,意思是盡可能保證核心功能可用,或在有損情況下盡可能保證核心用戶體驗(yàn),降低影響;另一個(gè)是快速恢復(fù),即用工具或機(jī)制保證故障的快速定位和解決,降低故障修復(fù)時(shí)間。
圍繞這兩個(gè)策略,在穩(wěn)定性建設(shè)中的常見(jiàn)操作:限流、熔斷降級(jí)、擴(kuò)容,用于打造系統(tǒng)的柔性可用;故障響應(yīng)SOP、故障自動(dòng)處理,用于故障處理時(shí)的快速恢復(fù)。而QA的工作更側(cè)重于對(duì)這些“常見(jiàn)操作”進(jìn)行有效性驗(yàn)證?;诮?jīng)驗(yàn),重點(diǎn)介紹“三把利劍”:故障演練、線上壓測(cè)、持續(xù)運(yùn)營(yíng)體系。
故障演練的由來(lái)
舉個(gè)真實(shí)的案例,在一次處理某支付通道不穩(wěn)定的線上問(wèn)題時(shí),開(kāi)發(fā)同學(xué)執(zhí)行之前已經(jīng)測(cè)試通過(guò)的預(yù)案(服務(wù)端關(guān)閉該通道,預(yù)期客戶端將該支付通道的開(kāi)關(guān)置灰,并會(huì)提示用戶使用其他支付方式),但執(zhí)行中卻發(fā)現(xiàn)預(yù)案無(wú)法生效(服務(wù)端操作后,客戶端該支付通道仍處于開(kāi)啟狀態(tài))。非故障場(chǎng)景下預(yù)案功能正常,故障場(chǎng)景下卻失效了。
這就是故障演練的由來(lái),我們需要盡可能還原故障場(chǎng)景,才能真正驗(yàn)證預(yù)案的有效性。
故障演練的整體方案
故障演練的整體方案,主要分為三部分:
- 負(fù)載生成模塊,負(fù)責(zé)盡可能還原系統(tǒng)的真實(shí)運(yùn)行場(chǎng)景(要求覆蓋核心業(yè)務(wù)流程)。
- 故障注入模塊,包含故障注入工具、故障樣本庫(kù)(涵蓋外部服務(wù)、基礎(chǔ)組件、機(jī)房、網(wǎng)絡(luò)等各種依賴,并重點(diǎn)關(guān)注超時(shí)、異常兩種情況)。
- 業(yè)務(wù)驗(yàn)證模塊,結(jié)合自動(dòng)化測(cè)試用例和各個(gè)監(jiān)控大盤(pán)來(lái)進(jìn)行。
為了更高效地開(kāi)展故障演練,我們的策略是分為兩個(gè)階段進(jìn)行。首先,針對(duì)單系統(tǒng)進(jìn)行故障演練,從故障樣本庫(kù)出發(fā),全面覆蓋該系統(tǒng)所有的保護(hù)預(yù)案;在此基礎(chǔ)上,進(jìn)行全鏈路故障演練,聚焦核心服務(wù)故障,驗(yàn)證上下游服務(wù)的容錯(cuò)性。
故障演練的效果
事實(shí)證明,故障演練確實(shí)給我們帶來(lái)了很多“驚喜”,暴露了很多隱患。這里列舉三類問(wèn)題:數(shù)據(jù)庫(kù)主從延遲影響交易;基礎(chǔ)設(shè)施故障時(shí),業(yè)務(wù)未做降級(jí);依賴服務(wù)超時(shí)設(shè)置不合理、限流策略考慮不足等。
線上壓測(cè)的由來(lái)
面對(duì)業(yè)務(wù)的指數(shù)級(jí)增長(zhǎng),我們必須對(duì)系統(tǒng)可承載的流量做到心中有數(shù)。對(duì)于QA來(lái)說(shuō),需要找到精準(zhǔn)、高效的系統(tǒng)容量評(píng)估方法。我們碰到的難點(diǎn)包括:鏈路長(zhǎng)、環(huán)節(jié)多、服務(wù)錯(cuò)綜復(fù)雜,線下環(huán)境與線上差異大等等,基于測(cè)試有效性和測(cè)試成本考慮,我們決定要做線上壓測(cè),而且要實(shí)現(xiàn)全鏈路的線上壓測(cè)。
線上壓測(cè)的整體方案
全鏈路壓測(cè)的實(shí)現(xiàn)方案,與業(yè)界主流方案沒(méi)有太大區(qū)別。根據(jù)壓測(cè)流程,首先,場(chǎng)景建模,以便更真實(shí)的還原線上系統(tǒng)運(yùn)行場(chǎng)景;其次,基礎(chǔ)數(shù)據(jù)構(gòu)造,應(yīng)滿足數(shù)據(jù)類型以及量級(jí)的要求,避免數(shù)據(jù)熱點(diǎn);之后,流量構(gòu)建,讀寫(xiě)流量構(gòu)造或回放,同時(shí)對(duì)壓測(cè)流量進(jìn)行標(biāo)記和脫敏;再之后,壓測(cè)執(zhí)行,過(guò)程中收集鏈路各節(jié)點(diǎn)的業(yè)務(wù)運(yùn)行狀態(tài)、資源使用情況等;最后,生成壓測(cè)報(bào)告。
基于全鏈路線上壓測(cè)方案,可以根據(jù)業(yè)務(wù)需求,靈活地進(jìn)行單鏈路壓測(cè)、分層壓測(cè)等。更為重要的是,基于壓測(cè)我們可以進(jìn)行線上的故障演練,用于更加真實(shí)的驗(yàn)證系統(tǒng)限流、熔斷等保護(hù)預(yù)案。
線上壓測(cè)的效果
通過(guò)全鏈路線上壓測(cè),一方面讓我們對(duì)系統(tǒng)容量做到心中有數(shù),另一方面也讓我們發(fā)現(xiàn)了線上系統(tǒng)運(yùn)行過(guò)程中的潛在問(wèn)題,而且這些問(wèn)題一般都是高風(fēng)險(xiǎn)的。同樣列舉三類問(wèn)題:基礎(chǔ)設(shè)施優(yōu)化,如機(jī)房負(fù)載不均衡、數(shù)據(jù)庫(kù)主從延遲嚴(yán)重等;系統(tǒng)服務(wù)優(yōu)化,如線程池配置不合理、數(shù)據(jù)庫(kù)需要拆分等;故障預(yù)案優(yōu)化,如限流閾值設(shè)置過(guò)低,有的甚至已經(jīng)接近限流邊緣而渾然不知等等。
持續(xù)運(yùn)營(yíng)體系的由來(lái)
智能支付的穩(wěn)定性建設(shè)是作為一個(gè)專項(xiàng)在做,持續(xù)了近3個(gè)月的時(shí)間;在效果還不錯(cuò)的情況下,我們從智能支付延伸到整個(gè)金融服務(wù)平臺(tái),以虛擬項(xiàng)目組的方式再次運(yùn)轉(zhuǎn)了3個(gè)月的時(shí)間。通過(guò)項(xiàng)目方式,確實(shí)能集中解決現(xiàn)存的大部分穩(wěn)定性問(wèn)題,但業(yè)務(wù)在發(fā)展、系統(tǒng)在迭代,穩(wěn)定性建設(shè)必然是一項(xiàng)長(zhǎng)期的工作。于是,QA牽頭SRE、DBA、RD,建立了初步的穩(wěn)定性持續(xù)運(yùn)營(yíng)體系,并在持續(xù)完善。
持續(xù)運(yùn)營(yíng)體系的整體方案
下面介紹持續(xù)運(yùn)營(yíng)體系的三大策略:
流程規(guī)范工具化,盡可能減少人為意識(shí)因素,降低人力溝通和維護(hù)成本。
如:配置變更流程,將配置變更視同代碼上線,以PR方式提交評(píng)審;代碼規(guī)范檢查落地到工具,盡可能將編碼最佳實(shí)踐抽取為規(guī)則,將人工檢查演變?yōu)楣ぞ邫z查。
質(zhì)量度量可視化,提取指標(biāo)、通過(guò)數(shù)據(jù)驅(qū)動(dòng)相關(guān)問(wèn)題的PDCA閉環(huán)。
如:我們與SRE、DBA進(jìn)行合作,將線上系統(tǒng)運(yùn)維中與穩(wěn)定性相關(guān)的指標(biāo)提取出來(lái),類似數(shù)據(jù)庫(kù)慢查詢次數(shù)、核心服務(wù)接口響應(yīng)時(shí)長(zhǎng)等等,并對(duì)指標(biāo)數(shù)據(jù)進(jìn)行實(shí)時(shí)監(jiān)控,進(jìn)而推進(jìn)相關(guān)問(wèn)題的解決。
演練壓測(cè)常態(tài)化,降低演練和壓測(cè)成本,具備常態(tài)化執(zhí)行的能力。
如:通過(guò)自動(dòng)化的觸發(fā)演練報(bào)警,驗(yàn)證應(yīng)急SOP在各團(tuán)隊(duì)實(shí)際執(zhí)行中的效果。
基于以上三個(gè)策略,構(gòu)建穩(wěn)定性持續(xù)運(yùn)營(yíng)體系。強(qiáng)調(diào)閉環(huán),從質(zhì)量度量與評(píng)價(jià)、到問(wèn)題分析與解決,最終完成方法與工具的沉淀;過(guò)程中,通過(guò)平臺(tái)建設(shè)來(lái)落地運(yùn)營(yíng)數(shù)據(jù)、完善運(yùn)營(yíng)工具,提升運(yùn)營(yíng)效率。
持續(xù)運(yùn)營(yíng)體系的效果
簡(jiǎn)單展示當(dāng)前持續(xù)運(yùn)營(yíng)體系的運(yùn)行效果,包含風(fēng)險(xiǎn)評(píng)估、質(zhì)量大盤(pán)、問(wèn)題跟進(jìn)以及最佳實(shí)踐的沉淀等。
未來(lái)規(guī)劃
綜上便是智能支付QA在穩(wěn)定性建設(shè)中的重點(diǎn)工作。對(duì)于未來(lái)工作的想法,主要有3個(gè)方向。第一,測(cè)試有效性提升,持續(xù)去擴(kuò)展故障樣本庫(kù)、優(yōu)化演練工具和壓測(cè)方案;第二,持續(xù)的平臺(tái)化建設(shè),實(shí)現(xiàn)操作平臺(tái)化、數(shù)據(jù)平臺(tái)化;第三,智能化,逐步從人工運(yùn)營(yíng)、自動(dòng)化運(yùn)營(yíng)到嘗試智能化運(yùn)營(yíng)。
作者簡(jiǎn)介
- 勛偉,美團(tuán)高級(jí)測(cè)試開(kāi)發(fā)工程師,金融服務(wù)平臺(tái)智能支付業(yè)務(wù)測(cè)試負(fù)責(zé)人,2015年加入美團(tuán)點(diǎn)評(píng)。
招聘信息
如果你想學(xué)習(xí)互聯(lián)網(wǎng)金融的技術(shù)體系,親歷互聯(lián)網(wǎng)金融業(yè)務(wù)的爆發(fā)式增長(zhǎng),如果你想和我們一起,保證業(yè)務(wù)產(chǎn)品的高質(zhì)量,歡迎加入美團(tuán)金融工程質(zhì)量組。有興趣的同學(xué)可以發(fā)送簡(jiǎn)歷到:fanxunwei#meituan.com。
總結(jié)
以上是生活随笔為你收集整理的智能支付稳定性测试实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Springboot 2.0选择Hika
- 下一篇: 纠删码存储系统中的投机性部分写技术