Tumblr:150亿月浏览量背后的架构挑战
老的架构 Tumblr最开始是托管在Rackspace上的,每个自定义域名的博客都有一个A记录。当2007年Rackspace无法满足其发展速度不得不迁移时,大量的用户都需要同时迁移。所以他们不得不将自定义域名保留在Rackspace,然后再使用HAProxy和Varnish路由到新的数据中心。类似这样的遗留问题很多。 开始的架构演进是典型的LAMP路线: 最初用PHP开发,几乎所有程序员都用PHP 最初是三台服务器:一台Web,一台数据库,一台PHP 为了扩展,开始使用memcache,然后引入前端cache,然后在cache前再加HAProxy,然后是MySQL sharding(非常奏效) 采用“在单台服务器上榨出一切”的方式。过去一年已经用C开发了两个后端服务:ID生成程序和Staircar(用Redis支持Dashboard通知) Dashboard采用了“扩散-收集”方式。当用户访问Dashboard时将显示事件,来自所关注的用户的事件是通过拉然后显示的。这样支撑了6个月。由于数据是按时间排序的,因此sharding模式不太管用。 新的架构 由于招人和开发速度等原因,改为以JVM为中心。目标是将一切从PHP应用改为服务,使应用变成请求鉴别、呈现等诸多服务之上的薄层。 这其中,非常重要的是选用了Scala和Finagle。 在团队内部有很多人具备Ruby和PHP经验,所以Scala很有吸引力。 Finagle是选择Scala的重要因素之一。这个来自Twitter的库可以解决大多数分布式问题,比如分布式跟踪、服务发现、服务注册等。 转到JVM上之后,Finagle提供了团队所需的所有基本功能(Thrift, ZooKeeper等),无需再开发许多网络代码,另外,团队成员认识该项目的一些开发者。 Foursquare和Twitter都在用Finagle,Meetup也在用Scala。 应用接口与Thrift类似,性能极佳。 团队本来很喜欢Netty(Java异步网络应用框架,2月4日刚刚发布3.3.1最终版),但不想用Java,Scala是不错的选择。 选择Finagle是因为它很酷,还认识几个开发者。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |