完全用nosql轻松打造千万级数据量的微博系统

微博feed系统的push和pull模式和时间分区拉模式架构探讨

关于如何构建一个微博型广播

关于如何构建一个微博型广播2

用 mongodb 储存多态消息/提醒类数据

构建高性能的微博系统-再谈新浪微博架构

新浪微博Cache设计@TimYang.pdf

 
 
 
 
 
 
 
最后这篇文章写得很不错的,也基本讲清楚了Feed系统的方方面面的考虑了,基本涉及到了一个Feed系统从小发展到大的全过程了!还没有完全领会到它为用Cassandra替换Redis的理由,或者他还是考虑把Casandra的作为半缓存的结构来替换的,加大Cassandr的内存,可以缓存大量的热数据,当然它的好处是冷热数据都可以完美的持久化,但是数据的一致性处理起来有些麻烦,毫无疑问他会是采用R+W>N的模式,但是无论写多份还是读多份都是有些难于取舍的,Feed系统的写入量本来就很大,如果写入多份的话会大大降低写入的性能,另外,存在Feed的系统,无一例外的是Feed都会是全系统的核心,提高读的性能会大大提高用户的体验,如果读取的时候读多份数据会相对降低性能,到底取舍哪一个呢?我这里光是凭空想象,无法取舍,具体还可以看性能测试来说法,如果有同学做过这方面的压测,还望留言告知下!
 
腾讯微博主要使用拉模型,只有未读的微博数是使用推得模式实现的!拉模型的问题在于一个人跟随了几百或者上千的人的时候,去看关注的人所发的消息要进行多个层次的Map/Reduce才能得到结果,需要非常高效的获取最新Feed的方式以及快速的聚合算法,只用Memcache\Redis之类的从性能上是比较难于实现的,需要从数据层面或者是缓存的层面都进行聚合,再在应用层面进行聚合,技术难度比较大!这个模式属于知易行难,绝大多数公司不具备构建基础设施的能力!

新浪微博使用推拉结合的方式,大号不推送,小号则推送,看Feeds的时候,需要将推过来的Feeds索引数据与关注的大号的Feed进行聚合,小小的牺牲下拉的性能一下子就将大号的推送问题解决掉了!

对于稍微小些的网站,比如Pinterest和花瓣都使用推的方式来实现,PInterest的直接在Redis中保存500个最新的索引信息,使用Python脚本定时来扫描,保证缓存的索引信息始终只保存最新的500个,老的信息则直接丢弃掉,花瓣则将老索引存储到LevelDBA中去了!

Pinterest网站的内容信息缓存在memcache中,关系信息则缓存到Redis中,持久化方式保存!对于那种大号的粉丝,亦或是关注的人数太多则需要将关系数据拆分之后再缓存起来,对于动态变化的部分则需要独立存放,在使用的时候需要将两部分数据聚合,在可变部分达到一定长度的时候,需要与不变的部分进行合并!

当然推送的时候,所有的网站都使用异步的方式来实现!

Feed系统架构资料收集的更多相关文章

  1. Feed系统架构资料收集(转)

    add by zhj:有些链接已经失效,后续会修改. 原文:http://blog.csdn.net/zhangzhaokun/article/details/7834797 完全用nosql轻松打造 ...

  2. 人人网张铁安:Feed系统架构分析(转)

    原文:http://www.csdn.net/article/2010-07-26/277273 继成功举办首期TUP活动后,日前在北京丽亭华苑酒店鸿运二厅,由CSDN和<程序员> 杂志联 ...

  3. “Django用户认证系统”学习资料收集

    首推追梦人物——Django用户认证系统 待续……

  4. 数据人看Feed流-架构实践

    背景 Feed流:可以理解为信息流,解决的是信息生产者与信息消费者之间的信息传递问题.我们常见的Feed流场景有:1 手淘,微淘提供给消费者的首页商品信息,用户关注店铺的新消息等2 微信朋友圈,及时获 ...

  5. ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念

    ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 由于工作事 ...

  6. 海量日志实时收集系统架构设计与go语言实现

    日志收集系统应该说是到达一定规模的公司的标配了,一个能满足业务需求.运维成本低.稳定的日志收集系统对于运维的同学和日志使用方的同学都是非常nice的.然而这时理想中的日志收集系统,现实往往不是这样的. ...

  7. Flume日志收集系统架构详解--转

     2017-09-06 朱洁 大数据和云计算技术 任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息.在没有分析方法之前,这些日志存储一段时间后就会被清理.随着技术的发展和 ...

  8. 基于Flume的美团日志收集系统 架构和设计 改进和优化

    3种解决办法 https://tech.meituan.com/mt-log-system-arch.html 基于Flume的美团日志收集系统(一)架构和设计 - https://tech.meit ...

  9. 系统架构师考试知识点mp3资料免费下载

    场景 系统架构设计师考试,属于全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个高级考试. 系统架构设计师考试,考试不设学历与资历条件,不论年龄和专业,考生可根据自己的技术水平,选 ...

随机推荐

  1. MySQL里面的子查询实例

    一,子选择基本用法 1,子选择的定义 子迭择允许把一个查询嵌套在另一个查询当中.比如说:一个考试记分项目把考试事件分为考试(T)和测验(Q)两种情形.下面这个查询就能只找出学生们的考试成绩 selec ...

  2. 自定义cell的步骤(每个cell的高度不一样,每个cell里面显示的内容也不一样)

    1.新建一个继承自UITableViewCell的子类  2. 在initWithStyle:方法中进行子控件的初始化 1> 将有可能显示的所有子控件都添加到contentView中 2> ...

  3. Nginx变量的实现机制

    Nginx有两种定义变量的方式,一种是在配置文件中使用set指令(由rewrite模块提供支持),另一种是在模块内定义变量. 变量相关结构体: struct ngx_http_variable_s { ...

  4. 平衡二叉树,AVL树之图解篇

    学习过了二叉查找树,想必大家有遇到一个问题.例如,将一个数组{1,2,3,4}依次插入树的时候,形成了图1的情况.有建立树与没建立树对于数据的增删查改已经没有了任何帮助,反而增添了维护的成本.而只有建 ...

  5. spring mvc静态资源文件的引用

    在页面的<title>下 <link rel="stylesheet" href="<%=request.getContextPath()%> ...

  6. ProcDump

    https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

  7. HttpResponse对象

    为了响应客户端的请求,同样定义了代表响应的类:HttpResponse类,它也定义在命名空间System.Web下,提供向客户端响应的方法和属性. HttpResponse常用属性和方法 响应对象用于 ...

  8. chown命令

    改变一个文件的所有者和组 1.命令格式: chown [选项]... [所有者][:[组]] 文件... 例子: komiles@iUbuntu:~/study/wordpress$ lltotal ...

  9. stripslashes — 反引用一个引用字符串

    stripslashes (PHP 4, PHP 5) stripslashes — 反引用一个引用字符串 Report a bug  说明 string stripslashes ( string  ...

  10. Hibernate4 执行存储过程

    Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 当Hibernat ...