`
hideto
  • 浏览: 2648078 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Twitter架构学习

阅读更多
原文:Scaling Twitter: Making Twitter 1000 Percent Faster

Twitter是目前为止最大的Ruby on Rails应用,几个月间页面点击由0增长到几百万,现在的Twitter比今年月快了10000%

平台
Ruby on Rails
Erlang
MySQL
Mongrel
Munin
Nagios
Google Analytics
AWStats
Memcached

状态
成千上万的用户,真实数量保密
每秒钟600请求
每秒钟平均200-300个连接,峰值为800个连接
MySQL每秒钟处理2,400个请求
180个Rails实例,使用Mongrel作为Web服务器
1个MySQL服务器(one big 8 core box)和1个slave用于只读的统计和报告
30+进程用于处理其余的工作
8台Sun X4100s
Rails在200毫秒内处理一个请求
花费在数据库里的平均时间是50-100毫秒
超过16GB的memcached

架构
1,遇到非常常见的伸缩性问题
2,最初Twitter没有监听,没有图,没有统计,这让解决问题非常困难。后来添加了Munin和Nagios。在Solaris上使用工具有点困难,虽然有Google Analytics但是页面没有loading所以它没什么用
3,大量使用memcached作缓存
-例如,如果获得一个count非常慢,你可以将count在1毫秒内扔入memcached
-获取朋友的状态是很复杂的,这有安全等其他问题,所以朋友的状态更新后扔在缓存里而不是做一个查询。不会接触到数据库
-ActiveRecord对象很大所以没有被缓存。Twitter将critical的属性存储在一个哈希里并且当访问时迟加载
-90%的请求为API请求。所以在前端不做任何page和fragment缓存。页面非常时间敏感所以效率不高,但Twitter缓存了API请求
4,消息
-大量使用消息。生产者生产消息并放入队列,然后分发给消费者。Twitter主要的功能是作为不同形式(SMS,Web,IM等等)之间的消息桥
-使用DRb,这意味着分布式Ruby。有一个库允许你通过TCP/IP从远程Ruby对象发送和接收消息,但是它有点脆弱
-移到Rinda,它是使用tuplespace模型的一个分享队列,但是队列是持久的,当失败时消息会丢失
-尝试了Erlang
-移到Starling,用Ruby写的一个分布式队列
-分布式队列通过将它们写入硬盘用来挽救系统崩溃。其他大型网站也使用这种简单的方式
5,SMS通过使用第三方网关的API来处理,它非常昂贵
6,部署
-Twitter做了一次review并推出新的mongrel服务器,还没有优雅的方式
-如果mongrel服务器替换了则一个内部错误抛给用户
-所以的服务器一次杀死。没有使用rolling blackout方式因为消息队列状态保持在mongrel里,这将导致剩余的mongrel被堵塞
7,误用
-系统经常宕机,因为人们疯狂的添加任何人为朋友,24小时内有9000个朋友,这将让站点崩溃
-构建工具来检测这些问题,这样你可以找到何时何地发生这些错误
-无情的删除这些用户
8,分区
-将来计划分区,目前还没有。当前所做的改变已经足够
-分区的计划基于时间,而不是用户,因为大部分请求都是本地的
-由于memoization分区会很难。Twitter不能保证只读的操作真的为只读,有可能写入一个只读的slave,这很糟糕
9,Twitter的API流量是Twitter站点的10倍
-Twitter所做的最重要的事情就是API
-保持服务简单允许开发人员在Twitter的基础组织上构建一些比Twitter自己所想到的更好的主意。例如,Twitterrific是一个使用Twitter优美的方式

学到的东西
1,和社区交流。不要隐藏并尝试自己解决所有问题。如果你提问,有许多聪明的人士愿意帮忙
2,将你的伸缩计划当成一个商业计划,聚集一帮顾问来帮助你
3,自己构建它。Twitter花费大量时间来尝试其他人的似乎可以工作的解决方案,但是失败了。自己构建一些东西会更好,这样你至少可以控制它并且构建你需要的特性
4,在用户的限度上构建。人们可能尝试弄垮你的系统。提高理由的限度和检测机制来保护你的系统不被杀死
5,不要让数据库成为首要瓶颈,并不是所有东西都需要一个很大的join,缓存数据,考虑其他创造性的方式来获得结果。一个好例子在里Twitter, Rails, Hammers, and 11,000 Nails per Second谈到
6,让你的应用一开始就很容易分区。这样你会一直有一种方式来伸缩你的系统
7,认知你的系统是很慢的,马上添加报告来跟踪问题
8,优化数据库
-索引所有东西,Rails不会为你做这件事
-解释你的查询是怎样运行的,索引可能不是按你想像的去做
-大量的非常规化。例如,Twitter一起存储用户ID和朋友ID,这预防了大量的开销昂贵的join
9,缓存所有东西,个别的ActiveRecord对象目前没有被缓存。目前查找已经足够快
10,测试一切
-你想知道当你部署时一起工作正常
-Twitter现在有一个完整的test suite。所以当缓存失效时Twitter可以在go live之前找到问题
11,使用异常提示和异常日志来获得立即的错误提示,这样你可以发现正确的方式
12,不要做傻事
-伸缩改变了傻东西
-尝试一次加载3000个朋友到内存中可能带来服务器崩溃,但是当只有4个朋友时它工作的很好
13,大部分性能不是来自语言,而是来自应用设计
14,通过创建一个API来让你的站点开放服务。Twitter的API是它成功的一个大原因。它允许用户创建一个扩展和生态系统。你可以从不做你的用户可以做的工作,这样你就不会有创造性。所以开发你的系统并且让其他人将他们的应用与你的应用集成变容易
分享到:
评论
1 楼 flycondor 2007-11-16  
Send message to invalidate friend's cache in the background instead of doing all individually, synchronously.

这句话楼主为什么没有翻译呢?

相关推荐

    一线架构师实践指南

    一线架构师实践指南 本人是一个IT开发爱好者,从事Android的开发工作。热爱学习新技术。若您也有共同的兴趣爱好,欢迎你加入QQ技术群让我们共同发现新技术。 【GitHub】https://github.com/xiaole0310 【csdn博客...

    高性能电子商务平台构建 架构、设计与开发

    高性能电子商务平台构建 架构、设计与开发 本人是一个IT开发爱好者,从事Android的开发工作。热爱学习新技术。若您也有共同的兴趣爱好,欢迎你加入QQ技术群让我们共同发现新技术。 【GitHub】...

    pytorch深度学习入门与简明实战教程2022

    11.现代网络架构 12.图像定位 13.Unet图像语义分割 14.LinNet图像语义分割 15.文本分类与词嵌入表示 16.Rnn循环神经网络 17(一). twitter 评论情绪分类 17(二). 中文外卖评论情绪分类 18.注意力机制 19. Rnn序列...

    高性能高并发服务器架构大全

    整理的高性能高并发服务器架构文章,内容预览: ... Scaling Twitter: Making Twitter 10000 Percent Faster 331 Information Sources 332 The Platform 332 The Stats 333 The Architecture 333 L

    斯坦福《序列处理的深度学习架构》概述

    语言是一种固有的时间现象。当我们理解和产生口语时,我们处理不确定长度的连续输入流。即使在处理书面文本时,...我们谈论的是对话流、新闻源和twitter流,所有这些都唤起了这样一种观念:语言是一个随时间展开的序列。

    机器学习实践手册.pdf

    25 第四范式大规模机器学习先知平台的整体架构和实现细节 53 轻量级大规模机器学习算法库Fregata:快速,无需调参 67 Twitter 机器学习平台的设计与搭建 83 机器排序学习在电商搜索中的实战 95 基机器学习方法对销售...

    六:大数据架构-Flink+AI.pdf

    后来随着⼤家认识到数据时效性的重要作⽤,Twitter 开源的流计算引擎 Storm 红极⼀时,各 种流计算引擎也纷纷登场,其中也包括了Flink。由于成本、计算准确性和容错性等⽅⾯的考虑,各家企业纷纷使⽤起了被称为 的...

    快速学习springboot 高效率,低封装,面向学习型Java开发框架 简单入门springboot够用及面试

    前端界面风格采用了结构简单、性能优良、页面美观大气的Twitter Bootstrap页面展示框架。 采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。 使用Maven做项目管理,提高项目的易开发...

    大数据云计算技术系列 NoSQL数据库学习教程(共71页).pdf

    5 Twitter运维经验 5 运维经验 5 Metrics 5 配置管理 5 Darkmode 5 进程管理 5 硬件 5 代码协同经验 5 Review制度 5 部署管理 5 团队沟通 5 Cache 5 云计算架构 5 反模式 5 单点失败(Single Point of Failure) 5 ...

    计算机网络安全相关资料分享.zip

    全部是PPT资料,有点老但可作为学习参考。包含: 基于分布式蜜罐的垃圾邮件捕获系统 基于攻击图模型的多目标网络安全评估技术研究 基于协同的域间路由路径 基于Cookie劫持的Deep-Web用户数据安全性分析 基于HTTP会话...

    基于Python+AIML+Tornado的智能聊天机器人(NLP+深度学习)含全部工程源码+语料库

    后端我们采用的是 tornado 架构,之所以使用 tornado 是因为 Tornado 是使用 Python编写的一个强大的、可扩展的 Web 服务器,它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够...

    基于Springboot+Thymeleaf实现的旅游景点酒店的预订网站+源代码+文档说明+数据库

    项目管理:Maven 7、JDK版本:1.8 8、额外功能:阿里云短信服务SMS、阿里云图片存储OSS、QQ邮箱验证服务 9、主要算法:Twitter雪花算法(ID生成策略)、Bcrypt(密码加密)、JPA排 前台账号:13512345678 密码:...

    bootstrap是什么_动力节点Java学院整理

    Bootstrap 是由两个 twitter 员工开发并开源的前端框架,目前已经到了 2.0.4 的版本,在 Github 上面有 32517个 watch,和 6608个 ...同时,Bootstrap 的代码有着非常良好的代码规范,从中也可以学习到很多,在 Bootst

    个人毕设项目-基于Springboot+Thymeleaf旅游景点酒店预订源码含sql数据库.zip

    具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 ## 旅游网是一个基于SpringBoot框架设计的一个毕业设计,主要类似于一个电商系统 ## 主要功能介绍 有用户登录注册,景点列表,...

    2015 Netty权威指南 第2版 带书签目录 完整版

    1、Hadoop、Storm、Spark、Facebook、Twitter、阿里巴巴都在使用Java高性能NIO通信框架Netty,本书告诉你Why,通过本书你可以全面、系统地理解Netty 架构设计理念,以及异步NIO 编程。 2、本书作者为资深一线专家,...

    大数据分析一体机.pptx

    流计算(twitter的storm和yahoo的S4) 一些相关技术 大数据分析一体机全文共31页,当前为第5页。 1、对现有数据库管理技术的挑战 传统的数据库部署不能处理数TB 级别的数据,也不能很好的支持高级别的数据分析。急速...

    java开发oa办公系统源码-boot_learning:引导学习

    前端界面风格采用了结构简单、性能优良、页面美观大气的Twitter Bootstrap页面展示框架。 采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。 使用Maven做项目管理,提高项目的易开发性...

    java开发oa办公系统源码-BootDo:引导程序

    前端界面风格采用了结构简单、性能优良、页面美观大气的Twitter Bootstrap页面展示框架。 采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。 使用Maven做项目管理,提高项目的易开发性...

    opencart2.0中文版

    免费的电子商务系统,学习二次开发的好平台。 此版本在英文版2.0.1.1基础上修改衍生而来,遵循OC的mvc架构,根据国内用户习惯进行了大量的修改工作。 主要包括(免费版一共15个功能点): 1、名字与姓氏合并,国内...

Global site tag (gtag.js) - Google Analytics