今日头条技术架构分析

article/2025/9/18 21:54:51

点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试资料

来源:blog.csdn.net/mucaoyx/article/details/84498468

  • 一、产品背景

    • 1、文章抓取与分析

    • 2、用户建模

    • 3、新用户的“冷启动”

    • 4、推荐系统

    • 5、数据存储

    • 6、消息推送

  • 二、今日头条系统架构

  • 三、头条微服务架构

  • 四、今日头条的虚拟化PaaS平台规划

  • 五、总结


  今日头条创立于2012年3月,到目前仅4年时间。从十几个工程师开始研发,到上百人,再到200余人。产品线由内涵段子,到今日头条,今日特卖,今日电影等产品线。

一、产品背景

  今日头条是为用户提供个性化资讯客户端。下面就和大家分享一下当前今日头条的数据(据内部与公开数据综合):

  • 5亿注册用户

  • 2014年5月1.5亿,2015年5月3亿,2016年5月份为5亿。几乎为成倍增长。

  • 日活4800万用户

  • 2014年为1000万日活,2015年为3000万日活。

  • 日均5亿PV

  • 5亿文章浏览,视频为1亿。页面请求量超过30亿次。

  • 用户停留时长超过65分钟以上

1、文章抓取与分析

  我们日常产生原创新闻在1万篇左右,包括各大新闻网站和地方站,另外还有一些小说,博客等文章。这些对于工程师来讲,写个Crawler并非困难的事。

  接下来,今日头条会用人工方式对敏感文章进行审核过滤。此外,今日头条头条号目前也有为数不少的原创文章加入到了内容遴选队列中。

  接下来我们会对文章进行文本分析,比如分类,标签、主题抽取,按文章或新闻所在地区,热度,权重等计算。

2、用户建模

  当用户开始使用今日头条后,对用户动作的日志进行实时分析。使用的工具如下:

  • Scribe

  • Flume

  • Kafka

      我们对用户的兴趣进行挖掘,会对用户的每个动作进行学习。主要使用:

  • Hadoop

  • Storm

      产生的用户模型数据和大部分架构一样,保存在MySQL/MongoDB(读写分离)以及Memcache/Redis中。

      随着用户量的不断扩展大,用户模型处理的机器集群数量较大。2015年前为7000台左右。其中,用户推荐模型包括以下维度:

  • 1 用户订阅

  • 2 标签

  • 3 部分文章打散推送

此时,需要每时每刻做推荐。

3、新用户的“冷启动”

  今日头条会通过用户使用的手机,操作系统,版本等“识别”。另外,比如用户通过社交帐号登录,如新浪微博,头条会对其好友,粉丝,微博内容及转发、评论等维度进行对用户做初步“画像”。

  分析用户的主要参数如下:

  • 关注、粉丝关系

  • 关系

  • 用户标签

      除了手机硬件,今日头条还会对用户安装的APP进行分析。例如机型和APP结合分析,用小米,用三星的和用苹果的不同,另外还有用户浏览器的书签。头条会实时捕捉用户对APP频道的动作。另外还包括用户订阅的频道,比如电影,段子,商品等。

4、推荐系统

  推荐系统,也称推荐引擎。它是今日头条技术架构的核心部分。包括自动推荐与半自动推荐系统两种类型:

1) 自动推荐系统

  • 自动候选

  • 自动匹配用户,如用户地址定位,抽取用户信息

  • 自动生成推送任务

这时需要高效率,大并发的推送系统,上亿的用户都要收到。

2)半自动推荐系统

  • 自动选择候选文章

  • 根据用户站内外动作

      头条的频道,在技术侧划分的包括分类频道、兴趣标签频道、关键词频道、文本分析等,这些都分成相对独立的开发团队。目前已经有300+个分类器,仍在不断增加新的用户模型,原来的用户模型不用撤消,仍然发挥作用。

      在还没有推出头条号时,内容主要是抓取其它平台的文章,然后去重,一年几百万级,并不太大。主要是用户动作日志收集,兴趣收集,用户模型收集。

      资讯App的技术指标,比如屏幕滑动,用户是不是对一篇都看完,停留时间等都需要我们特别关注

5、数据存储

  今日头条使用MySQL或Mongo持久化存储+Memched(Redis),分了很多库(一个大内存库),亦尝试使用了SSD的产品。

  今日头条的图片存储,直接放在数据库中,分布式保存文件,读取的时候采用CDN。

6、消息推送

  消息推送,对于用户: 及时获取信息。对运营来讲,能够 提⾼⽤用户活跃度。比如在今日头条推送后能够提升20%左右的DAU,如果没有推送,会影响10%左右 DAU(2015年数据)。

  推送后要关注的ROI:点击率,点击量。能够监测到App卸载和推送禁用数量。

  今日头条推送的主要内容包括突发与热点咨讯,有人评论回复,站外好友注册加入。

  在头条,推送也是个性化:

  • 频率个性化

  • 内容个性化

  • 地域

  • 兴趣

比如:

  按照城市:辽宁朝阳发生的某个新闻事件,发给朝阳本地的用户。

  按照兴趣:比如京东收购一号店,发给互联网兴趣的用户。

  推送平台的工具和选择,需要具备如下的标准:

  • 通道,首先速度要快,但是要可控,可靠,并且节省资源

  • 推送的速度要快,有不同维度的策略支持,可跟踪,开发接口要友好

  • 推送运营的后台,反馈也要快,包括时效性,热度,工具操作方便

  • 对于运营侧,清晰是否确定推荐,包括推送的文案处理

      因此,推送后台应该提供日报,完整的数据后台,提供A/B Test方案支持。

      推送系统一部分使用自有IDC,在发送量特别大,消耗带宽较严重。可以使用类似阿里云的服务,可有效节省成本。

二、今日头条系统架构

三、头条微服务架构

  今日头条通过拆分子系统,大的应用拆成小应用,抽象通用层做代码复用。

系统的分层比较典型。重点在基础设施,希望通过基础设施提高快速迭代、容灾和一系列的工作,希望各个业务团队能更快做业务上的迭代以及架构上的调整。

四、今日头条的虚拟化PaaS平台规划

通过三层实现,通过 PaaS 平台统一管理。提供通用 SaaS 服务,同时提供通用的 App 执行引擎。最底层是 IaaS 层。

  IaaS 管理所有的机器,把公有云整合起来,头条有一些热点事件会全国推广推送,对网络带宽比较高,我们借助公有云,需要哪一种类型计算资源,统一抽象起来。基础设施结合服务化的思路,比如日志,监控等等功能,业务不需要关注细节就可以享受到基础设施提供的能力。

五、总结

今日头条重要的部分在于:

数据生成与采集

数据传输。Kafka做消息总线连接在线和离线系统。

数据入库。数据仓库、ETL(抽取转换加载)

数据计算。数据仓库中的数据表如何能被高效的查询很关键,因为这会直接关系到数据分析的效率。常见的查询引擎可以归到三个模式中,Batch 类、MPP 类、Cube 类,头条在 3 种模式上都有所应用。

热门内容:   

    

  • 扛住 100 亿次请求?我们来试一试

  • 支付宝的架构到底有多牛逼!还没看完我就跪了!

  • 面经:为了拿到字节跳动offer,鬼知道我经历了啥...

  • Spring Boot + MyBatis + Druid + PageHelper 实现多数据源并分页

  • 是时候扔掉Postman了,又一个被低估的IDEA插件出来了...

  • Spring集成任务调度功能


最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡


http://chatgpt.dhexx.cn/article/tKDBLyrl.shtml

相关文章

写了 5 年 Java,这些坑还是没躲过……

我常常在想,一个人具备怎样的素质和能力,才称得上高级工程师?估计有不少人会说,“基础过硬、熟练掌握一门编程语言、至少看过一个优秀开源项目的源代码、有过高并发工作经验、沟通能力强”。 上面这些都很对,这些也都是…

专访方志朋:2018年仍然是微服务飞速发展的一年

方志朋,毕业于武汉理工大学硕士学位。 CSDN博客专家、Spring Cloud中国社区联合创始人。 《深入理解Spring Cloud与微服务构建》作者。 Spring Cloud作为Java语言的微服务落地框架,在Spring开源社区和Pivatol、Netflix两大公司的推动下飞速发展&#xf…

顶配版阿里大佬面试笔记+300道硬核面试题,跪着啃完了。。。。

金九银十刚过去,有一部分朋友在这期间肯定经历了一番大厂面试的洗礼,不知道大家是经受住了考验如愿以偿了,还是折戟沉沙无功而返呢? 身边已经有技术大佬顺利通过了阿里P6/P7的面试,在30岁之前成功跳槽进大厂&#xff1…

我是一个线程池

点击上方蓝色“方志朋”,选择“设为星标” 回复“666”获取独家整理的学习资料! 线程池的自我介绍 我是一个线程池(ThreadPoolExecutor),我的主要工作是管理在我这的多个线程(Thread)&#xff0…

好用到爆的 Java 技巧

点击上方“方志朋”,选择“设为星标” 回复”666“获取新整理的面试文章 来自:Lrwin的技术博客链接:http://lrwinx.github.io/2017/03/04/细思极恐-你真的会写java吗/ 本文不是一个吹嘘的文章,不会讲很多高深的架构,相…

Spring Cloud和Spring Boot高级视频

内容是之前发过的,大家说找不到,重新发一次 spring cloud 视频内容: spring boot 视频内容: 下载方式: 微信公众平台回复“C”免费获取springcloud,回复“B"免费获取springboot 4000G java高级架构师进阶 视频下载…

华为最美小姐姐,被外派墨西哥后...

欢迎关注方志朋的博客,回复”666“获面试宝典 来源丨《华为人》、心声社区 作者丨潘昱 2018年,坐在UCLA大学教室里,我和华为进行了一场视频面试。去投行从事对冲基金业务,还是去四大会计师事务所做一名税务咨询师?当时…

Java 和 C 长期霸权结束

欢迎关注方志朋的博客,回复”666“获面试宝典 TIOBE 公布了 2021 年 10 月的编程语言排行榜。 在进行了几个月的追逐之后,Python 成功在 10 月份超越了霸榜已久的 C 语言,夺得了 TIOBE 编程语言排行榜首的位置。TIOBE CEO Paul Jansen 评价称…

Spring Cloud之路---1.注册中心eureka与服务提供者

根据方志鹏大神的观点而来,他的博客地址: http://blog.csdn.net/forezp/article/details/70148833 简介:Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路…

SpringBoot 生产中 16 条最佳实践

欢迎关注方志朋的博客,回复”666“获面试宝典 Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot专家的文章。 在…

SpringBoot快速开发利器:CLI 属实真牛逼!

欢迎关注方志朋的博客,回复”666“获面试宝典 来源:blog.csdn.net/qq_31635851/article/details/120411711/ 安装 Spring Boot CLI演示项目结构用 Spring Boot CLI 创建 Hello World 示例使用 Grab 注释Spring Boot CLI 测试应用程序使用 Spring Boot CL…

一个程序员的水平能差到什么程度?

欢迎关注方志朋的博客,回复”666“获面试宝典 来源:www.zhihu.com/question/314644210 逛知乎的时候,看到一个有意思的话题:一个程序员的水平能差到什么程度? 看了下面的回答,不得不说,真是小刀…

spring boot面试问题集锦

方志鹏 2019/09/06 Q: 什么是spring boot? A:多年来,随着新功能的增加,spring变得越来越复杂。只需访问页面https://spring.io/projects,我们将看到所有在应用程序中使用的不同功能的spring项目。如果必须启动一个新…

五分钟体验分布式事务框架Seata

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。本教程旨在为读者提供一个快速入门seata的案例,详细使用请参考…

SpringBoot非官方教程 | 第二十五篇:2小时学会springboot

转载请标明出处: https://www.fangzhipeng.com/springboot/2017/05/25/sb25-2hour.html 本文出自方志朋的博客 一.什么是spring boot Takes an opinionated view of building production-ready Spring applications. Spring Boot favors convention over configurat…

Spring Cloud Alibaba教程:使用Nacos作为配置中心

转载请标明出处: https://blog.csdn.net/forezp/article/details/90729945 本文出自方志朋的博客 个人博客纯净版https://www.fangzhipeng.com/springcloud/2019/06/01/sc-nacos-config.html 在上一篇文章中讲解了如何使用Nacos作为服务注册中心注册。Nacos除了可以…

20 个实例玩转 Java 8 Stream

点击关注公众号,Java干货及时送达 先贴上几个案例,水平高超的同学可以挑战一下: 1. 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。 2. 统计员工的最高薪资、平均薪资、薪资之和。 3. 将员工按薪资从高到低排序&am…

2019新鲜出炉的BAT通关面试题 Java岗

点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 来源于公号:孤独烟 由于近期是互联网寒冬,然而烟哥的好友还是顶着重重压力出去面试,最终斩获无数offer。 在烟哥的沟通下,终于套得其中一套题…

史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)

转载请标明出处: https://www.fangzhipeng.com/springcloud/2017/06/02/sc02-rest-ribbon.html 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhipeng.com/springcloud/2017/06/02/sc02-rest-ribbon.html 最新Finchley版本: https:…

史上最简单的 SpringCloud 教程 | 终章

转载请标明出处: http://blog.csdn.net/forezp/article/details/70148833 本文出自方志朋的博客 扫码关注有惊喜 (转载本站文章请注明作者和出处 方志朋的博客) 个人博客纯净版https://www.fangzhipeng.com/spring-cloud.html 错过了这一篇…