如何做好線上服務質量保障

昨天下午星球有同學問了一個問題:目前業內高可用部署主要採用方案?

看到這個問題,我的第一反應是問題太寬泛,不夠明確。我反問了她一個問題:“你需要什麼高可用?業務高可用?服務高可用?數據庫高可用?還是其他?”

針對問題我也給出了我的理解和方案,大致內容如下:

高可用類型

簡單理解

高可用方案

業務高可用

用戶的操作都可以正常被處理

冗餘設計+故障預案+監控告警+良好的服務發佈體系

服務高可用

service可持續處理請求,但不對業務的正確性負責

分佈式集羣+限流熔斷方案+
多可用區多機房

上述的內容只是一個引子,因爲高可用和線上服務的穩定性有密切的關係。而軟件測試或者說質量保障的工作範疇,不僅僅在測試環境,線上環境的服務質量保障,也是我們需要關注的重點。

這其實也是我在之前的文章《如何建立高效的質量保障體系》中提到的一點:交付(線上)質量持續運營。見下圖:

那麼如何做好線上的服務質量保障工作,達到持續運營的理想狀態呢?這是我本篇文章要聊的話題。

 

發現線上故障

業內程序員面試時候據說有個三高的說法,即:高併發、高性能、高可用。

分佈式架構中有CAP理論,即:Consistency(數據一致性)、Availability(服務可用性)、Partition tolerance(分區容錯性)。

這些點對軟件系統提出了很高的要求,既要能扛得住高併發流量衝擊,又要具備很好的性能來處理請求,還要達到服務和業務的高可用,並且要保證業務數據的一致性,最後還要對異常場景有一定的冗餘處理能力,簡直是難上加難。

而線上服務(或者說生產環境),我們最擔心也最常見的就是出現線上故障。故障的種類很多,什麼服務掛了、支付失敗、無法加載商品圖片等等不一而足。

要保障線上服務質量,避免出現線上故障的前提,除了在測試階段做好測試,上線發佈前仔細驗證之外,還需要具備在故障發生時及時發現故障的能力。

目前最常見的發現故障的手段有兩種,分別是:日誌分析和監控告警

當然,很多的監控告警系統也是通過埋點數據和日誌採集,對採集的數據進行過濾,解析成一定的結構數據,然後進行存儲以及可視化展示來做的。

比如很經典的ELK(Elasticsearch+Logstash+Kibana),如下圖:

通過日誌分析和監控告警,我們可以快速的發現線上故障,及時的進行處理。

 

處理線上故障

發現線上出現故障後,第一優先級永遠是快速恢復線上業務的可用性,然後再考慮其他。

寫到這裏突然想起之前就職的某家企業交易團隊負責人的話:優先業務止血,再考慮問題定位分析和優化

以我的工作經歷來說,一般發現線上故障後的處理流程如下:

一般來說,線上故障處理,主要會涉及到如下四種角色:

NOC:一般指專門的線上服務巡檢和監控值班人員,出現故障時作爲信息收集和信息分發中心;

運維/研發:線上故障由對應業務域/服務的研發和運維進行處理(研發對代碼最熟,運維有服務配置發佈和變更權限);

測試/產品:故障恢復後測試進行觀察驗證,如果影響範圍較大,還需要通知產品甚至市場運營進行對應的配合處理;

高層領導:如果故障比較嚴重,需要上升到更高級別的負責人,並且某些重要操作需要高層決策和授權;

 

修復線上故障

一般來說,對於線上出現故障,快速恢復服務可用業務可用,降低故障帶來的損失是首要的,修復bug反而是其次。

所以在線上出現故障時,一般都會採用一些臨時方案來達到快速止血的目的。常見的臨時方案有:

  • 服務重啓;
  • 部署回滾;
  • 限流降級;

有臨時方案就有後續的優化方案,一般在線上故障恢復後,會進行如下幾個步驟:

  • 利用日誌和故障現場保留的dump文件等進行根因分析;
  • 修復故障後在測試環境進行驗證,確認沒問題後再發布到生產環境;
  • 記錄故障從發生到徹底修復的全過程,進行線上故障覆盤,提出後續改進方案並跟進落地;

當然,除了上述的一些手段,還可以通過如下幾種方式來降低線上出現故障的影響和損失:

  • 組織線上故障演練,培養技術同學的臨時反應和處理問題能力;
  • 通過灰度發佈或者發佈beta版本,讓用戶成爲幫助我們發現問題;
  • 做專項的混沌工程,在不斷的攻防演練中提升線上服務的質量和穩定性;

 

運營線上質量

聊了這麼多,那測試同學如何針對線上故障,做好質量持續運營呢?可以從上面的幾張配圖來切入。

線上服務巡檢:NOC並不是一個崗位,而是一種職責,測試同學對於業務和自己負責的項目相對更熟悉,要做到最快速度發現和處理線上故障,就是要讓最正確的人第一時間響應和介入處理。

而測試同學可以達到監控巡檢和信息分發以及快速驗證的作用。當然,這種機制需要一定的時間建立,還需要一定的基礎技術服務設施支撐。

組織故障覆盤:流程和規範可以將好的實踐標準化流程化自動化,讓技術團隊共享經驗,而組織故障覆盤並且跟進後續的優化落地效果,就是一個測試同學可以很好勝任的事情。

故障處理手冊:有了日常線上巡檢,組織了故障覆盤,可以沉澱很多的最佳實踐,可以將這些實踐抽取共性,沉澱輸出爲一份故障處理手冊,並在團隊內做宣講和落地。

這樣既可以讓其他同學在面對故障時能更快的響應處理,也能讓新同學入職後快速的熟悉團隊的技術棧,加快融入速度。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章