`
zhengyun_ustc
  • 浏览: 82832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tumblr的消息通知系统是如何构建的

阅读更多

2012·2汇总

Tumblr是世界上最流行的轻博客服务之一,2007年成立。
 
一,MySQL+Memcached
初期,其通知系统是由 MySQL+Memcached 的传统架构组成。
缺点:
MySQL负担重,表象就是 MySQL 并发事务数常常达到 InnoDB global transaction 最大值,即只能有1023个并发事务(注:特指 mysql5.0/5.1存在的问题,5.5.4以上版本修复)。
 
二,Tumblr 消息系统应用特性
  • 按时间排序(Ordered by time)
  • 唯一性,每一条消息都是唯一的(Unique (no duplicate notifications))
  • 读写比大概是 60%/30%(Medium read/write ratio (60%/30%), mostly thanks to heavy caching)
  • 每个用户的消息条数一定(Fixed number of notifications per user)
  • 数据按用户划分,每个用户只能读自己的消息(Keyed by user, and read only by him/her)
 
三,修改后的架构:Staircar+Redis
Staircar 的轻量级HTTP服务器+ Redis 集群。
 
架构图为:
http://media.tumblr.com/tumblr_lollyoX2RT1qz6daf.png
 
四,性能指标要求
  • notification request volume (over 7,500/s)
  • data set size (23MM blogs, 100 notifications per blog, 160bytes per message),
  • response times (<5ms)
Staircar 实际达到的指标:
在最高峰时的响应时间也在5ms以下,其性能测试结果是能处理每秒30,000次左右的请求。
 
五,引入 redis 的 presharding 思路
关键词:presharding
缺点是,引入了运维复杂度,导致运维管理成本增加;要用好 Presharing 方案,必须有相应的自动化运维手段相配套,比如:Redis实例的启停脚本、能检查Redis状态的运维监控手段。
优点是,更好的性能,更简单的容错,更能适应业务增长。
Presharding 思路大致的描述为:
假设有N台主机,每台主机上部署M个实例,整个系统有T = N × M个实例;

由于一个Redis实例的资源消耗非常小,所以一开始就可以部署比较多的 Redis 实例,比如128个实例;
在前期业务量比较低的时候,N可以比较少,M比较多,而且主机的配置(CPU+内存)可以较低;
在后期业务量较大的时候,N可以较多,M变小。

总之,通过这种方法,在容量增长过程可以始终保持Redis实例数(T)不变,所以避免了重新 Sharding 的问题。

拆分过程如下:

  1. 在新机器上启动好对应端口的 Redis 实例。
  2. 配置新端口为待迁移端口的从库。
  3. 待复制完成,与主库完成同步后,切换所有客户端配置到新的从库的端口。
  4. 配置从库为新的主库。
  5. 移除老的端口实例。
  6. 重复上述过程迁移好所有的端口到指定服务器上。

以上拆分流程是 Redis 作者提出的一个平滑迁移的过程,不过该拆分方法还是很依赖 Redis 本身的复制功能的,如果主库快照数据文件过大,这个复制的过程也会很久,同时会给主库带来压力。所以做这个拆分的过程最好选择为业务访问低峰时段进行。

 

六,一些细节
来自于 Tumblr 开发者的一些信息:
  • Machine failures:每一个 Redis 实例都有自己的 slave,这样确保可以做 failover。
  • Performance:Staircar 没有 redis 快。但它最主要的目的是,让 redis 基础设施对任何客户端都是透明的。
  • Early Optimization:在一个庞大的基础架构中,你会面对很多局部性细节,很慢的客户端,机器宕机,其他运维问题等。我们感兴趣的是在 redis 实例池之上,构建一个高性能代理。
 
参考资源:
1)2011,tumblr官方博客,Staircar: Redis-powered notifications
2)上文的中文译稿
3)2011,antirez,Redis Presharding 
4)2011,InfoQ,Redis复制与可扩展集群搭建,谈及一种基于MySQL作为主库,Redis作为高速数据查询从库的异构读写分离的方案:
http://www.infoq.com/resource/articles/tq-redis-copy-build-scalable-cluster/zh/resources/image3.jpg
 

赠图一枚:
http://ww1.sinaimg.cn/bmiddle/5411bc3bjw1e16qi8eb26j.jpg
分享到:
评论

相关推荐

    Get Tumblr pic下载Tumblr图片.rar

    标题中的"Get Tumblr pic下载Tumblr图片.rar"表明这是一个与从Tumblr平台下载图片相关的软件或工具。这个工具可能设计用于帮助用户方便地从Tumblr博客中批量下载他们感兴趣或需要的图片,尤其是在用户想要备份自己...

    tumblr图片批量下载工具

    【tumblr图片批量下载工具】是一款专为喜爱tumblr平台的用户设计的实用软件,它允许用户方便快捷地批量下载tumblr上的图片。这个工具极大地简化了从tumblr收集和保存图片的过程,对于那些需要备份自己的博客内容或者...

    Python-用于处理Tumblr博客和Tumblr备份的Python工具

    【Python-用于处理Tumblr博客和Tumblr备份的Python工具】 在IT行业中,Python作为一种高级编程语言,因其简洁的语法和强大的库支持而广受欢迎。当涉及到社交媒体数据处理时,Python也表现出色,尤其在处理像Tumblr...

    tumblr下载工具

    【Tumblr下载工具】是一种专为用户设计的实用软件,旨在帮助用户批量下载来自Tumblr博客平台的图片。这款工具极大地简化了从Tumblr获取内容的过程,尤其是对于那些希望保存大量图片或者进行备份的用户来说,它提供了...

    Tumblr最新版apk Tumblr_v14.2.0.apk

    Tumblr最新版apk下载,持续跟新,记得收藏。如果没有更新,可以私信我 Tumblr最新版apk Tumblr_v14.2.0.apk

    tumblr爬虫

    python写的tumblr爬虫~~~~~~~~~~~~~~~~~~。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。~~~~好东西

    Tumblr视频下载

    在这种背景下,“Tumblr视频下载”成为了一个重要的话题。Tumblr是一个流行的社交媒体平台,用户可以发布多种类型的内容,包括视频。然而,由于版权和平台政策的限制,直接下载这些视频并不总是直观或简单的。因此,...

    仿Tumblr动画

    "仿Tumblr动画"是一个专为实现类似社交平台Tumblr的动态效果而设计的项目。这个项目基于已有的仿Path动画进行改造,主要目的是创造出一个向上飞出的视觉效果,为用户带来新颖且吸引人的交互体验。 首先,我们需要...

    Tumblr抓取

    "Tumblr抓取"是指利用编程技术针对Tumblr社交平台上的用户个人站点进行数据采集,特别是该用户的图片和视频资源。这个过程通常涉及到网络爬虫的开发,以便批量地获取并存储所需数据。 首先,我们要理解什么是网络...

    tumblr资源下载

    一键获取Tumblr站主所有图片、视频下载地址

    Tumblr Menu

    通过研究和理解"Tumblr Menu"的源代码,开发者可以学习到如何使用CoreAnimation来构建自定义的UI控件,提高iOS应用的用户体验。此外,这个项目还展示了如何将动画、手势识别和界面布局相结合,以创造出具有吸引力的...

    Tumblr视频/图片资源嗅探下载器

    这是一个Android端对网页内的图片/视频进行探测的一个小应用,目前可用于Tumblr的资源下载。但通过自己编写资源探测脚本,可以支持任意网页的资源嗅探工作。原理比较简单,详细代码见:...

    Python-一个专门爬取tumblr视频的爬虫

    这个名为"Python-一个专门爬取tumblr视频的爬虫"的项目,旨在利用Python技术从tumblr网站上抓取视频内容。下面我们将深入探讨这个项目涉及的关键知识点。 首先,我们需要了解Python中的网络爬虫基础。网络爬虫是...

    Tumblr照片通知「Tumblr Photo Notify」-crx插件

    对于想要每次看照片的人。 此扩展程序显示来自tumblr博客的照片(如通知)。 您可以选择有关tumblr博客的特定URL,并在选项页面中更改通知时间。 支持语言:English

    Tumblr 架构设计

    - **Kafka**:高吞吐量的分布式发布订阅消息系统,用于处理实时数据流。 - **Finagle**:由Twitter开源的RPC框架,支持多种协议,如HTTP、Thrift、Memcached等,用于构建高效、可靠的微服务架构。 #### 三、从初创...

    Tumblr资源下载工具

    由于Tumblr作为一个全球知名的社交博客平台,用户们在这里分享了大量的创作内容,这款工具应运而生,旨在帮助用户方便地备份或保存他们在 Tumblr 上关注的博主或者自己发布过的所有媒体文件。 首先,我们来看一下...

    Python-一个Tumblr资源工具用于获取图片或视频信息

    【Python-一个Tumblr资源工具用于获取图片或视频信息】 在IT行业中,Python作为一种高级编程语言,因其简洁明了的语法和强大的库支持而备受青睐。本项目是一个专门为 Tumblr 平台设计的工具,旨在帮助用户方便地...

    高仿Tumblr热度-滚动条数-JQScrollNumberLable

    JQScrollNumberLabel:仿tumblr热度滚动数字条数, 一个显示数字的控件,当你改变其数字时,能够有滚动的动画,同时动画和位数可以限制,动态创建和实例化可选,字体样式自定义等。博客教程:...

    轻博客Tumblr大爆炸 模仿者众多.docx

    - **与Facebook的差异**:Facebook侧重于社交互动和个人关系网的构建,而Tumblr更专注于内容创作和分享。在Tumblr上,用户的身份更多的是通过其分享的内容来定义。 #### 四、知名人士的认可 - **约翰·梅尔的观点*...

    tumblr.js, Tumblr API的JavaScript客户端.zip

    tumblr.js, Tumblr API的JavaScript客户端 tumblr.js 的官方JavaScript客户端库。 请查看这里的详细文档。安装从 npm 安装这里软件包:npm install --save tumblr.js用法身份验证不同的API方法使用不同类型的认

Global site tag (gtag.js) - Google Analytics