【】面向失败的设计之播控系统!
文章图片
文章图片
作者 | 阿里文娱高级开发工程师 云琰浅
责编 | 屠敏
谈面向失败的设计
1、什么是面向失败的设计?
面向失败的设计 , 就是以“失败”为对象 , 天然为了失败而存在的设计思想 , 在一开始的系统设计阶段就考虑到各种失败场景 , 把面向失败当成是系统设计的一部分 , 准备好从失败中恢复的策略 。
2、为什么要面向失败设计?
因为无所不在的失败场景 , 比如硬件问题 , 软件bug , 配置变更错误 , 系统恶化 , 超预期流量 , 外部攻击 , 依赖库问题 , 依赖服务问题 。
【【】面向失败的设计之播控系统!】并且 , 这些一旦失败 , 轻则出现业务不可用 , 影响用户体验和企业声誉;重则导致数据永久丢失、业务再无恢复可能 。例如 , 911事故发生前 , 约有350家企业在世贸大厦工作 。事故后 , 有200家企业由于重要系统被破坏 , 关键数据丢失而倒闭 。
文章图片
文章图片
3、怎么面向失败设计?
在软件的整个生命周期中 , 不同的阶段面对失败场景有不同的应对规则 。在设计阶段将系统的架构简单化 , 结构层次分明;在发布阶段尽量做到最小变更原则 , 小规模 , 多次迭代;在运维阶段做好周期性压测 , 最小依赖 。
文章图片
文章图片
播控是如何实现面向失败设计的
1、播控架构设计
文章图片
文章图片
优酷播放控制系统从层级结构上将系统分成3层 , 对外服务层、基础服务层、数据存储层 。
第一层:对外服务层包含播控SDK , 播控查询服务,播控变更服务,播控筛选服务
第二层:基础服务层包含播控任务调度,播控数据库服务;
第三层:数据存储层包含分布式缓存 , 数据库 , 开放搜索 。
从功能上 , 播控系统共3大核心线路读核心、写核心、筛选服务 。
线路一:读核心是整个系统的核心服务 , 负责优酷、土豆、天猫视频展示、透出能力;
线路二:写核心负责整个系统策略变更核心服务;
线路三:筛选服务提供管理后台多数据源筛选服务 。
这样设计的特性如下:
1) 线路上读、写分离 , 核心与筛选分离(主次分离) , 单独链路变更失败之后不会影响核心链路的功能;
2) 核心高并发查询服务读取数据库方式从数据库服务隔离开 , 当压力增加后 , 无单点瓶颈 , 可以无限扩展;
3) 任一链路故障 , 其他链路正常运行 , 稳定提供服务;
4) 数据库服务遵从容量设计原则 , 针对查询服务、变更服务相同接口有不同限流策略 。
2、数据库不可用兜底设计
数据库兜底设计的目的在于在数据库不可用的极端场景下 , 保证生产链路不挂 , 且不会影响到业务方 。实现方式通过全局统一开关 , 切换核心读链路和写链路使用缓存作为临时的数据持久层 , 并把数据变更堆积在消息队列中 , 待数据库可用后再切换回数据库 , 并消费消息队列 。
文章图片
文章图片
读链路数据库兜底流程
推荐阅读
- 苹果:iPhone12 CAD图纸意外曝光!全新外观设计
- 蚕豆■三星新无线耳机渲染图曝光:设计完全改版神似蚕豆搭配三款配色
- 【刘海】iPhone12基本确定,设计有亮点,可以和三星S20U说再见了
- 科技犬玩机:iPhone12基本确定,设计有亮点,可以和三星S20U说再见了
- 「ROM乐园TB」三星新无线耳机渲染图曝光:设计完全改版神似蚕豆搭配三款配色
- [牛科技]在智能手机领域失败的HTC,多年努力后又在全新领域做到世界第一
- ■新形势下传统企业破局重生林魔头教你从商业模式设计开始
- :iPhone12真机首次曝光,外观设计致敬乔布斯,性能有望全球第一
- 【】iPhone12 Pro Max设计细节曝光,刘海有望缩小
- 「并行」高速PCB设计必备知识:并行总线VS串行总线