一 功能描述
1.简介
实时发布服务(Mobile Delivery Service,简称 MDS)是 mPaaS 平台的核心基础服务组件之一,提供版本升级包、热修复包、H5 离线包的管理和发布服务,同时支持 开关配置、白名单、发布规则 管理功能。
在客户端集成实时发布服务功能后,您可以在 mPaaS 插件中生成新的包,然后在实时发布控制台发布新包,客户端收到新包并进行升级。实时发布服务还支持通过白名单进行灰度发布,您也可以使用高级过滤规则,比如指定机型,来进行更精准的灰度发布。
2.功能特性
- 灰度发布:在正式发布之前,可以通过白名单来做小规模发布(比如内部员工)以验证新包的功能是否达到预期。还可以进行时间窗灰度发布,在规定的时间段内发布给规定用户人数。如果达到预期就可以进行全网推送。
- 高级过滤:在进行灰度发布的时候还可以利用高级规则来定义更为精准的白名单人群,比如可以只发给小米手机的用户,多个过滤规则可以叠加,只有在所有的过滤规则都符合的情况下才会推送。
- 实时回滚:仅支持热修复。即使进行了灰度发布,正式上线的时候还是难免会发生问题,这个时候就可以进行实时回滚,自动回滚到发布前的版本。
- 自定义验签:为了保障安全性,热修复有自定义的验签流程,保证脚本来源的正确性。 mPaaS 插件中提供生成热修复资源包并对包进行加签的功能。
3.产品优势
- 支持多产品、多任务、多维度发布管理:多 APP 支持,同时支持正式升级、热修复及 H5 离线包以及实时在线推送。
- 智能灰度能力,多种升级策略:内部灰度、外部灰度、人群地域、机型网络等多种规则可供选择。
- 增量差分离线包更新能力:减少数据冗余及设备带宽占用,在移动端网络条件不稳定场景下可体现优势。
- 高灵敏度、高可用性:升级客户端 RPC 接口能力,提供在线分钟级触达能力。
二 产品架构
1.MDS架构
1.1.应用功能介绍
- mdsweb:用来提供数据下载通道。
- mcube:提供核心的灰度规则业务服务。
1.2.RPC请求
参考上图黄色实线,当我们在手机app客户端发起一个请求(如:更新离线包,检测线上app是否有新的版本等),请求会先经过负载均衡到我们的网关应用mpaasgw。mpaasgw通过注册中心发现mcube上面发布的,和升级版本相关的rpc服务。mcube收到请求以后,会检测是否有更新的版本,并且根据当前的客户端相关信息,判别当前请求是否有权限拉取云上的新版本,确定有权限,那么返回对应的包的相关信息。
1.3.资源请求
参考如上图的紫色实线,客户端在经过RPC请求以后,获取到了包相关的信息(版本号,离线包的id号,fallback离线地址,离线包的下载地址等),客户端根据离线包的下载地址,解析请求到mdsweb的外网地址。mdsweb收到下载的请求会先检查自己本地的缓存里面,有没有符合要求的包,如果有的话就直接返回给客户端,如果没有的话,会去请求后面的对象存储,获取包以后返回给客户端,然后本地也会进行备份该包的操作。
考虑到APP用户请求包的并发量,一般我们都会建议在mdsweb前面挂一个CDN用于降低mdsweb的工作压力,避免其被打挂掉的可能。
所以,在挂载了CDN的情况下,下载包的请求路径会先请求到对应的CDN,CDN发现自己没有对应的包的时候,会回源到mdsweb,拿到对应的包以后,CDN也会存储该包,这样下次请求该包,CDN将直接把包的信息返回给客户端。
1.4.管控流量
参考如上图的灰色实线,当我们在mAppCenter(就是我们平时客户端同学经常使用的mPaaS控制台)上传一个离线包的时候,请求会经过mAppCenter的nginx路由到mcube,mcube拿到这个离线包以后,先把离线包存储到对应的对象存储,随后把对应的离线包在对象存储里面的地址,存储到数据库。
当我们在控制台设置一些灰度发布策略,白名单之类的信息,这些信息是存在上图中的缓存里面。
动态配置这块主要是用于动态的调整一些运行时配置,例如日志的打印级别等等,根据实际是否启用sofa中间件,可以分别选用SOFA-DRM或者Zookeeper进行实现。
2.MDS网络架构 – AntStack底座
2.1.名词解释
- DMZ区:因为银行内部一般都不可以直接链接外网,故在银行的内网前面,会有一个叫做DMZ区的地方,这个地方可以访问外网。
2.2.RPC请求
RPC请求的主要流程可以参考上方“MDS架构---RPC请求”,值得一提的是我们提供的spanner一般不具备证书卸载的功能,所以需要在请求到达DMZ区的spanner之前完成证书的卸载,一般会放在DMZ区的F5上实现。
2.3.资源请求
资源请求的主要流程可以参考上方“MDS架构---资源请求”,补充一点就是当我们在控制台上下载离线包的时候,走的是mdsweb的内网地址。
3.MDS网络架构 – 阿里云底座
3.1.资源请求
资源请求有两种情况,一种就是上方“MDS架构---资源请求”的描述,还有一种就是指OSS直接采用公网方式部署,那么当客户端在经过RPC请求,获取到了包相关的信息以后,下载包的请求路径就变成:APP---CDN---OSS。目前在阿里云公有云上的逻辑就是客户端直接通过公网OSS的地址进行下载。