Tumblr 架构设计(1)

2013 年 5 月 31 日5420

最近的新闻中我们得知雅虎11亿美元收购了Tumblr:Yahoo bought Tumblr for $1.1 billion. 你也许会发现Instagram也被Facebook重金收购的介绍. 这是一个巧合吗?这就由你来判断吧。

为什么雅虎会收购Tumblr? 这场交易中的商业价值我可能无法判断,但是如果你对Tumblr的技术方面有所了解,你一定会为Tumblr竖起大拇指. 为什么这么说呢,请接着读... Tumblr每月页面浏览量超过150亿次,已经成为火爆的博客社区。用户也许喜欢它的简约、漂亮,并且它对用户体验强烈的关注,或是友好而忙碌的沟通方式,总之,它深得人们的喜爱。

每月超过30%的增长当然不可能没有挑战,其中可靠性问题尤为艰巨。每天5亿次浏览量,峰值每秒4万次请求,每天3TB新的数据存储,并运行于超过1000台服务器上,所有这些帮助Tumblr实现巨大的经营规模。

创业公司迈向成功,都要迈过危险的迅速发展期这道门槛。寻找人才,不断改造基础架构,维护旧的架构,同时要面对逐月大增的流量,而且曾经只有4位工程师。这意味着必须艰难地选择应该做什么,不该做什么。这就是Tumblr的状况。好在现在已经有20位工程师了,可以有精力解决问题,并开发一些有意思的解决方案。

Tumblr最开始是非常典型的LAMP应用。目前正在向分布式服务模型演进,该模型基于Scala、HBase、Redis、Kafka、Finagle,此外还有一个有趣的基于Cell的架构,用于支持Dashboard.现在的重点被放在了解决他们PHP程序中的短期问题,找出问题,并正确的使用服务化去解决他们. Tumblr目前的最大问题是如何改造为一个大规模网站。系统架构正在从LAMP演进为最先进的技术组合,同时团队也要从小的创业型发展为全副武装、随时待命的正规开发团队,不断创造出新的功能和基础设施。下面就是Blake对Tumblr系统架构情况的介绍。

Tumblr网址:http://http://www.zjjv.com///

统计

软件

硬件

500 台 Web 服务器

200 数据库服务器 (大多数是备用池)

    47 个池

    30 个分区

构架

与其他社交网站不同的是,Tumblr有其独特的使用模式。

Tumblr目前运行在一个托管数据中心中,已在考虑地域上的分布式构架。

    Tumblr平台由两个组件构成:公共Tumblelogs和Dashboard

      公共Tumblelogs与博客类似,并非动态,易于缓存

      Dashboard是类似于Twitter的时间轴,用户由此可以看到自己关注的所有用户的实时更新。

        与博客的扩展性不同,缓存作用不大,因为每次请求都不同,尤其是活跃的关注者。

        而且需要实时而且一致,文章每天仅更新50GB,跟帖每天更新2.7TB,所有的多媒体数据都存储在S3上面。

      大多数用户以Tumblr作为内容浏览工具,每天浏览超过5亿个页面,70%的浏览来自Dashboard。

      Dashboard的可用性已经不错,但Tumblelog一直不够好,因为基础设施是老的,而且很难迁移。由于人手不足,一时半会儿还顾不上。

老的Tumblr构架

Tumblr最开始是托管在Rackspace上的,每个自定义域名的博客都有一个A记录。当2007年Rackspace无法满足其发展速度不得不迁移时,大量的用户都需要同时迁移。所以他们不得不将自定义域名保留在Rackspace,然后再使用HAProxy和Varnish路由到新的数据中心。类似这样的遗留问题很多。

开始的架构演进是典型的LAMP路线

Dashboard采用了“扩散-收集”方式。当用户访问Dashboard时将显示事件,来自所关注的用户的事件是通过拉然后显示的。这样支撑了6个月。由于数据是按时间排序的,因此sharding模式不太管用。

新的构架

由于招人和开发速度等原因,改为以JVM为中心。

目标是将一切从PHP应用改为服务,使应用变成请求鉴别、呈现等诸多服务之上的薄层。

选择了Scala 和 Finagle

此外,还开发了一个公用服务框架:

22台Redis服务器,每台的都有8-32个实例,因此线上同时使用了100多个Redis实例。

1 2 下一页>>

内容导航

第 1 页:为什么雅虎会收购Tumblr? 第 2 页:内部通讯管道(Firehose)


原文:Tumblr 架构设计(1) 返回开发首页

0 0