`
hideto
  • 浏览: 2682393 次
  • 性别: 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.

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

相关推荐

    系统架构学习 Twitter系统架构设计分析

    系统架构学习 参考文献 Twitter系统架构设计分析

    Twitter的核心架构设计分析.docx

    Twitter 作为一家互联网服务提供商,在建设通信软件服务时遇到的网络问题、软件系统架构问题、软件技术选型等等都值得我们学习。 Twitter 的核心架构设计分析可以帮助读者从整体理解互联网软件开发、发布、问题解决...

    twitter学习教程.docx

    - **理解Twitter架构**:介绍Twitter的基本概念、功能和使用方法。 - **确定商业目标**:强调设定清晰的Twitter商业目标的重要性。 - **账户优化**:指导用户如何设置和优化个人Twitter账户。 - **社区策略制定*...

    Twitter4j v2.2 (A Java library for the Twitter API)

    Twitter API是一个基于RESTful架构的服务,提供了多种接口来获取、发送Twitter数据。Twitter4j通过封装这些接口,简化了API调用的过程,使得开发者无需直接处理HTTP请求和JSON解析,而是能用Java对象直接进行操作。 ...

    Twitter_新手使用教程 Twitter_新手使用教程

    - **Twitter基本架构与功能**:了解Twitter的基础设置和使用方法。 - **确定商业目标**:明确使用Twitter的目标,如品牌推广、客户服务等。 - **账户设置优化**:根据个人或企业需求定制Twitter账户。 - **社区...

    talon-for-twitter-android,我流行的android talon for twitter应用程序的材料设计版本,100%开源.zip

    对于开发者来说,它提供了一个学习和研究现代Android应用开发的宝贵资源,尤其是对于那些对Twitter API、Material Design以及Android应用架构感兴趣的开发者。 Talon for Twitter Android的应用程序结构可能包含...

    Java_使用Spring微服务器架构的twitter克隆项目.zip

    该项目是一个使用Java编程语言,并基于Spring微服务架构实现的Twitter克隆应用。Spring微服务架构是一种将大型应用程序拆分为小型、独立的服务的方法,每个服务都可以独立开发、部署和扩展,从而提高了灵活性和可...

    Twitter系统结构分析

    这篇分析将深入探讨Twitter的核心技术架构,以期为大型网站开发者提供宝贵的经验和启示。 一、分布式微服务架构 Twitter采用的是微服务架构,即将整个系统拆分为许多独立的小服务,每个服务都负责特定的功能,如...

    com.twitter.app.TwitterApplication..zip

    《深入解析Twitter应用:com.twitter.app.TwitterApplication》 Twitter作为一个全球...通过分析这个`.apk`文件,开发者可以学习到如何构建一个高性能的社交应用,同时也能了解到Android开发的前沿技术和最佳实践。

    王亚雷-Twitter 千万 QPS 分布式系统的架构设计和高效运维

    - **智能运维**:利用机器学习等技术提高自动化水平,减少人工干预。 - **自动化运维**:构建自动化的工具和流程来提升运维效率,降低人为错误的风险。 #### 3.2 解决方案 - **工具+流程+组织架构**:综合运用先进...

    一线架构师实践指南

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

    IOS源码应用Demo-twitter开放api实例大全.zip

    在iOS开发领域,Twitter开放API的应用是一个常见的学习和实践课题,尤其对于毕业设计或论文撰写而言,这样的项目能帮助开发者深入理解网络通信、API接口调用以及数据解析等关键技术。"IOS源码应用Demo-twitter开放...

    Storm @Twitter-Slides.pdf

    这篇论文的原作PPT是学习Storm和流处理技术的重要资源。以下是对Storm核心概念和内部机制的详细解释。 Storm是一个分布式、容错的实时计算系统,它允许用户对持续流入的数据进行分析,以便在数据产生时立即做出反应...

    基于SpringBoot和SpringCloud实现微服务架构学习(一).docx

    ### 基于Spring Boot和Spring Cloud实现微服务架构学习 #### 一、引言 在当前快速发展的互联网行业中,微服务架构已经成为构建复杂企业级应用的重要方式之一。本文档旨在探讨如何通过Spring Boot和Spring Cloud这...

    twitter-sentiment-analysis2.zip

    5. **模型优化**:根据评估结果调整模型参数,如学习率、正则化项等,或者尝试不同的模型架构,直到模型达到满意的效果。 6. **部署与应用**:将训练好的模型部署到实际系统中,实时处理新的Twitter数据,进行实时...

    twitter4j-core-4.0.1.zip

    这个项目展示了如何在Play2框架中整合Elasticsearch和Jest,对于想要学习如何在Java Web应用中集成全文搜索功能的开发者来说,是个宝贵的资源。通过阅读源代码和运行项目,你可以深入了解如何使用Elasticsearch进行...

    twitter客户端.zip

    通过深入研究TL-SocialNetLib和TweetLanes,开发者不仅可以掌握Twitter客户端的基本开发流程,还能学习到Android开发的最佳实践。无论你是初学者还是经验丰富的开发者,这份源码都能为你提供宝贵的参考和灵感。不断...

    基于Spring Boot和Spring Cloud实现微服务架构学习(一).docx

    在本文中,我们将探讨如何基于Spring Boot和Spring Cloud构建微服务架构,并介绍Spring生态...而学习这些技术的最佳途径是直接阅读官方文档,尽管对于非英语背景的开发者可能有一定难度,但坚持下来,收获将远超预期。

Global site tag (gtag.js) - Google Analytics