大多数客户端都有远程配置的功能和需求,项目规模由小到大之后,对客户端动态配置的需求就会迅速增长。就会出现新的问题和需求。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接口完成配置项更新。
这个流程里有三个关键点:
这个比较简单,经过后台增删改查的配置项,根据其标签和客户端信息,使用消息中心,将更新事件静默推送到设备,而设备客户端信息和标签,与设备惟一标示的绑定关系,在标签系统维护。
新的配置中心,知足了现阶段的需求,经过将配置项的关联条件抽象成标签,再加上增量更新,知足了节省流量的需求。 将来还有进一步改进的空间:
多谢您花费宝贵的时间阅读,但愿可以与你们多多交流