什麼是相容性
相容性(compatibility)--是指系統發生變更後表現一致的特性。相容性包括向下相容以及向上相容,
向下相容(downward compatibility),又稱向後相容(backwards compatibility),是指在一個程式(庫)更新到較新版本後,用舊版本程式系統或建立的資料仍能被正常使用(包括寫入)或操作,或在舊版本庫的基礎上開發的程式仍能正常編譯執行的情況。為避免對使用者產生影響,一般需支援向下相容。
向上相容(upward compatibility),又稱向前相容(forwards compatibility),是指在舊版本程式(庫)可以支援新版本資料或服務。一般在特殊情況下才會考慮向上相容,比如新功能釋出前,對舊功能改造使其向上相容,以避免新功能釋出過程中出現相容性問題。
不相容問題會導致已有服務的不可用,對於支付關鍵類鏈路,一旦服務不可用,造成的後果非常嚴重,引起交易建立及支付中斷。A+中臺應用,對接了多個站點,如果服務不向下相容,則需要所有接入站點改造,成本大;若站點未改造,則可能導致站點業務中斷,引發線上故障。
如何評估相容性
服務是否發生變更
外部服務的相容性分析:API、SPI、訊息、通知等和其他系統互動的定義是否有新增、修改、刪除,比如入參、出參、結果碼、異常處理邏輯等,是否向下相容;原則上不允許出現非向下相容的變更
釋出過程中是否存在相容性
釋出過程相容性分析(藍綠髮布或者beta釋出):新資料&舊服務、新系統&舊資料是否相容?
外部服務相容性
釋出過程中和外部服務的相容性分析:比如對接的商戶、渠道等合作方
是否存在DB變更
釋出過程中的DB相容性分析:新資料&舊服務、舊服務&新資料是否相容,比如欄位縮容,增加非空欄位。
相容性場景分析
常見的服務變更主要是新增、修改,涉及到入參、出參、結果碼等。以下是一些可能引起相容性問題的變更,其中大部分都可以通過CR服務變更時,進行相容性分析發現。
變更型別 | 變更點 | 備註 |
新增 | 新增非空屬性 | 存在舊客戶端調新服務時非空校驗失敗,導致服務失敗 |
修改 | 修改欄位型別 | 可能導致舊客戶端調新服務時反序列化失敗 |
修改欄位名 | 不相容 | |
可選引數增加非空校驗 | 可能存在舊客戶端調新服務時非空校驗失敗,導致服務失敗 | |
欄位縮容,如縮小值範圍等 | 不相容,若DB欄位縮容,可能導致值儲存失敗 | |
修改結果碼 | 業務語義發生變化,可能影響下游系統 |