关于Twitter的系统架构简析

三层架构(three-tier architecture)
网站的架构设计,传统的做法是三层架构,所谓“传统”不意味着“过时”,新潮的技术不成熟,传统的路子更稳健。
(1)表示层(presentation tier):apache web server,主要任务是解析http协议,将请求分发给逻辑层;
(2)逻辑层(logic tier):mongrel rails server,利用rails现成的模块,降低工作量;
(3)数据层(data tier):mysql;

数据层先来吧:
twitter的核心是(1)用户;(2)消息;(3)用户关系;
围绕这几个核心,其核心数据的schema设计:
(1)用户表user
id, name, pass, status, …
(2)消息表msg
msgid, author_id, msg, time, …
(3)用户关系表relation
id, following_ids, followed_ids

逻辑层
当用户发布消息时,依次执行:
(1)存消息至msg表;
(2)查用户relation表,找出其followed_ids;
(3)获取followed_ids中用户的状态;
(4)在线的ids,将消息push进一个队列queue;
(5)queue中的msg,更新ids的主页;
这里面要用到队列,其实现方式有很多种,例如apache mina,twitter团队自己实现了一个kestrel。

表示层
表示层的主要职能有2个:
(1)http协议处理(http processor);
(2)分发器(dispatcher);
当然,访问twitter的不仅仅是浏览器,可能还有手机,由于可能存在其他协议,故可能存在其他processor。

无论如何,架构框架清晰如下:

图1:架构版本1

cache=cash即缓存等于收入
cache的使用对大型网站架构至关重要,网站响应速度是影响用户体验最明显的因素,而影响响应速度最大的敌人又是磁盘io。
twitter工程师认为,良好体验的网站平均响应时间应该在500ms左右,理想的时间是200-300ms。
关于cache的使用,是twitter架构的一大看点,带cache的架构清晰如下:

图2:带cache架构版本2

时间: 2024-10-03 14:01:08

关于Twitter的系统架构简析的相关文章

三层架构—简析

三层学习完了,第一次验收的时候,自己理解的也不是很到位,后来又重新敲了一遍登陆例子,查阅了一些资料 进行第二次验收才感觉清晰了许多.之前画时序图时我就想过时序图基本上也是很好的体现了三层,当时也和别人讨 论过这个问题.直到学完三层后,更加证明了这一点. 下面我将从理论和实践两个角度总结一下三层. 理论篇 为什么使用三层架构? 说白了,分层的目的是想将复杂问题简单化,也就是面向对象技术所崇尚的"高内聚,低耦合".当业务复杂到 一定程度,数据存储在独立的存储介质时适合用三层架构. 什么是三

ONOS预热篇之架构简析(二)

ONOS是首款专门面向服务提供商和企业骨干网的开源SDN网络操作系统,是由一家名为开放网络实验室(ON.Lab)的非盈利性组织打造的一款商用控制器,并将于美国时间2014年12月5日全球首发.ONOS旨在为服务提供商和企业骨干网提供高可用性(HA).可横向扩展及高性能的网络需求.由于该项目得到了业界各知名大佬包括服务提供商AT&T.NTT,网络供应商Ciena.Ericsson.Fujitsu.Huawei.Intel.NEC,网络运营商Internet2.CNIT.CREATE-NET的资助和

SequoiaDB 系列之四 :架构简析

在本系列的第一篇中,简述了SequoiaDB的安装,以及一个(伪)集群的部署 第二篇和第三篇对SequoiaDB的集群,做了简单地操作. 在本篇中,将对SequoiaDB的架构进行简单的分析. 因为自身能力有限,对于架构这么高大上的主题,不敢轻言.因此本文会摘抄SequoiaDB官方的描述,加上自己的理解,达到共同学习的目的. 在解析之前,先简单叙述一下分布式系统的CAP理论: C:代表一致性,即在某时刻,分布式系统中节点数据应该是相同的: A:代表可用性,即有求必应,在分布式系统中某节点后,统

大型网站系统架构技术原理透析

跟朋友聊天的时候,发现很多人对大型网站系统架构非常感兴趣,我也很感兴趣,经常会在家里2台笔记本和1台服务器组成的局域网环境里作些实验.我进 入IT行业的时间,大约是97,98年吧,那时候PC客户端软件最为盛行,做软件开发是一份很体面也很喜欢的工作.我从Win3.1上的VC1.5开始一 直到VC6.0,然后转为.Net开发,基本上都是从事客户端软件开发.本人的性格是危机意识向来严重,所以深感互联网必将盛行,传统软件必将走向没落, 于是转向了WEB开发.记得以前去某Portal网站应聘的时候,主考官

Android -- MediaPlayer内部实现简析

Android -- MediaPlayer内部实现简析 在之前的博客中,已经介绍了使用MediaPlayer时要注意的内容.现在,这里就通过一个MediaPlayer代码实例,来进一步分析MediaPlayer内部是如何运作.实现的:当然这里的分析只截止到底层调用播放器之前,因为播放器这块实在是没搞懂. 我们使用的例子来源于之前MediaPlayer Playback译文中的官方实例: String url = "http://........"; // your URL here

简析 .NET Core 构成体系

简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代码开发.部署.运行过程 总结 前文介绍了.NET Core 在整个.NET 平台所处的地位,以及与.NET Framework的关系(原文链接),本文将详细介绍.NET Core 框架的构成和各模块主要功能,以及如何实现跨平台. 上图描述了 .NET Core的系统构成,最上层是应用层,是开发基于UI应用的

Entitas实现简析

Entitas实现简析 ??这里主要讲Entitas的执行原理,不讲Entitas的代码生成方面. ECS简介 ??ECS(实体-组件-系统)是一种常用于游戏开发的架构模式. ??实体: 实体只是一个ID或一个容器,用来标记或存储一系列组件. ??组件: 没有任何逻辑,单纯用来存储数据. ??系统: 循环处理特定的组件. ??ECS主要强调了两个方面: ??1.用数据的组合去描述对象,而不是继承. ??2.数据和逻辑的分离. Unity中的EC ??Unity采用了EC的设计思路,和传统ECS不

ASCII、Unicode、UTF-8、UTF-16、GBK、GB2312、ANSI等编码方式简析

ASCII.Unicode.UTF-8.UTF-16.GBK.GB2312.ANSI等编码方式简析 序言 从各种字节编码方法中,能看到那个计算机发展的洪荒时期的影子. ASCII ASCII码有标准ASCII码和拓展ASCII码之分,这里分开讲解. 标准ASCII码 标准ASCII码占用一个字节,但是只用了后7位,第一位是0.一个字节本来可以表示256种不同情况,而由此ASCII码只有128种符号.这128种符号包括英文26字母的大小写.数字0-9.32个不可打印的控制字母.符号(就是我们在键盘

ios系统架构及常用框架

1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer).媒体层(Media layer).核心服务层(Core Services layer).核心操作系统层(Core OS layer)如图: (1) 触摸层:为应用程序开发提供了各种常用的框架并且大部分框架与界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作.它包括以下这些组件: Multi-Touch Event