一、概念
開關系統: 可以控制某一功能的上下線
二、背景
rn建設正在穩步推進中
rn頁面的兜底,降級邏輯,有待完善, 確保終端頁面的高可用
如何實現rn頁面內的兜底、降級
三、目標收益
提供緊急逃生能力,確保終端頁面的高可用
為精細化運營提供基礎能力:支持不同的用戶群體做不同的運營策略
結合埋點系統,支持AB實驗
四、使用場景
-
AB實驗
結合埋點系統,切分一部分用戶使用新功能A方案,一部分用戶功能B方案,對比A或者B哪個指標更好
-
功能入口的顯隱
- 比如低版本用戶、或某一區域用戶,不顯示某一功能入口
-
精細化運營
-
可以根據不同指標的用戶,匹配不同的跳轉邏輯。
比如羊毛黨,提供福利頁面跳轉
高價值用戶,提供高利潤產品的跳轉
-
-
體驗優化
- 比如性能低的手機,頁面使用h5呈現,其他手機使用RN呈現
-
穩定性保障
緊急避險。比如某一頁面由H5改版為RN。上線以后有重大bug,修復耗時較長,可以將該入口立即切換為舊的h5頁面。必現線上出現重大影響
灰度放量。
五、方案內容
5.1、描述
所謂的開關,即是一份配置表。
可以針對不同的手機、不同的系統、不同的版本、不同的app、不同的參數,分別給出對應的配置,由于可以實時控制該配置信息的上下線,以及實時修改配置,命名為開關系統。
5.2、開關類型
終端開關:給h5、Android、iOS、react-native使用的開關
服務端開關: 給后端使用的開關
5.3、構成
方案包括四部分:
admin管理后臺: 用來管理開關的增、刪、改、查、上下線
數據管理服務:存儲數據、提供相關操作數據的接口
終端SDK: 用于獲取開關配置信息
后端服務SDK: 用戶獲取開關配置信息
5.3.1、管理后臺
- 配置頁面
- 配置邏輯
5.3.2、后端服務
提供api
存儲數據
支持測試環境和生產環境
5.3.3、終端SDK
// 根據客戶端公參,獲取開關信息
getSwitchInfo(switchId: string, params:object) {
return switchInfo
}
-
客戶端SDK:提供api,方便客戶端開發調用
- 獲取某一開關的配置信息:id和公參
5.3.4、服務端SDK
// 根據服務端參數,獲取開關信息
getSwitchInfo(switchId: string, params:object) {
return switchInfo
}
// 根據客戶端信息獲取開關信息,給客戶端使用,一般用于轉發客戶端的請求
getSwitchInfoForFrontEnd(switchId: string, params:object) {
return switchInfo
}
-
后端SDK:提供api,方便后端開發調用
- 獲取某一接口的個性化配置信息:id,公參
5.3、公參
-
終端
客戶端:OS、appVersion、OSVersion、userId、deviceId、ip、。。。
前端:瀏覽器名稱、瀏覽器版本、userId、deviceId、ip、。。。
-
后端
可轉發客戶端請求,要求客戶端提供相關的公參
【待定】由后端開發指定
5.4、開關配置
5.4.1、分支配置
用來配置當前開關,允許返回幾種值。可以類比為枚舉值的概念。分支配置,就是用來配置這個枚舉。
分支配置是后續配置的基礎
支持增刪改查
5.4.2、白名單配置、黑名單配置
用于指定某個用戶,必定命中/不命中某個分支
一般用于測試場景,需要逐個讓測試賬號命中每一個分支,測試不同分支的行為
支持用戶ID和設備ID,不允許多選,默認用戶ID
支持多個id的配置
5.4.3、通用規則配置
用來配置用戶的分配規則。
例如:
-
規則1:
app版本在2.3.0以上
操作系統為Android
-
規則2:
操作系統為iOS
地理區域為河北
-
規則3:
- 不符合上述規則1/2的用戶
5.4.4、規則和分支匹配關系
用于指定不同的規則對應的分支
5.4.5、灰度設置
用來控制不同分支的灰度值,支持0%-100%
發布
可以一鍵上線到測試環境
上線過測試環境的開關,可以一鍵上線到生產環境,避免需要到生產環境重新創建