大多數客戶端都有遠程配置的功能和需求,項目規模由小到大之後,對客戶端動態配置的需求就會迅速增長。就會出現新的問題和需求。javascript
可能不少移動端的開發者都有這樣的經歷: 經過某一個接口,獲取某一業務功能的配置信息,有時候須要根據業務觸發的邏輯,在不一樣的時機調用接口,獲取配置,又有些時候須要把客戶端的一些信息,如版本號、時間、上次的緩存等等,傳入接口獲取最新配置,這其實就是最簡單的遠程配置需求,根據配置相關條件,經過不一樣的更新策略,獲取遠程配置。java
設計接口以下:git
$ curl https://api.xxx.com/v0/configuration/getMessageConfig?appVersion=1.0.0&platform=iOS&messageType=1 \
-H "SS-Cache-Version: XXXXXXXXX"
{
"code":"0",
"result":{
"config_value":"******",
"cache_version":"******"
}
}
複製代碼
經過不斷開發新的接口,知足各個業務線對配置功能需求。 優勢:需求較少的時候,開發特別快 缺點:客戶端須要不斷開發新的API調用,服務端則須要不斷開發新接口,配置與客戶端的關聯信息發生變化,API則須要進行升級,而客戶端存在多版本並存的狀況,老版本API也沒法下線,佔用服務端資源。github
爲減輕服務端開發依賴,有的開發者經過使用第三方開發平臺進行配置分發。 例如,使用umeng的在線參數進行遠程配置算法
優勢: 無需服務端開發,第三方實現SDK與其服務端的通訊,不須要作客戶端開發shell
缺點: 沒法與客戶端信息作相關,只能經過約定配置參數名稱例如 配置項名稱+平臺名稱+客戶端版本做爲配置項名稱,作硬關聯,大量生成重複配置項。沒法控制更新策略。業務相關配置放置在第三方平臺,沒法保證數據安全。json
由此前的經歷和需求痛點,咱們設計出新的移動端配置中心。 主要有以下功能後端
根據以上需求,總體方案的解決思路能夠是以下這樣:api
有了大概的解決思路之後,能夠對涉及到的方面進行總體盤點,其實這也是移動端基礎設施的摸查,涉及如下幾個方面: 數組
客戶端與配置中心進行API交互,接口定義以下: queryConfiguration 入參:
{
"clientInfo":{
"appid":"***",
"appVersion":"1.0.0",
"platform":"1", //1爲iOS 2爲Android
"channel":"AppStore"
},
"cacheInfo":[{
"configName":"routerConfigMap",
"version":"*****"
},
{
"configName":"conditionConfiguration",
"version":"*****"
}
]
}
複製代碼
返回值:
code | 含義 | 備註 |
---|---|---|
0 | 增量包 | 返回增量包數據 |
1 | 全量數據 | 返回配置全量數據 |
2 | 已刪除 | 表示該配置項已刪除 |
{
configurationData:[
{
"configName":"routerConfigMap",
"version":"*****",
"code":0,
"hash":"*****",
"patch":[]
},
{
"configName":"orderActivity",
"version":"xxxxxx",
"code":1,
"hash":"*****",
"value":"xxxxx"
},
{
"configName":"conditionConfiguration",
"version":"xxxxxx",
"code":2
},
]
}
複製代碼
客戶端與API交互流程圖
App管理平臺
配置平臺
配置管理後臺,提供對應用的管理與配置項的管理,配置項與基本客戶端信息關聯。 配置項存儲與客戶端信息進行關聯映射,關係有OR和AND兩種,每一個配置項設置關聯條件。例如配置項的關聯條件爲:
configId <—> appId AND appVersion AND channel AND platform OR tag
新建、更新或者刪除某一配置,能夠設置定時生效,Job系統會定時執行操做,並調用消息中心,按照關聯條件,進行推送通知給客戶端,客戶端接到更新事件後,再調用API接口完成配置項更新。
這個流程裏有三個關鍵點:
這個比較簡單,經過後臺增刪改查的配置項,根據其標籤和客戶端信息,使用消息中心,將更新事件靜默推送到設備,而設備客戶端信息和標籤,與設備惟一標示的綁定關係,在標籤系統維護。
新的配置中心,知足了現階段的需求,經過將配置項的關聯條件抽象成標籤,再加上增量更新,知足了節省流量的需求。 將來還有進一步改進的空間:
多謝您花費寶貴的時間閱讀,但願可以與你們多多交流