项目背景
功能描述
音视频新特性(网络特性、本地特性)统一管理控制
1
2根据客户端(PC、Android、IOS)的特质(属性,比如CPU、GPU、摄像头 ...),
动态下发适合客户端的音视频特性,达到用户体验效果最佳。客户端升级统一控制
1
该系统统一控制各个客户端是否升级,如果升级,那升级到的版本是多少? 是可选升级还是强制升级 ?
服务器地址统一管理
1
从该系统统一下发给客户端,使得客户端轻量级,让各个客户端不再因为管理近50个服务器地址而烦恼。
配置公共元数据统一管理
1
字典,错误码 ...
特点
必须保证高可靠
1
该系统是客户端直接对接的第一个后台应用,该系统不可用,则公司整个产品不可用; 系统可水平扩展。
并发能力有要求
1
该系统的并发代表公司产品的最大并发。
性能要求较高
1
能快速的处理客户端获取特性、地址、升级的响应。
安全性要求
1
必须对该系统提供安全性措施,避免恶意攻击导致系统崩溃。
技术实现
技术栈
1
Spring + SpringMVC + Mybatis + MQ + MySQL + Canal + Redis + Dubbo + Restful API
技术细节
高可用设计
1
2
3同类型的服务(Web、dubbo)无状态、对等,部署2套或2套以上。
可横向扩展、动态负载均衡,负载策略:轮询。
技术手段:nginx + zookeeper。接口隔离
1
2不同的接口相互隔离,互不影响。
技术手段:业务线程池 + Servlet 3.0。流控设计
1
2后台服务,底线是,即使穿透安全攻击,也不至于使服务宕机。
技术手段:Guava RateLimiter ,令牌桶。缓存设计
1
2
3
4组件封装对数据库和缓存操作。简化客户端调用,客户端只管get key调用,不管 set。
缓存全局开关,避免因缓存bug或不可用,导致整个服务不可用,运维手段后路。
技术手段:Canal 实现数据库和缓存一致性。组件封装简化客户端操作,隐藏对数据源和缓存操作的细节。
zookeeper客户端代码编写,实现分布式控制缓存开关。安全设计
1
2关键字段带时间戳接口签名
appkey 授权合法性校验
数据流设计
接口安全性流程图
1 | 接口签名 + appkey授权合法性校验 |