写点什么

《天空之城》助 Twitter 刷新纪录,新架构功不可没

  • 2013-08-25
  • 本文字数:1461 字

    阅读完需:约 5 分钟

本月,宫崎骏大师的《天空之城》在NTV 迎来其第14 次电视重播,剧情发展到高潮之时,“Blase 祭”也将Twitter 的TPS(Twitters per second)推上了新的高度——143,199 TPS,Twitter 一般每天会发出5 亿多条微博,平均5700 TPS,新纪录是平均值的25 倍。

Twitter 的“大鲸鱼”曾为人津津乐道,每次 Twitter 出现故障都会挂出大鲸鱼,但细心的朋友一定已经注意到“大鲸鱼”的出镜率越来越低了。自 2010 年世界杯后,Twitter 便开始了大刀阔斧的架构重构,如今的 Twitter 早已不再是那个全球最大的基于 Ruby on Rails 的 Web 站点了。Raffi Krikorian 在 Twitter 的官方博客中介绍了新架构是如何应对 14.3 万 TPS 这一高峰的。

在开始重构前,他们为自己定下了三个目标:

  • 新架构能在性能、效率、可靠性上有所突破,即改善用户体验到的延时,减少 10 倍的服务器数量,在故障面前,基础设施能做到故障隔离。
  • 实现一个松耦合的面向服务的模型,鼓励系统级的封装和模块化。
  • 能更快地让新功能发布到线上。

Twitter 曾经是 Rails 的“金字招牌”,发展初期大量使用了 Rails,但后来 Twitter 从 Ruby 转向了 Scala,一度让人们认为 Ruby 的性能问题阻碍了 Twitter 的发展,而 Linkedin Iron.io 从 Ruby 转向其他语言,也加重了大家对 Ruby 性能的顾虑。其实,Ruby 并非幕后真凶,Rails 才是!为了提供一站式的 Web 建站设施,Rails 默认提供了太多的功能,正如范凯在其博客中说的那样:

Rails 适合开发 Website,但不太适合 Web Service,而移动时代的发展趋势就是:未来服务器端会更多的使用 Web Service 而不是 Website,这也意味着 Rails 将越来越不适合时代的发展。

虽然 Ruby 有点冤,但是 Twitter 却在从 Ruby 到 JVM 的转型中实实在在地得到了好处。Twitter 在 JVM 上实现了它的搜索引擎、流 API 和社交图谱,这让其服务器的吞吐量从每秒处理 200 到 300 个请求提升到了 10000 到 20000 个请求,带来了 10 倍以上的性能提升。

SOA 化也是 Twitter 重构中的重点,从一个庞大的 Ruby 应用拆分为多个相对独立、边界清晰的小系统,专注于各自的服务,服务之间通过 Finagle 实现 RPC 调用。很多知名的互联网站点都有过类似的经历,比如大家所熟知的支付宝和阿里巴巴,支付宝的首席架构师程立就曾在InfoQ 上分享过自己在大规模SOA 系统上的经验;在RPC 框架方面,阿里巴巴也有自己的 Dubbo 框架

存储上,Twitter 对原先的 MySQL 主从结构做了调整,对数据库进行了拆分,在此期间,他们还开发了一系列的框架,比如 Gizzard Snowflake 。淘宝也同样对数据库进行了拆分,大量地分库分表,并且开源了自己的TDDL 框架由此可见,国内外的各大网站当发展到一定规模之后,必然会采取一些类似的措施来保证自己能够进一步发展下去,正所谓“英雄所见略同”。

博文中还提到了监控与开关相关的内容,例如与Finagle 整合在一起的Viz 和 Zipkin ,能方便地对每个请求进行监控。而他们的 Decider 系统集成在 Twitter 的所有服务里,这个系统类似一个开关,能够快速地对功能进行切换,甚至能让某个功能仅为指定百分比的用户提供服务,如此一来,可控的灰度发布就能成为可能。说到功能开关,乔梁曾在介绍百度的持续交付经验时也提到过类似的概念,不过他说的仅是控制特定功能的打开与关闭,显然 Twitter 的 Decider 更胜一筹。

除了这次的博文,Raffi Krikorian 去年在 QConSF 上还专门就 Twitter 的时间线优化做过分享,而著名的 HighScalability.com 上对 Twitter 的新架构也有介绍,如果您对 Twitter 的架构感兴趣,不妨再做进一步的了解,然后将您的体会分享给大家。

2013-08-25 09:374854
用户头像

发布了 135 篇内容, 共 64.6 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

这波性能优化,太炸裂了!

why技术

Java 性能优化 JVM

为什么安全性在托管中变得越来越重要

九河云安全

Compose 编程思想

Changing Lin

8月日更

Python代码阅读(第7篇):列表分组计数

Felix

Python 编程 Code Programing 阅读代码

如何用Camtasia添加视频水印?

淋雨

视频剪辑 Camtasia 录屏软件

一文搞懂指标采集利器 Telegraf

尔达Erda

学习 微服务 开发者 云原生 插件开发

孩子排斥写作业 VS 员工不接活儿——项目管理来帮忙

Ian哥

MySQL中的DEFINER(定义者)是什么

Simon

MySQL

Java 程序性能优化“学习日记”

Java 编程 面试 IT 计算机

spring cloud 在国内中小型公司能用起微服务来吗?

Java 程序员 架构 面试 IT

毕业六年本科,去年疫情期间备战二个月,阿里巴巴四面成功!定级 P7

Java 程序员 架构 面试 IT

Spring Boot 实战派,让开发像喝水一样简单!

Java 程序员 架构 面试 IT

接口返回值一定不允许使用枚举类型吗?

skow

Java 面试 后端 开发规范

算法有救了!GitHub 上神仙项目手把手带你刷算法,Star 数已破500k

Java 编程 程序员 面试 算法

2021 斩获 90K 月薪的 Spring 全家桶:文档 + 面试题 + 学习笔记 + 思维导图

编程 架构 微服务 IT 计算机

使用Micronaut框架构建一个微服务网络.

Java 编程 架构 面试 程序人生

xposed 入门之修改手机 IMEI

Qunar技术沙龙

android 程序员 App 经验分享 安卓

面试进阶齐飞!霸榜GitHub的 Java 全栈笔记太香了!

Java 编程 程序员 IT 计算机

渣本全力以赴33天,四面阿里妈妈(淘宝联盟),拿下实习岗offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

你真的懂语音特征吗?

华为云开发者联盟

语音 音频 声学 时域图 时域

我看 JAVA 之 并发编程【三】java.util.concurrent.atomic

awen

Java 并发编程 Atomic 原子操作

C++ Vector

若尘

c++ vector 8月日更

惠及百万用户 医保“上云”有了新思路

云计算

收获颇丰!这份阿里架构师纯手敲JDK源码全彩小册可以打满分

Java架构追梦

Java 阿里巴巴 架构 面试 jdk源码

Java测试框架九大法宝

FunTester

自动化测试 JUnit 测试框架 selenium testNG

“助力金九银十”25 大Java后端面试指南,3000道面试题解析

Java 编程 程序员 面试 IT

经验分享:我是如何拿下微软、滴滴、百度等 20家大厂的 Offer?

Java 程序员 架构 面试 IT

Tensor:Pytorch神经网络界的Numpy

华为云开发者联盟

神经网络 数组 PyTorch Numpy Tenso

Apache之道在腾讯的探索与实践

腾源会

Apache 开源 腾源会 腾讯开源

台达AS228T_CanOpen_VFD_X

林建

台达 AS228T Canopen 功能块 E变址

高频面试题-请把Java垃圾回收器说清楚

Java 编程 架构 面试 JVM

《天空之城》助Twitter刷新纪录,新架构功不可没_SOA_丁雪丰_InfoQ精选文章