今日头条 mysql_今日头条的核心架构解析

一、产品背景

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

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,在发送量特别大,消耗带宽较严重。可以使用类似阿里云的服务,可有效节省成本。

7、延展思考

现在很多客户端都会需要推荐技术,比如电商、旅游类的商品推荐,也可以有娱乐头条、健康头条、体育头条等类似的应用,这些产品在技术侧的实现,包括用户,模型,数据都是相通的。

作者:杜江。21CTO(21cto.com)社区创始人。多年架构与管理经验, 原赶集网创始工程师,正和岛CTO以及今日头条今日特卖技术负责人。 著有《PHP5与MySQL5 Web开发技术详解》、《PHP5完全攻略》、《PHP与MySQL高性能应用开发》(即将出版)。

原文链接:http://mp.weixin.qq.com/s?__biz=MjM5NTg2NTU0Ng==&mid=2656593843&idx=1&sn=6a96c9221fd45d0f72c5a4c1c99a02e3&scene=0#wechat_redirect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译原理语法分析_斯坦福大学《编译原理》学习记录 - 第二章:语法分析器

05-01: Introduction to Parsing 语法分析parser的作用:05-02: Context Free Grammars 上下文无关文法CFG(上下文无关文法)回答了一个字符串是否属于某语言:CFG的组成:终止符非终止符开始符生成式生成式production &am…

mysql中 视图的优缺点_数据库视图优缺点分析

视图作用是什么所谓视图(View)其实是执行查询语句后得到的结果,但这个查询结果可以仿真成数据表来使用,所以有人也称它为“虚拟数据表”,视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同的:数据表是实际…

mysql永远不用utf8_永远不要在 MySQL 中使用「utf8」

题图:by apple from Instagram本文出自极客邦「聊聊架构」公众号的编译。我自己当年也被这个问题坑过,当时并没有如此详细的分析文章。我觉得有责任再次分享一下,让更多人知道这个事情。程序员不帮助程序员,还能指望谁呢&#xff…

sqoop mysql parquet_Sqoop抽取Hive Parquet表数据到MySQL异常分析

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。Fayson的github:https://github.com/fayson/cdhproject1.问题描述在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取…

mysql按select导出_mysql 导出select结果到文本的几种方式

mysql -hxx -uxx -pxx -e "query statement" db > file例如:mysql -h127.0.0.1 -uroot -p000000 -e"select * from a" test > 1.txthost ip user password query statement database filename这样会输出列名信息,如…

mysql架设_主从mysql架设

主从mysql架设二进制安装mysqltar xvf mysql-5.1.46-linux-i686-glibc23.tar -C /usr/localcd /usr/localln -sv mysql-5.1.46-linux-i686-glibc23.tar mysqlcd mysqlgroupadd mysqluseradd -g mysql -s /sbin/nologin -M -r mysqlmkdir /mysql/datachown -R mysql.mysql /mysq…

日志文件和mysql同步到kafka_logstash_output_kafka:Mysql 同步 Kafka 深入详解

0、题记实际业务场景中,会遇到基础数据存在 Mysql 中,实时写入数据量比较大的情景。迁移至kafka是一种比较好的业务选型方案。而mysql写入kafka的选型方案有:方案一:logstash_output_kafka 插件。方案二:kafka_connect…

mysql max嵌套select_使用嵌套select子式 解决mysql不能叠加使用如max(sum())的问题

网上也有解决方案 有的有瑕疵 有的较复杂(mysql没有分析函数,可以使用变量实现) select sumScoreValue,studentid,studentName from sc_studentb, ( select sum (scoreValue) as sumScoreValue,studentid from sc_score group by studentid order by sumSc网上也有解…

mysql 检查记录存在_Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL...

我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录。这样的逻辑固然可以通过两条sql语句完成。SELECT COUNT(*) FROM xxx WHERE…

python linux调试_python调试

以下是我做调试或分析时用过的工具的一个概览。如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍。日志没错,就是日志。再多强调在你的应用里保留足量的日志的重要性也不为过。你应当对重要的内容打日志。如果你的日志打的足够好…

猜数字游戏python程序用函数guesssecret_Python-三、函数

3.1 def语句和参数def ...(...)语句用于定义一个函数,以便后面调用函数,如:def hello(name): #定义函数hello,变元nameprint(hello name) #打印hello变元namenamein input() #定义namein变量,从键盘取值并赋给namein…

java 命令行参数 _java命令行参数

原标题:java命令行参数命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了。这个就是程序的入口点。如图7.4所示:图…

java 最小生成树_图的最小生成树(java实现)

1.图的最小生成树(贪心算法)我两个算法的输出都是数组表示的,当前的索引值和当前索引对应的数据就是通路,比如parent[2] 5;即2和5之间有一个通路,第二个可能比较好理解,第一个有点混乱是什么?将一个有权图中的 所有顶…

中文分词工具 java_java读取中文分词工具(一)

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.RandomAccessFile;import java.util.StringTokenizer;/** 文本格式:已分词的中文文本&#xff0…

java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

本文实例分析了java中成员变量与局部变量区别。分享给大家供大家参考。具体分析如下:成员变量:在这个类里定义的私有变量,属于这个类。创建以及使用成员变量public class Person {String name;String Sex;int age;double Height;public stati…

java 自定义注解 生成json_用自定义注解实现fastjson序列化的扩展

这篇文章起源于项目中一个特殊的需求。由于目前的开发方式是前后端分离的,基本上是通过接口提供各个服务。而前两天前端fe在开发中遇到了一些问题:他们在处理字符串类型的时间时会出现精度丢失的情况,所以希望后台是以时间戳的形式返回给前端…

工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧。为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习。1 场景问题大家都知道&…

java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具

JNDI 注入利用工具介绍本项目为 JNDI 注入利用工具,生成 JNDI 连接并启动后端相关服务,可用于 Fastjson、Jackson 等相关漏洞的验证。本项目是基于 welk1n 的 JNDI-Injection-Exploit,在此项目的基础服务框架上,重新编写了攻击利用…

java保存登录信息_java – 保存登录详细信息(首选项)android

我有一个具有登录,注销功能的Android应用程序.登录表单包含用户名和密码以及登录按钮.我想在用户选中“记住我”复选框时保存用户名和密码.我的project.java文件如下所示:public class project extends Activity {private static final int IO_BUFFER_SIZE 4 * 102…

java堆和非堆_java 堆与非堆 内存

堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主…