智慧支付穩定性測試實戰

美團技術團隊發表於2018-12-14

本文根據美團高階測試開發工程師勳偉在美團第43期技術沙龍“美團金融千萬級交易系統質量保障之路”的演講整理而成。主要介紹了美團智慧支付業務在穩定性方向遇到的挑戰,並重點介紹QA在穩定性測試中的一些方法與實踐。

背景

美團支付承載了美團全部的交易流量,按照使用場景可以將其分為線上支付和智慧支付兩類業務。線上支付,支撐使用者線上消費場景,處理美團所有線上交易,為團購、外賣、酒店旅遊等業務線提供支付能力;智慧支付,支撐使用者到店消費場景,處理美團所有線下交易,通過智慧POS、二維碼支付、盒子支付等方式,為商家提供高效、智慧化的收銀解決方案。其中,智慧支付作為新擴充套件的業務場景,去年也成為了美團增速最快的業務之一。

面臨的挑戰

而隨著業務的快速增長,看似簡單的支付動作,背後系統的複雜度卻在持續提升。體現在:上層業務入口、底層支付渠道的不斷豐富,微服務化背景下系統的縱向分層、服務的橫向拆分,還有對外部系統(營銷中心、會員中心、風控中心等)、內部基礎設施(佇列、快取等)的依賴也越來越多,整條鏈路上的核心服務節點超過20個,業務複雜度可想而知。

智慧支付穩定性測試實戰

此外,技術團隊在短時間內就完成了從幾個人到近百人規模的擴張,這也是一個潛在的不穩定因素。曾經在一段時間內,整個系統處在“牽一髮而動全身”的狀態,即使自身系統不做任何發版升級,也會因為一些基礎設施、上下游服務的問題,業務會毫無徵兆地受到影響。

痛定思痛,我們對發生過的線上問題進行復盤,分析影響服務穩定性的原因。通過資料發現,72%的嚴重故障集中在第三方服務和基礎設施故障,對應的一些典型事故場景,比如:第三方支付通道不穩定、基礎設施(如訊息佇列)不穩定,進而導致整個系統雪崩,當依賴方故障恢復後,我們的業務卻很難立即恢復。

智慧支付穩定性測試實戰

解決方案

基於這些問題,我們開展了穩定性建設專項,目的很明確:提升服務的可用性。目標是逐步將系統可用性從2個9提升到3個9,再向4個9去努力。這個過程中最核心的兩個策略:柔性可用,意思是儘可能保證核心功能可用,或在有損情況下儘可能保證核心使用者體驗,降低影響;另一個是快速恢復,即用工具或機制保證故障的快速定位和解決,降低故障修復時間。

圍繞這兩個策略,在穩定性建設中的常見操作:限流、熔斷降級、擴容,用於打造系統的柔性可用;故障響應SOP、故障自動處理,用於故障處理時的快速恢復。而QA的工作更側重於對這些“常見操作”進行有效性驗證。基於經驗,重點介紹“三把利劍”:故障演練、線上壓測、持續運營體系。

智慧支付穩定性測試實戰

故障演練的由來

舉個真實的案例,在一次處理某支付通道不穩定的線上問題時,開發同學執行之前已經測試通過的預案(服務端關閉該通道,預期客戶端將該支付通道的開關置灰,並會提示使用者使用其他支付方式),但執行中卻發現預案無法生效(服務端操作後,客戶端該支付通道仍處於開啟狀態)。非故障場景下預案功能正常,故障場景下卻失效了。

這就是故障演練的由來,我們需要儘可能還原故障場景,才能真正驗證預案的有效性。

故障演練的整體方案

故障演練的整體方案,主要分為三部分:

  • 負載生成模組,負責儘可能還原系統的真實執行場景(要求覆蓋核心業務流程)。
  • 故障注入模組,包含故障注入工具、故障樣本庫(涵蓋外部服務、基礎元件、機房、網路等各種依賴,並重點關注超時、異常兩種情況)。
  • 業務驗證模組,結合自動化測試用例和各個監控大盤來進行。

智慧支付穩定性測試實戰

為了更高效地開展故障演練,我們的策略是分為兩個階段進行。首先,針對單系統進行故障演練,從故障樣本庫出發,全面覆蓋該系統所有的保護預案;在此基礎上,進行全鏈路故障演練,聚焦核心服務故障,驗證上下游服務的容錯性。

智慧支付穩定性測試實戰

故障演練的效果

事實證明,故障演練確實給我們帶來了很多“驚喜”,暴露了很多隱患。這裡列舉三類問題:資料庫主從延遲影響交易;基礎設施故障時,業務未做降級;依賴服務超時設定不合理、限流策略考慮不足等。

智慧支付穩定性測試實戰

線上壓測的由來

面對業務的指數級增長,我們必須對系統可承載的流量做到心中有數。對於QA來說,需要找到精準、高效的系統容量評估方法。我們碰到的難點包括:鏈路長、環節多、服務錯綜複雜,線下環境與線上差異大等等,基於測試有效性和測試成本考慮,我們決定要做線上壓測,而且要實現全鏈路的線上壓測。

線上壓測的整體方案

全鏈路壓測的實現方案,與業界主流方案沒有太大區別。根據壓測流程,首先,場景建模,以便更真實的還原線上系統執行場景;其次,基礎資料構造,應滿足資料型別以及量級的要求,避免資料熱點;之後,流量構建,讀寫流量構造或回放,同時對壓測流量進行標記和脫敏;再之後,壓測執行,過程中收集鏈路各節點的業務執行狀態、資源使用情況等;最後,生成壓測報告。

基於全鏈路線上壓測方案,可以根據業務需求,靈活地進行單鏈路壓測、分層壓測等。更為重要的是,基於壓測我們可以進行線上的故障演練,用於更加真實的驗證系統限流、熔斷等保護預案。

智慧支付穩定性測試實戰

線上壓測的效果

通過全鏈路線上壓測,一方面讓我們對系統容量做到心中有數,另一方面也讓我們發現了線上系統執行過程中的潛在問題,而且這些問題一般都是高風險的。同樣列舉三類問題:基礎設施優化,如機房負載不均衡、資料庫主從延遲嚴重等;系統服務優化,如執行緒池配置不合理、資料庫需要拆分等;故障預案優化,如限流閾值設定過低,有的甚至已經接近限流邊緣而渾然不知等等。

智慧支付穩定性測試實戰

持續運營體系的由來

智慧支付的穩定性建設是作為一個專項在做,持續了近3個月的時間;在效果還不錯的情況下,我們從智慧支付延伸到整個金融服務平臺,以虛擬專案組的方式再次運轉了3個月的時間。通過專案方式,確實能集中解決現存的大部分穩定性問題,但業務在發展、系統在迭代,穩定性建設必然是一項長期的工作。於是,QA牽頭SRE、DBA、RD,建立了初步的穩定性持續運營體系,並在持續完善。

智慧支付穩定性測試實戰

持續運營體系的整體方案

下面介紹持續運營體系的三大策略:

流程規範工具化,儘可能減少人為意識因素,降低人力溝通和維護成本。

如:配置變更流程,將配置變更視同程式碼上線,以PR方式提交評審;程式碼規範檢查落地到工具,儘可能將編碼最佳實踐抽取為規則,將人工檢查演變為工具檢查。

質量度量視覺化,提取指標、通過資料驅動相關問題的PDCA閉環。

如:我們與SRE、DBA進行合作,將線上系統運維中與穩定性相關的指標提取出來,類似資料庫慢查詢次數、核心服務介面響應時長等等,並對指標資料進行實時監控,進而推進相關問題的解決。

演練壓測常態化,降低演練和壓測成本,具備常態化執行的能力。

如:通過自動化的觸發演練報警,驗證應急SOP在各團隊實際執行中的效果。

基於以上三個策略,構建穩定性持續運營體系。強調閉環,從質量度量與評價、到問題分析與解決,最終完成方法與工具的沉澱;過程中,通過平臺建設來落地運營資料、完善運營工具,提升運營效率。

智慧支付穩定性測試實戰

持續運營體系的效果

簡單展示當前持續運營體系的執行效果,包含風險評估、質量大盤、問題跟進以及最佳實踐的沉澱等。

智慧支付穩定性測試實戰

未來規劃

綜上便是智慧支付QA在穩定性建設中的重點工作。對於未來工作的想法,主要有3個方向。第一,測試有效性提升,持續去擴充套件故障樣本庫、優化演練工具和壓測方案;第二,持續的平臺化建設,實現操作平臺化、資料平臺化;第三,智慧化,逐步從人工運營、自動化運營到嘗試智慧化運營。

作者介紹

勳偉,美團高階測試開發工程師,金融服務平臺智慧支付業務測試負責人,2015年加入美團點評。

招聘

如果你想學習網際網路金融的技術體系,親歷網際網路金融業務的爆發式增長,如果你想和我們一起,保證業務產品的高質量,歡迎加入美團金融工程質量組。有興趣的同學可以傳送簡歷到:fanxunwei#meituan.com

智慧支付穩定性測試實戰

相關文章