今日头条推荐系统架构设计实践_31页_1mb
报告摘要
今日头条推荐系统架构设计实践总结
核心内容
今日头条是一个基于用户兴趣的智能推荐引擎,其系统架构设计旨在支持大规模用户数据处理、高并发请求响应以及高效的数据存储与检索。系统在2016年12月底已实现日均活跃用户7800万,月均活跃用户1.75亿,单用户日均使用时长76分钟,用户行为峰值达到150万+消息/秒,每天训练数据量超过300TB(压缩后),机器规模达到万级。
主要观点
- 推荐系统是核心:今日头条的核心是其推荐系统,通过用户画像、兴趣标签、正排数据等构建个性化推荐内容。
- 架构演进:从架构1.0到架构2.0,系统经历了从Python多进程模型到C++11多线程模型的重构,显著提升了性能和资源利用率。
- 流式计算应用:采用Storm框架实现流式处理,通过YAML描述拓扑结构,降低开发成本,提升系统灵活性。
- 在线存储优化:基于RocksDB的abase系统实现了高吞吐、低延时的存储方案,支持多种数据格式和缓存策略。
关键信息
用户画像与兴趣标签
- 用户画像包含200+特征,支持快速反馈(10分钟内)。
- 兴趣标签包括德甲、电商、O2O、搞笑、历史、军事等,用于召回和排序。
- 利用离线倒排索引更新标签,实现高效的召回。
流式计算
- 使用Storm Python框架编写Streaming Job。
- Topology用YAML描述,代码自动生成。
- 框架自带KafkaSpout,业务只需关注拼接和计算逻辑。
- 支持Batch MR算法逻辑复用到流式计算中。
- Job数量超过300个,Storm集群规模达1000+节点。
在线存储 - abase
- 基于RocksDB的分布式存储系统,支持全量复制和增量复制。
- 内建key级别LRU缓存,缓存命中率66%。
- 延时低,平均1ms,99%分位4ms。
- 数据量大,单副本压缩后85TB,QPS读360万、写40万。
- 存储瓶颈为SSD容量,单副本需40台机器。
正排数据管理
- 正排数据用于召回、过滤、预估等推荐环节。
- 包括文章属性(创建时间、过期时间)、文本信息、动态属性(阅读数、展现数)等。
- 痛点包括多模块各自维护数据、格式不统一、字段重复、调试困难等。
- 统一方案采用protobuf IDL描述200+字段,按“簇”存储,统一离线刷新框架,提供完善的调试工具。
存储方案 - index.service
- 基于LMDB存储,支持MVCC、读写不阻塞。
- 内存映射、0拷贝,提升性能。
- 支持TTL、compaction、定期持久化。
- 提供filter、merge、boost等算子,支持召回模块。
架构优化与性能提升
- 架构1.0:基于Thrift+Python多进程模型,使用gevent、线程池、C++扩展等提升性能,但存在单机QPS低、内存瓶颈等问题。
- 架构2.0:完全重构为C++11多线程模型,机器数减少60%以上,平均延时下降30%+,PCT99延时下降50%+。
缓存策略与问题
- 缓存并非万能,尤其在实时用户画像和模型特征场景下可能影响推荐效果。
- 采用LocalCache、分布式Cache、共享内存等策略降低延时,避免雪崩。
- 优化手段包括空值回填、异步刷新、写时更新/删除等。
并行化与大扇出优化
- 使用OpenMP实现并行化,将串行代码转换为并行代码。
- 但OpenMP线程数过多导致CPU利用率低,需优化。
- 采用异步IO的Thrift RPC扇出调度,减少线程数,CPU负载下降20%+。
- 长尾概率高,需引入Proxy减少扇出和小包传输。
框架层面优化
- 解决Thrift性能问题,采用Fbthrift Server模块,CPU使用率下降20%+。
- 支持传输协议与IDL向下兼容,减少数据拷贝,提升IO效率。
- 支持全异步调用,实现扇出和并发处理。
可用性与调度
- 实现降级机制、调度优化、熔断、优雅退出、多机房调度等,提升系统可用性和容错能力。
- 包括封禁、探活、解禁、主动overflow、丢弃长时间pending task等策略。
未来挑战
- 数据与规模持续增长,面临存储与计算压力。
- 多IDC部署带来复杂性与调度挑战。
- 系统复杂度上升,需应对DoubleShooting等技术难题。
- 提升资源利用率与调度效率是未来关键方向。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载