智能支付穩定性測試實戰

本文根據美團高級測試開發工程師勳偉在美團第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。

發現文章有錯誤、對內容有疑問,均可以關注美團技術團隊微信公衆號(meituantech),在後臺給咱們留言。咱們每週會挑選出一位熱心小夥伴,送上一份精美的小禮品。快來掃碼關注咱們吧!

相關文章
相關標籤/搜索