热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

简述Feed流系统设计

简述Feed流系统设计本文侧重于概念普及,包括如下四部分:一、什么是Feed流;二、Feed流系统的技术特点;三、Feed流系统的架构设计;四、Feed流系统的广告统计。|0x00


简述Feed流系统设计


本文侧重于概念普及,包括如下四部分:


一、什么是Feed流;


二、Feed流系统的技术特点;


三、Feed流系统的架构设计;


四、Feed流系统的广告统计。


|0x00 什么是Feed流


单独说起“ Feed流 ”,绝大多数人都会很陌生,但如果说起微信朋友圈、微博、抖音,那么大家顺便感觉亲切多了。简单理解Feed流,是一种呈现推荐内容给用户,并能够持续更细的方式。


早期的Feed源于新闻界的RSS系统,用户可以选择订阅多个资讯源,由系统整合到一起,按时间顺序推送给用户。Facebook崛起之后,将这种模式进行了扩展,升级成了全新的News Feed,也就是订阅源不再是某个具体的新闻媒体,而是来自于生产内容的人,而内容也不再局限于用时间进行排序,而是可以推荐一些热门的内容或者是广告。差不多十年前,随着移动互联网的普及,微博、微信、头条、快手等基于内容推荐的公司兴起,Feed流这种按照 时间 + 推荐 进行流动展示内容的方式,非常的适合于手机等移动端,最终在与PC端的较量中脱颖而出,将新闻媒体彻底打入了旧时代的序列。


Feed流是 Feed + 流 ,Feed的本意是饲料,Feed流的本意就是有人一直在往一个地方投递新鲜的饲料,如果需要饲料,只需要盯着投递点就可以了,这样就能源源不断获取到新鲜的饲料。


Feed流有这么三个显著的特点:



  • 消息可靠性要求高 :由于关注、取关等操作的存在,系统中的用户关系是在一直变化中的不稳定状态,但不论关系如何变化,用户能看到的信息是不能出现错误的,以微信朋友圈为例:如果我删除好友后,还能继续看到他/她的朋友圈,那么这个问题可能就不仅仅是简单的技术问题了……


  • 多账号的互动模式 :推荐的数据不仅可以来自于关注的大V,或者是好友,也可以基于热门的内容,或者是系统的推荐;


  • 对广告主更友好 :广告是基于推荐的方式展示给用户,相对于搜索等广告,不仅展示形式更加丰富,用户的触达链路也更短,广告转化率提升明显。



|0x01 Feed流系统的技术特点


首先普及一些基础的概念:



  • Feed流 :基于Feed+流的概念组合,Feed可以简单理解为 消息 的意思,比如一条朋友圈、或者是一条微博,流是持续展示的意思,例如微博的无限下拉更新,总要有内容展示给用户;


  • Timeline :Feed流的一种类型,意为“ 时间线 ”,按发布的时间顺序排序,先发布的先看到,后发布的排列在最顶端,最早由Twitter普及;


  • Rank推荐系统使用的排序权重 ,一般讲用户可能喜欢这条消息的权重越高,Rank就越靠前,也可以理解为用户最喜欢内容的TopN合集,对于CTR的提升帮助明显;


  • 收件箱 :用来存储消费最终接收到的一个 Feed流列表



Feed流的元数据:由于Feed通常需要存储和计算海量的信息,因此收件箱通常不会存储全部的Feed信息,而是会把关键信息提取出来,以降低存储和计算的数据量, 这些被提取出来的关键信息,就是“元数据” 。例如一个视频,我们只会存储它的ID、类别、格式、长度、大小、播放地址等信息;一条新闻,只会存储它的ID、类别、标题、来源、访问地址等信息。


Feed流【生产】的过程:



  • 首先,Feed流系统的用户或者机构 产生内容 ,系统将内容收录到内容库中;


  • 其次,系统根据已有的 业务规则 ,将新增的内容,提交到 分发中心


  • 最后,分发中心根据要投递的名单列表,向对应的账号收件箱中,插入Feed的 索引信息



Feed流【获取】的过程:



  • 从账号收件箱中获取 增量Feed信息


  • 根据时间戳、好友关系、自定义等条件,过滤要显示的数据,并 进行排序


  • 用户 消费 收件箱里的信息内容。



Feed流实现的三种方式:



  • 拉模式 :发布者的内容仅仅写入自己的发件箱里,当用户访问自己的收件箱时,首先遍历这个用户的关系列表,然后再从关系列表的发件箱里读取数据,最后按照规则进行过滤和排序,这种方式的 优点是 写数据快,但读数据就要慢很多 ,适合于大V模式;


  • 推模式 :发布者的内容不仅写入自己的发件箱里,通过批处理任务,还需要写到对应关系人的收件箱里,当用户访问自己的收件箱时,直接从自己的收件箱里读取数据,最后按照规则进行过滤和排序,这种方式的 优点是写数据很慢,但读数据就要快很多 ,适合于关系社交;


  • 推拉结合模式 :大V与普通用户分开维护。



|0x02 Feed流系统的架构设计


用阿里云开发者社区的话讲:Feed流本质上是一个数据流,是 将 “N个发布者的信息单元” 通过 “关注关系” 传送给 “M个接收者”



这层抽象的概念,总结了我们设计Feed流的两个核心:即 存储系统、推送系统


存储系统目的有两个, 一个是数据不丢失,一个是数据可以永久保存 。早期微的系统使用Redis内存数据库来提高产品的响应速度,但由于成本增长非常快,因此总要有一些其他的方案来进行替代。Feed流系统虽然数据量级很大、对数据的可靠性要求很高,但它有一个很显著的特点,就是“ 关系极其简单 ”,这对于我们的技术选型提供了实现的思路。针对这种情况,我们可以设计如下的三种解决方案:



  1. Mysql分库分表方案 ,非常稳定可靠,如果数据量级不大,采用这种方案能够有效的降低开发时间及运维时间,由于发展历史很长,技术也很成熟;


  2. NoSQL方案 ,典型的代表是 HBase ,key-value型的数据库天然的适合二元关系场景,能够存储海量的数据,由于发展历史也很长了,因此可靠性是有保障的,但HBase的问题在于需要一定的运维成本;


  3. 商业方案TableStore (表格存储)是阿里云2013年推出的一款分布式数据库,存储账号关系是一个比较好的选择。



推送系统目的是解决消息的时效性。Feed流系统有一个很显著的特点,即 读写是非常不平衡的 ,绝大多数情况下, 用户都在“读”,而内容只有少量的人来“写” 。因此,推送系统会面临如下几个方面的压力:



  • TPS/QPS是千万级的;


  • 读写操作对于延迟非常敏感;


  • 消息严格意义上是不能丢失的;


  • 对于主键自增有很强烈的诉求。



因此,推送系统最好是一个 性能不错 ,又能 主键自增 的系统,而 内存数据库Redis 就能比较好的满足这些要求。但Redis由于属于内存数据库,成本非常好,而且Redis单机的特性,会带来不小的运维复杂性。对于工程师而言,思考的就是如何尽可能的少向Redis中写数据,比如只计算ID的数据,然后去存储系统获取Feed的信息。


|0xFF Feed流系统的广告统计


Feed流系统的广告主要设计为四个部分: 流量端(内容生产)、投放端(广告主投放设置)、检索端(广告策略设定)、展示端(广告数据的展示)


一次正常的广告投放流程,是广告主首先设定好对应的广告素材,当流量端有资源请求时,检索端拉取广告素材,进行策略的匹配,下发给展示端,完成广告的展示、点击、计费与转化过程。


因此我们统计Feed的广告,考虑的是如下几个指标:



  • 请求量 :检索端请求投放端的次数;


  • 下发量 :检索端下发给展示端的次数;


  • 展示量 :广告展示了多少次;


  • 点击量 :广告点击了多少次;


  • 计费量 :本次广告收了广告主多少钱。



自上向下就是一个完整的转化漏斗模型。


通常情况下,Feed流广告有两大类: 品牌广告和效果广告 。品牌广告的目的是为了提高品牌曝光度,让更多人记住。效果广告的目的是为了通过广告刺激用户行为,提升转化率。这两类由于展示方式的不同,在数据的埋点上会有一定的差异,统计规则就不再赘述。


最后,聊一下广告数据的事情, 从用户体验的角度来说,没有广告才是最佳的体验,但是从商业变现角度来说,越多的广告带来的收益越高,才有更多的钱去做更多的事情 。这两者之间看似的相互矛盾关系,是为了产品可以走的更远,双方都有有所退步, 数据起到的作用,就是尽可能的让广告内容匹配用户的预期,在尽可能保证用户体验的同时又可以实现一定程度的商业变现




推荐阅读
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 【转】腾讯分析系统架构解析
    TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ... [详细]
  • 黄东旭: 关于基础软件产品价值的思考
    黄东旭:关于基础软件产品价值的思考-好久没写东西了,正好趁着春节的节后综合症发作写写文章热身一下,记得前几年偶尔会写一些关于TiDB产品功能解读的文章,TiDB5.0发了那么长时间 ... [详细]
  • 《Python3 网络爬虫开发实战》:高效实用的 MongoDB 文档存储
    NoSQL,全称NotOnlySQL,意为不仅仅是SQL,泛指非关系型数据库。NoSQL是基于键值对的,而且不需要经过SQL ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
  • 文件txt-数据库mysql-纯内存数据库SAP-HANA-内存数据库redis-分布式数据库hbase一、数据存储选型要点容量成本访问速度 ... [详细]
  • #python没有类似于java和C#的接口类(interface),需要使用抽象类和抽象方法来实现接口功能#!usrbinenvpython#_*_coding ... [详细]
  • hbase伪集群搭建
    hbase数据存储有三种跑法,跑在本地磁盘上、跑在伪分布式上、跑在完全分布式上--------额。。。官网的文档挺坑爹的,结合官网、百度、谷歌的各种 ... [详细]
  • 传统|同类_Spring Boot进阶:原理实战与面试题分析读后感
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringBoot进阶:原理实战与面试题分析读后感相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
討厭香菇_748
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有