这篇文章Re-Architecting the Video Gatekeeper 是出自 Netflix Technology Blog。
Netflix上的视频需要通过Title Operations 团队的策划,使其遵守的合同;字幕、配音、翻译能够提供给合适的人群;标题名称和概要可供使用和翻译;满足各个国家的成熟度等级(分级)。
Gatekeeper是Netflix的系统, 他通过汇集多个上游系统数据, 应用一些业务逻辑,为每一个国家地区每一个视频状态的输出来完成器规定任务。GateKeeper 设置这些视频是否对用户可见。为Title Operations 指出缺少的内容, 协助其工作。
现存问题:
GateKeeper是一个事件驱动的系统,上游系统每个改变都会向GateKeeper发送事件,GateKeep再通过访问每个上游服务来响应事件。可能会出现下问题:
- I/O 瓶颈
- 处理延时
- 事件丢失
而主动扫描处理一些指定目录可以缓解这些问题, 但是增加了更多的事件。
解决方案:
使用技术:Hollow 可以看下这篇文章使用技术 Hollow ( Drew Koszewnik),( 2016年,是这篇的作者)
Netflix Hollow是一个java库和工具集,用于将内存数据集从单个生产者传播到许多消费者,以实现高性能的只读访问。 适合小到中级数据集 Hollow
第一阶段:
使用Hollow为每个上游系统在GateKeeper增加缓存, 在指定周期内循环迭代处理所有国家地区的视频,并生成完整输出。
第二阶段:
由于第一个阶段时间片相对较长, 整个数据来自实际数据源,一个迭代周期需要很长时间。需要进一步优化。
将Hollow分为更小时间片单位, 应用程序将每次的更改通过kafka推送 Hollow,辅助周期性的整个数据源扫描来防止数据遗漏。
效果:
性能及可用性提高:消除了I/O瓶颈,提高了性能,单个上游系统故障下可以通过过时数据进行评估。
对于新投产版本,将某一个时间X的数据做为输入, 将其输出结果其与生产版本应用的输出结果进行对比(diffed )来准确判断是否达到预期效果。对于开发,验证,部署都比之前有了很大提高, 安全性方面也比以前架构更高。
在文末也写道将在未来几个季度实现这一目标。
对于文中描述的实时推送,全量补齐方式,实施的项目中也使用过,不过是联机+批量模式:报文从一个系统A实时推送到系统B, 夜间再通过下发批量进行全量更新补全推送时丢失的信息。
对于数据重放到预发布版本,与生产版本比较执行执行结果, 来验证新版本是否达到预期效果,和我现在项目中验证方式不一样, 目前投产后通过实际交易进行验证, 如果能方便将相关数据重放到新版本进行验证,确实将减少不少验证的工作, 不过也需要相应的应用做出相关的改造才可以。
Be First to Comment