今日头条这么牛逼,用了什么技术?
今日头条创立于2012年3月,到目前仅 6 年时间。从十几个工程师开始研发,到上百人,再到200余人。产品线由内涵段子,到今日头条,今日特卖,今日电影等产品线。
JAVA高级架构群:https://jq.qq.com/?_wv=1027&k=5gMDouY
一、产品背景
今日头条是为用户提供个性化资讯客户端。下面就和大家分享一下当前今日头条的数据(据内部与公开数据综合):
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频道的动作。另外还包括用户订阅的频道,比如电影,段子,商品等。
这里推荐一下我的JAVA架构学习交流群:614478470 ,想要学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频都有整理,送给每一位JAVA小伙伴,有想学习JAVA架构的,或是转行,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。
4、推荐系统
推荐系统,也称推荐引擎。它是今日头条技术架构的核心部分。包括自动推荐与半自动推荐系统两种类型:
1 自动推荐系统
- 自动候选
- 自动匹配用户,如用户地址定位,抽取用户信息
- 自动生成推送任务
这时需要高效率,大并发的推送系统,上亿的用户都要收到。
2 半自动推荐系统
- 自动选择候选文章
- 根据用户站内外动作
头条的频道,在技术侧划分的包括分类频道、兴趣标签频道、关键词频道、文本分析等,这些都分成相对独立的开发团队。目前已经有300+个分类器,仍在不断增加新的用户模型,原来的用户模型不用撤消,仍然发挥作用。
在还没有推出头条号时,内容主要是抓取其它平台的文章,然后去重,一年几百万级,并不太大。主要是用户动作日志收集,兴趣收集,用户模型收集。
资讯App的技术指标,比如屏幕滑动,用户是不是对一篇都看完,停留时间等都需要我们特别关注。
5、数据存储
今日头条使用MySQL或Mongo持久化存储+Memched(Redis),分了很多库(一个大内存库),亦尝试使用了SSD的产品。
今日头条的图片存储,直接放在数据库中,分布式保存文件,读取的时候采用CDN。
6、消息推送
消息推送,对于用户: 及时获取信息。对运营来讲,能够 提⾼⽤用户活跃度。比如在今日头条推送后能够提升20%左右的DAU,如果没有推送,会影响10%左右 DAU(2015年数据)。
推送后要关注的ROI:点击率,点击量。能够监测到App卸载和推送禁用数量。
今日头条推送的主要内容包括突发与热点咨讯,有人评论回复,站外好友注册加入。
在头条,推送也是个性化:
- 频率个性化
- 内容个性化
- 地域
- 兴趣
比如:
按照城市:辽宁朝阳发生的某个新闻事件,发给朝阳本地的用户。
按照兴趣:比如京东收购一号店,发给互联网兴趣的用户。
推送平台的工具和选择,需要具备如下的标准:
- 通道,首先速度要快,但是要可控,可靠,并且节省资源
- 推送的速度要快,有不同维度的策略支持,可跟踪,开发接口要友好
- 推送运营的后台,反馈也要快,包括时效性,热度,工具操作方便
- 对于运营侧,清晰是否确定推荐,包括推送的文案处理
因此,推送后台应该提供日报,完整的数据后台,提供A/B Test方案支持。
推送系统一部分使用自有IDC,在发送量特别大,消耗带宽较严重。可以使用类似阿里云的服务,可有效节省成本。
JAVA高级架构群:https://jq.qq.com/?_wv=1027&k=5gMDouY
7、延展思考
现在很多客户端都会需要推荐技术,比如电商、旅游类的商品推荐,也可以有娱乐头条、健康头条、体育头条等类似的应用,这些产品在技术侧的实现,包括用户,模型,数据都是相通的。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一次跳槽经历(阿里/美团/头条/网易/有赞...)
为啥跳槽 每次说因为生活成本的时候面试官都会很惊奇,难道有我们这里贵?好想直接给出下面这张图,厦门的房价真的好贵好贵好贵。。。 面试过程 (先打个广告,有兴趣加入JAVA高级架构群:https://jq.qq.com/?_wv=1027&k=5gMDouY) 面的是Java岗,总共面了7家公司,通过了6家。按自己的信心提升度我把面试过程分为上半场和下半场。 上半场 1.曹操专车 这是吉利集团下属子公司,已经是一家独角兽。一面中规中矩,没啥特别的。二面好像是个主管,隔了好几天,基本没问技术问题,反而是问职业规划,对加班有啥看法,有点措手不及,感觉回答的不好。 但是过几天还是收到HR的现场面试通知。现场是技术面加HR面,技术面被问了几个问题有点懵逼: a. zookeeper的watcher乐观锁怎么实现 b. 一个项目的整个流程 c. 说出一个空间换时间的场景 d. centos7的内存分配方式有什么不同 e. 你对公司有什么价值。 HR跟我说节后(那会再过两天就是清明)会给我消息,结果过了半个月突然接到他们的电话,说我通过了,给我讲了他们的薪资方案,没太大吸引力,再加上这种莫名...
- 下一篇
软件测试工具书籍与面试题汇总
简介 本文是https://github.com/china-testing/python-api-tesing/blob/master/books.md的节选。 欢迎转载,转载请附带此简介,谢谢! 试题 软件测试综合面试题(高级测试)-试题.pdf 软件测试综合面试题(python测试开发).pdf 自动化_性能_web测试 - 试卷.pdf 自动化试卷.pdf 软件测试 优质代码:软件测试的原则、实践与模式 - 2015.pdf 应用程序性能测试的艺术 - 2012.pdf 图片.png 移动App测试实战:顶级互联网企业软件测试和质量提升最佳实践 - 2015.pdf 腾讯Android自动化测试实战 - 2016.pdf 软件性能测试过程详解与案例剖析(第二版)- 2012.pdf 软件测试价值提升之路 - 2016.pdf Praxiswissen Softwaretest - Test Analyst und Technical Test Analyst Aus - 2015.pdf Google软件测试之道 - 2013.pdf 图片.png Advanced Softw...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果