IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Staircar:Tumblr的Redis集群控制层

Elton's Blog 2011-07-30 21:40:56 累计浏览 4,093 次
本机暂存

原图已失效

Tumblr是世界上最流行的轻博客服务,其用户量在最近的一次统计中已经达到2090万,超过了全球最大的博客服务WordPress。而我们今天要介绍的是Tumblr通知系统的架构,其通知系统由一个叫Staircar的轻量级HTTP服务器和其下层的大规模Redis集群组成。

应用分析

在Tumblr初期,其通知系统是由MySQL+Memcached的传统架构组成,但是由于通知系统庞大的添加操作,导致MySQL负担非常大,经常搞得InnoDB global transaction max(1024)都超出了。于是他们打算重新构建消息系统。首先他们分析了消息系统的应用特点:

  • 按时间排序
  • 唯一性,每一条消息都是唯一的
  • 读写比大概是 60%/30%
  • 每个用户的消息条数一定
  • 数据按用户划分,每个用户只能读自己的消息

架构

基于上面应用特点的考虑,Tumblr选择了Redis的sorted sets作为其数据存储。

他们的存储方式是:

  • 给每个用户分配一个sorted sets,其中每一项保存一条通知
  • 每条通知以时间戳为score在sorted sets中进行排序
  • 超出100条通知后进行trim操作

Tumblr的数据量:2300万个BLOG,每个BLOG 100条消息,每条消息体大概160bytes。

响应速度:大概每秒提供7,500次请求,每次请求的响应时间小于5ms。

考虑到容灾性及可能快速增长的数据量,Tumblr打算采用preshard的方式来架构他们的Redis集群,于是他们开发了Staircar(一个提供HTTP服务的Redis集群调度管理组件)。下面是他们的通知系统架构图:

原图已失效

实际上在开发Staircar前,他们考查了一些其它的类似功能的产品,但都不能满足他们所有需求(或者说闲杂功能过多)。

性能

Staircar由C语言写成,以libevent为网络驱动层,提供JSON格式的RESTFul接口,其性能超出了Tumblr工程师们的想象,其在最高峰时的响应时间也在5ms以下,其性能测试结果是大概能处理每秒30,000次左右的请求。下面是其性能测试图,从图上可以看到,其绝大部分请求(红色区域)的响应时间在3-4ms之间:

原图已失效

来源:engineering.tumblr.com

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,895)
  2. redis源代码分析 - persistence (累计阅读 32,229)
  3. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  4. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  5. libcurl的使用总结(二) (累计阅读 15,083)
  6. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,301)
  7. HTTP协议Keep-Alive模式详解 (累计阅读 12,104)
  8. Redis消息队列的若干实现方式 (累计阅读 12,088)
  9. 你必须了解的Session的本质 (累计阅读 11,441)
  10. 基于Redis构建系统的经验和教训 (累计阅读 10,522)