作为140个字的缔造者,twitter太简单了,又太复杂了,简单是因为仅仅用140个字居然使有几次世界性事件的传播速度超过任何媒体,复杂是因为要为2亿用户提供这看似简单的140个字的服务,这真的是因为简单,所以复杂。本文就将对twitter网站架构的学习体会来与大家一起分享。
一、twitter网站基本情况概览
截至2011年4月,twitter的注册用户约为1.75亿,并以每天300000的新用户注册数增长,但是其真正的活跃用户远远小于这个数目,大部分注册用户都是没有关注者或没有关注别人的,这也是与facebook的6亿活跃用户不能相提并论的。
twitter每月有180万独立访问用户数,并且75%的流量来自twitter.com以外的网站。每天通过API有30亿次请求,每天平均产生5500次tweet,37%活跃用户为手机用户,约60%的tweet来自第三方的应用。
平台:Ruby on Rails 、Erlang 、MySQL 、Mongrel 、Munin 、Nagios 、Google Analytics 、AWStats 、Memcached
下图是twitter的整体架构设计图:
二、twitter的平台
twitter平台大致由twitter.com、手机以及第三方应用构成,如下图所示:
其中流量主要以手机和第三方为主要来源。
Ruby on Rails:web应用程序的框架
Erlang:通用的面向并发的编程语言,开源项目地址:http://www.erlang.org/
AWStats:实时日志分析系统:开源项目地址:http://awstats.sourceforge.net/
Memcached:分布式内存缓存组建
Starling:Ruby开发的轻量级消息队列
Varnish:高性能开源HTTP加速器
Kestrel:scala编写的消息中间件,开源项目地址:http://github.com/robey/kestrel
Comet Server:Comet是一种ajax长连接技术,利用Comet可以实现服务器主动向web浏览器推送数据,从而避免客户端的轮询带来的性能损失。
libmemcached:一个memcached客户端
使用mysql数据库服务器
Mongrel:Ruby的http服务器,专门应用于rails,开源项目地址:http://rubyforge.org/projects/mongrel/
Munin:服务端监控程序,项目地址:http://munin-monitoring.org/
Nagios:网络监控系统,项目地址:http://www.nagios.org/
三、缓存
讲着讲着就又说到缓存了,确实,缓存在大型web项目中起到了举足轻重的作用,毕竟数据越靠近CPU存取速度越快。下图是twitter的缓存架构图:
大量使用memcached作缓存
例如,如果获得一个count非常慢,你可以将count在1毫秒内扔入memcached
获取朋友的状态是很复杂的,这有安全等其他问题,所以朋友的状态更新后扔在缓存里而不是做一个查询。不会接触到数据库
ActiveRecord对象很大所以没有被缓存。Twitter将critical的属性存储在一个哈希里并且当访问时迟加载
90%的请求为API请求。所以在前端不做任何page和fragment缓存。页面非常时间敏感所以效率不高,但Twitter缓存了API请求
在memcached缓存策略中,又有所改进,如下所述:
1、创建一个直写式向量缓存Vector Cache,包含了一个tweet ID的数组,tweet ID是序列化的64位整数,命中率是99%
2、加入一个直写式行缓存Row Cache,它包含了数据库记录:用户和tweets。这一缓存有着95%的命中率。
3、引入了一个直读式的碎片缓存Fragmeng Cache,它包含了通过API客户端访问到的sweets序列化版本,这些sweets可以被打包成json、xml或者Atom格式,同样也有着95%的命中率。
4、为页面缓存创建一个单独的缓存池Page Cache。该页面缓存池使用了一个分代的键模式,而不是直接的实效。
四、消息队列
大量使用消息。生产者生产消息并放入队列,然后分发给消费者。Twitter主要的功能是作为不同形式(SMS,Web,IM等等)之间的消息桥
使用DRb,这意味着分布式Ruby。有一个库允许你通过TCP/IP从远程Ruby对象发送和接收消息,但是它有点脆弱
移到Rinda,它是使用tuplespace模型的一个分享队列,但是队列是持久的,当失败时消息会丢失
尝试了Erlang
移到Starling,用Ruby写的一个分布式队列
分布式队列通过将它们写入硬盘用来挽救系统崩溃。其他大型网站也使用这种简单的方式
原文链接:http://www.itivy.com/ivy/archive/2011/8/14/the-architecture-of-twitter.html
- 大小: 46.4 KB
- 大小: 35.7 KB
- 大小: 50.2 KB
分享到:
相关推荐
【标题】:基于Django和Bootstrap3构建的学习笔记网站 【描述】:这个项目是一个学习笔记网站,使用了Python的Web框架Django以及前端UI框架Bootstrap3进行开发。Django以其MVT(Model-View-Template)架构模式,...
在本Java项目学习笔记中,我们关注的是SSM(Spring、SpringMVC、MyBatis)框架下的高并发秒杀API实现。这是一个典型的电商场景,其中涉及到的技术点广泛且实用,对于提升Java开发者处理高并发问题的能力至关重要。...
### Hadoop实战——初级部分学习笔记 2 #### 一、引言与背景 随着大数据时代的到来,Hadoop作为处理大规模数据集的核心工具之一,其重要性和应用范围日益扩大。本文将基于私塾在线《Hadoop实战——初级部分》的...
大型、高负载网站架构和应用初探 时间:30-45分钟 27 说说大型高并发高负载网站的系统架构 28 mixi技术架构 51 mixi.jp:使用开源软件搭建的可扩展SNS网站 51 总概关键点: 51 1,Mysql 切分,采用...
以上就是HBase自学笔记中的关键知识点总结,涵盖了HBase的基本概念、与其他Hadoop组件的关系、存储机制、架构以及环境搭建等方面。通过这些知识点的学习,可以帮助我们更好地理解和掌握HBase的核心技术和应用场景。
本笔记主要围绕Storm的核心概念、起源、架构、组件、原理以及应用场景进行详细讲解。 **一、Storm概念** Storm设计的目标是使实时数据处理变得简单易用,它可以连续处理无限的数据流,提供低延迟和高吞吐量的处理...
Bootstrap是一款流行的前端开发框架,由Twitter推出,它提供了预设的CSS样式、JavaScript组件和HTML模板,可以帮助开发者快速创建响应式和移动优先的网站。 JavaScript是一种广泛使用的客户端脚本语言,常用于网页...
"learning_log:使用bootstrap3的基本学习日志Django项目"是一个基于Django框架构建的简单在线应用程序,旨在帮助用户记录和存储他们的学习笔记。Bootstrap3是这个项目的主要UI框架,它提供了一套响应式设计和易用的...
【个人笔记管理系统】是一个基于Web的个人学习资料管理平台,主要功能是允许用户通过一个管理面板来分类存储和管理各种课程的讲义。这个系统采用了Bootstrap框架,确保了在不同设备上的良好显示效果,实现响应式布局...
这个游戏商店电子商务项目为有意向使用Django开发复杂网站的开发者提供了一个绝佳的学习案例。它展示了如何实现电子商务功能,比如产品展示、购物车和在线支付;同时也展示了如何管理不同用户角色和权限,以及如何...
另一位作者Alex Payne是Twitter的平台负责人,他在Twitter平台上为开发者提供了构建在流行社交信息服务之上的服务。他之前曾为政治竞选、非营利组织和早期创业公司开发过网络应用程序。 本书的特色内容包括: 1. ...
### Storm 从零到精通知识点解析 #### 一、Storm简介 **1.1 什么是Storm** Apache Storm 是一个开源的分布式实时计算系统,能够处理大量...以上总结了从零开始学习 Storm 的基础知识和技术要点,希望对你有所帮助。
10. **Web2.0案例分析**:分析如Facebook、Twitter、YouTube等知名Web2.0网站的架构和技术实现。 这个系列教程可能会逐步引导学习者从PHP的基础知识入手,深入到Web2.0应用的开发,包括创建用户交互性强、数据驱动...
本笔记将深入探讨Spark的核心概念、主要组件以及实际应用,帮助读者全面掌握这一强大的分布式计算系统。 一、Spark概述 Spark由Apache软件基金会维护,设计目标是提供一个用于大规模数据处理的通用、弹性的开源平台...
Bootstrap则是Twitter开源的一个前端框架,它提供了一套响应式布局、移动设备优先的WEB设计方法,包含了一系列CSS和JS组件。Bootstrap的表格组件在本插件中起到了基础架构的作用,提供了美观的表格样式和响应式的...
在这个平台上,用户可以探索各种葡萄酒,学习它们的产地、品种、年份以及品酒笔记等知识,从而提升自己的品鉴能力并享受葡萄酒带来的乐趣。 在Java编程语言的支持下,WineIndex项目实现了以下几个核心功能: 1. **...
Misskitter是一款专门为Android平台设计的应用程序,它与Misskey集成,Misskey是一个分散式的社交网络平台,旨在提供类似于Twitter的体验,但更加注重用户隐私和去中心化。这款应用的开发采用了Kotlin编程语言,...