QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

扩展 Twitter 以支撑新负载峰值

  • 2013-09-01
  • 本文字数:1420 字

    阅读完需:约 5 分钟

对于许多人而言,Twitter 已经变成一种不可或缺的通讯工具。个人和企业每天都在以一种更深广的方式使用Twitter,甚至所有人都对“其扩展性如何”感兴趣。本月初,Twitter 经历并无缝地处理了一次每秒143199 条tweet 的新负载峰值——与当前每秒5700 条tweet 的稳定状态相比,这一数值可谓是大幅飙升。Twitter 平台工程副总裁Raffi Krikorian报道了这项新纪录,并花时间回顾了已经进行的工程变更,它们扩展了Twitter,使其流量达到了这样一个新的水平。

三年前,围绕2010 世界杯的活动使Twitter 达到了每秒2000 条tweet 的峰值,导致了重大的稳定性问题,也使Twitter 工程团队意识到重构系统的必要性。后续工程检查发现,Twitter 拥有世界上最大的Ruby on Rails 部署,所有东西都在一个代码库中,应用程序和工程团队均是一个庞大而统一的整体。它的MySQL 存储系统已经达到上限,硬件资源却没有充分利用,而反复“优化”又致使代码库僵化。Krikorian 在报告中指出,通过此次检查,Twitter 确立了几大目标:机器数量减至十分之一;迁移到松耦合的面向服务的体系架构,该架构边界更清晰而且内聚性更高;可以通过更小的获得授权的团队更快地推出新功能。

Twitter 放弃了 Ruby,转而使用 JVM。它已经达到了 Ruby 进程级并发模型的上限,于是需要一种能够提供更高吞吐量而且能够更好地利用硬件资源的编程平台。通过在 JVM 上重写代码库,Twitter 获得了 10 倍的性能提升,现在每台主机每秒可以推送 10-20K 次请求。

Twitter 体系结构的最大变化是以 tweet、“时间线(timeline)”和用户服务等三个“核心名词”为重点,迁移到面向服务的体系结构。基于“契约式设计(design by contract)” 的开发方法,使各团队可以按照预先约定的接口定义独立地进行接口实现。服务具有自治和自包含的特点,这也在新的工程团队结构中得到了反映。异步 RPC 平台 Finagle 的创建,使所有的工程团队可以用一种标准的方式处理并发、故障恢复及负载均衡。

新体系结构在 Twitter 工程团队的构成中得到了反映。服务和团队都有自治且自包含的特点,而且每个团队都有自己的接口和问题域。因此,不需要任何人成为整个系统的专家,也不需要每个人都考虑 Twitter 的可扩展性。团队的关键能力是抽象出每个需要的人都可以使用的 API。

Krikorian 说,即使运用了淡化整体性的体系结构,持久化依然是一个巨大的瓶颈。因此,Twitter 已经利用 Gizzard 把单一的主 MySQL 数据库替换成一个具有容错性的 Sharded 数据库的分布式结构。

这里强调一个扩展大型系统的共同点,即可观测性和统计信息是管理系统和提供具体数据支持优化工作的关键工具。Twitter 的开发平台包含了这样的工具,使开发人员可以非常容易地提供请求跟踪和统计报告。

Twitter 扩展故事的最后一部分是在运行时环境配置和测试环境方面做了许多工作。在“Twitter 扩展”过程中,测试实际上只能在生产环境完成,部署新功能也需要团队间具有挑战性的协作水平。因此,Twitter 创建了 Decider 机制,在该机制下,新功能只有在部署完成后才能启用。在部署时,新功能可以设定为“关闭(off)”状态,然后或者以二进制方式(一次性)启用,或者按操作比例逐步启用。

总的来说,现在的 Twitter 比以前更具扩展性、更有弹性且更灵活,其流量正在打破新纪录,而且它可以在不受重大干扰的情况下推出新功能。在博文的末尾,Krikorian 鼓励读者继续关注 @twittereng ,以了解 Twitter 重构的更多细节。

查看英文原文: Scaling Twitter to New Peaks

2013-09-01 23:112460
用户头像

发布了 256 篇内容, 共 90.3 次阅读, 收获喜欢 12 次。

关注

评论

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

架构实战营 毕业设计

netspecial

架构实战营

Python OpenCV 学习轻松点,复习一下模板匹配吧

梦想橡皮擦

Python 7月日更

Vue进阶(幺捌陆):异步请求导致页面数据渲染错误问题解决

No Silver Bullet

Vue 异步请求 7月日更 $set

测评EasyRecovery的数据恢复效果与多种功能

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

抖音引流获客APP系统开发

获客I3O6O643Z97

抖音霸屏 抖音、快手获客系统

技术人生第5篇——浅谈如何成为技术一号位?

阿里巴巴中间件

云计算 阿里云 云原生 中间件 技术人生

深入浅出Node.js第一章阅读总结

Alex

JavaScript node.js

一图解密百TB数据分析如何跑进45秒 原创

百度Geek说

大数据 后端

漏桶算法和令牌桶算法,区别到底在哪里?

华仔

漏桶算法 令牌桶算法

OPPO小布助手算法系统的探索、实践与思考

OPPO小布助手

人工智能 深度学习 对话 智能助手 智能对话

鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求

华为云开发者联盟

鸿蒙 定时器 OpenHarmony LiteOS-M 软件定时器

十大自动化测试工具,你在用哪些?

禅道项目管理

测试 自动化测试

Load and preprocess images

毛显新

Python 深度学习 tensorflow 计算机视觉

智汇华云 | Wireguard VPN 介绍与使用

华云数据

架构实战营模块 3 作业

zlz

告别尴尬-找回MySQL数据库密码

龙眼果

MySQL

Tensorflow小技巧(一)

毛显新

Python tensorflow pandas

喜报!浪潮云通过可信云多项评估认证并斩获三项大奖

云计算

手撕环形队列

实力程序员

程序员 数据结构

悲剧!IDEA 突然找不到类了?

楼下小黑哥

Java 后端 IDEA

NumPy之:多维数组中的线性代数

程序那些事

Python 数据分析 Numpy 程序那些事

矿机矿池挖矿系统开发

获客I3O6O643Z97

挖矿矿池系统开发案例 PHA矿机挖矿

Vue组件间的传值五大场景,你造吗?

华为云开发者联盟

Vue 组件 传值

顶级高手改变模型|靠谱点评

无量靠谱

Vue进阶(幺玖肆):keep-alive 实现页面缓存

No Silver Bullet

Vue 7月日更 keep-alive 动态组件

带你探索CPU调度的奥秘

华为云开发者联盟

cpu 操作系统 工作负载 调度器 调度

初学者入门知识图谱必看的能力:推理

华为云开发者联盟

知识图谱 图谱 推理 知识推理 知识纠错

如何用Camtasia给视频添加字幕?

淋雨

视频剪辑 Camtasia 录屏软件

架构实战营 毕业总结

netspecial

架构实战营

拒做背锅侠!如何利用网站性能优化驱动产品体验提升

阿里巴巴中间件

云计算 阿里云 云原生 中间件

未雨绸缪最好,亡羊补牢也行|靠谱点评

无量靠谱

扩展Twitter以支撑新负载峰值_SOA_Saul Caganoff_InfoQ精选文章