本文涉及工程中測試/穩定性相關的一些內容,全文見:https://segmentfault.com/a/11...
1.仿真環境是用線上流量轉發到下線環境作線下實驗。重點在於流量引入和數據/隊列/push,im服務的隔離
2.全鏈路壓測 是用大量與線上流量相似的流量請求到線上,檢測故障。重點在於大量數據與真實流量的模擬,壓測數據隔離
3.流量回放 能夠用來定位問題,將有問題請求百分百還原到線下機器,對控制讀寫接口返回用線上真實mock,可不斷重複。重點在於線下請求劫持到回放機器進行mock,和mock數據匹配。
4.故障注入也被叫防火平臺,用於故障主動注入演練服務保護有效性等。
由於都是公司未開源東西。這裏都會涉及到引流和數據隔離,先重點說下這兩個的通用解決,而後只簡單介紹四個的實現。html
assistant server爲了截獲響應給TCPCopy,不會回給online serverjava
數據同步+大量機器mysql
寫本地或寫丟棄,讀線上。nginx
redis,mq,mysqlweb
ultron-server:web控制檯,負責新建壓測計劃、壓測任務,調整壓測,修改壓測配置,查看壓測監控和性能數據等。
daemon:遠程調起agent。ultron-server新建壓測任務只會在數據庫添加一條待運行的壓測任務記錄,並將空閒agent分配給壓測任務,ultron-server自己不負責發壓,而後daemon會從數據庫讀取待運行的任務以及給任務分配好的agent,而後經過shell命令遠程調起agent。
datasource: 即數據源,全鏈路壓測時向agent提供司乘基本信息和路線信息,http日誌回放時向agent提供日誌日誌文件。datasource起了一個定時任務從redis(全鏈路壓測)或者日誌文件(http日誌回放)讀取數據,緩存到內存的隊列裏面,當壓測agent啓動後,從datasource的內存隊列裏面拉取壓測數據。
redisfiller: 將匹配好的路線信息和司乘數據寫入redis,供datasource拉取數據用。redis
降級預案的有效性:下游依賴出現故障時,預案能及時應對,將系統的 SLA 維持在相對較高的水平,不因下游故障引發當前服務可用性的故障
監控報警:校驗報警是否符合預期:是否報警、消息提示是否正確、報警的實效、收到報警的人是否預期
故障復現:故障覆盤的後續todo項落地效果如何,經過必定時間後對故障的重現和驗證,完成閉環
架構容災測試:主備切換、負載均衡、流量調度等容災手段健壯性如何,提早發現並修復可避免的重大問題
參數調優:限流策略、報警閾值、超時設置的調優
故障模型訓練:有針對性的製造一些故障,給故障定位系統製造數據sql
1.依賴服務端:故障規則,依賴分析
依賴模型包括關係、流量、強弱三個組成部分:
依賴關係:定義依賴的方向,我依賴誰,誰依賴我
依賴流量:定義每一個應用、服務、方法調用的次數
依賴強弱:定義依賴的鬆緊程度
對依賴的治理就是持續穩定的拿到關係、流量、強弱的數據。
架構拓撲可視化:自動探測應用的拓撲結構,繪製組件間依賴關係和應用對基礎架構的依賴
2.依賴插件:
調用攔截,業務識別,注入
結果輸出:依賴報表,用例軌跡,插件管理等
https://help.aliyun.com/docum...
3.注入:shell
降級、熔斷,服務(1.目前寫sdk在代碼中讀配置直接不發送就返回,分協議處理。2.統一劫持返回)和功能(開關配置)
限流,nginx改;統一入口流量劫持(目前thrift沒作,能夠和nginx同樣令牌桶)
預案管理,開關監控數據庫