SlideShare une entreprise Scribd logo
1  sur  5
揭秘全球最大网站 Facebook 背后的那些软件

    为这篇文章评分

    0 评论

    [发表时间]:2010-07-09 07:13 PM (2969 查看)


       
        2010 年 6 月,Google 公布全球 Top 1000 网站。Facebook 独占鳌头。




       以 Facebook 现在的经营规模,诸多传统服务器的技术均将崩溃或根本无法支撑。那么面对 5 亿的活跃用
    户,Facebook 的工程师们又将如何让网站平稳运转呢?伯乐在线 - 职场博客的这篇文章将展示 Facebook 的工程
    师完成这个艰巨任务所用到的一系列软件。


    Facebook 级别规模的挑战
    在我们深入细节之前,先了解一组 Facebook 不得不面对数据,你就可以想象这种规模。


•   Facebook 每月的 PV 量:630,000,000,000 (6 千 3 百亿)
•   Facebook 上的图片数量超过其他图片网站的总和(包括诸如 Flickr 这样的图片网站)
•   每个月有超过 30 亿的图片上传到 Facebook
•   Facebook 系统每秒可以处理 120 万张图片。这还不包括 Facebook 的 CDN 处理的图片。
•   每月处理超过 250 亿的信息内容(包括用户状态更新,评论等)
•   Facebook 的服务器数量超过 3 万台(此数据为 2009 年的数据)




         Facebook 所用的软件
    从某些方面来说,Facebook 还是属于 LAMP 类型网站,但是,为了配合其他大量的组件和服务,Facebook 对已有
    的方法,已经做了必要的改变、拓展和修改。
比如:

•   Facebook 依然使用 PHP,但 Facebook 已重建新的编译器,以满足在其 Web 服务器上加载本地代码,从而提升性
    能;
•   Facebook 使用 Linux 系统,但为了自身目的,也已做了必要的优化。(尤其是在网络吞吐量方面);
•   Facebook 使用 MySQL,但也对其做优化。


       还有定制的系统,比如, Haystack -- 高度可扩展的对象存储,用来处理 Facebook 的庞大的图片;Scribe --
    Facebook 的日志系统。

    下面展现给大家的是,全球最大的社交网站 Facebook 所使用到的软件。




    Memcached

    Memcached 是一款相当有名的软件。它是分布式内存缓存系统。Facebook(还有大量的网站)用它作为 Web 服务器
    和 MySQL 服务器之间的缓存层。经过多年,Facebook 已在 Memcached 和其相关软件(比如,网络栈)上做了大
    量优化工作。

    Facebook 运行着成千上万的 Memcached 服务器,借以及时处理 TB 级的缓存数据。可以这样说,Facebook 拥有
    全球最大的 Memcached 设备。




    HipHop for PHP

    和运行在本地服务器上代码相比,PHP 的运行速度相对较慢。HipHop 把 PHP 代码转换成 C++代码,提高编译时的
    性能。因为 Facebook 很依赖 PHP 来处理信息,有了 HipHop,Facebook 在 Web 服务器方面更是如虎添翼。

    HipHop 诞生过程:在 Facebook,一小组工程师(最初是 3 位)用了 18 个月研发而成。




    Haystack

    Haystack 是 Facebook 高性能的图片存储/检索系统。(严格来说,Haystack 是一对象存储,所以它不一定要存储
    图片。)Haystack 的工作量超大。Facebook 上有超过 2 百亿张图片,每张图片以四种不同分辨率保存,所
    以,Facebook 有超过 8 百亿张图片。

    Haystack 的作用不单是处理大量的图片,它的性能才是亮点。我们在前面已提到,Facebook 每秒大概处理 120 万
张图片,这个数据并不包括其 CDN 处理的图片数。这可是个惊人的数据!!!




BigPipe

BigPipe 是 Facebook 开发的动态网页处理系统。为了达到最优,Facebook 用它来处理每个网页的分块(也
称“Pagelets”)。

比如,聊天窗口是独立检索的,新闻源也是独立检索的。这些 Pagelets 是可以并发检索,性能也随之提高。如
此,即使网站的某部分停用或崩溃后,用户依然可以使用。



Cassandra

Cassandra 是一个没有单点故障的分布式存储系统。它是前 NoSQL 运动的成员之一,现已开源(已加入 Apache 工
程)。Facebook 用它来做邮箱搜索。

除了 Facebook 之外,Cassandra 也适用于很多其他服务,比如 Digg。




Scribe

Scribe 是个灵活多变的日志系统,Facebook 把它用于多种内部用途。Scribe 用途:处理 Facebook 级别日志,一旦
有新的日志分类生成,Scribe 将自动处理。(Facebook 有上百个日志分类)。




Hadoop and Hive

Hadoop 是款开源 Map/Reduce 框架,它可以轻松处理海量数据。Facebook 用它来做数据分析。(前面就说到
了,Facebook 的数据量是超海量的。)Hive 起源于 Facebook,Hive 可以使用 SQL 查询,让非程序员比较容易使
用 Hadoop。(注 1: Hive 是是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库
表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。 )

Thrift

Facebook 在其不同的服务中,使用了不同的语言。比如: PHP 用在前端,Erlang 用于聊天系统,Java 和 C++用于
其它地方,等等。Thrift 是内部开发的跨语言的框架,把不同的语言绑定在一起,使之可以相互“交流”。这就让
Facebook 的跨语言开发,变得比较轻松。

Facebook 已把 Thrift 开源,Thrift 支持的语言种类将更多。




Varnish

Varnish 是一个 HTTP 加速器,担当负载均衡角色,同时也用于快速处理缓存内容。

Facebook 用 Varnish 处理图片和用户照片,每天都要处理十亿级的请求。和 Facebook 其他的应用应用一
样,Varnish 也是开源的。
Facebook 可以平稳运行,还得利于其他方面
虽然上面已经提到了一些构成 Facebook 系统的软件,但是处理如此庞大的系统,本身就是一项复杂的任务。所
以,下面还将列出使 Facebook 能平稳运行的一些东西。

逐步发布&暗启动

Facebook 有一个系统,他们称之为“门卫”。该系统可以针对不同种类的用户运行不同的代码。(它简单介绍了代
码库中的不同条件。)该系统让 Facebook 逐步发布新特性、A/B 测试、激活仅针对 Facebook 员工的特性 等等。

门卫系统也让 Facebook 做些“暗启动”的事情。比如,在某一特性上线之前,可以激活该特性背后的元件。另外,
它还可以做模拟压力测试,发现瓶颈和潜在的问题。默默启动一般都是在正式启动之前的 2 周完成。

实时系统的简介

Facebook 会仔细监控自身系统,有趣的是,它还监控每个 PHP 函数在实时生产环境下的性能。这一实时 PHP 环境
监控是通过一个叫 XHProf 的开源工具完成的。

逐步禁用某些特性,借以提高性能

如果 Facebook 遇到性能问题,Facebook 有大量的途径来逐步禁用不很重要的特性,以提高其核心特性性能。

尚未提到的东西

虽然这里无法过多深入硬件方面,但硬件绝对是 Facebook 能达到空前规模的重要因素。比如,和其他大型网站一
样,Facebook 也用 CDN 来处理静态内容。Facebook 还在美国西部的俄勒冈州建有一超大的数据中心,可以随时
增加服务器。

当然了,除了前面已经提到的,还有其他大量的软件没有说到。但是,希望能突出其中非常有特色的。

Facebook 和开源之间的 “恋情 ”
Facebook 和开源之间联系,此文不能不提,虽不能说 Facebook 是多么地钟爱开源,但至少可以这样
说,Facebook 是“爱”着开源的。

Facebook 不仅使用(也捐赠)开源软件,比如,Linux、Memcached、MySQL、Hadoop 等等,它还内部开发不少
软件,并且也将之开源。

Facebook 开发的开源工程,包括 HipHop、Cassandra、Thrift 和 Scribe。另外,Facebook 也把 Tornado 开源
了。Tornado 是一个高性能的 Web 服务器框架,由 FriendFeed 幕后团队开发而成。(2009 年 8 月,Facebook 收
购 FriendFeed。)

(Facebook 所用到的开源软件,可以在 Facebook 的开源页面找到。)

面临更多的大规模挑战
Facebook 以一种令人难以置信的速度成长。它的用户群几乎是成倍增加,活跃用户数量现已接近 5 亿。而且,谁
都无法预测今年底,活跃用户量会到多少。

Facebook 甚至成立了一个专门的“成长小组”,该小组不断思考如何让人们使用 facebook 并融入到 facebook 中。

这一快速成长,意味着 Facebook 将遇到不同的性能瓶颈。Facebook 会面临来这如下方面的挑战:PV、搜索、上
传的图片和状态消息,用户之间的交互和用户和 Facebook 之间的交互带来的挑战。
这也是 Facebook 面对的事实。Facebook 的工程师们将继续寻求新方法来扩展(这不只是增加服务器的问题
了)。比如,随着网站成长,其图片存储系统已经多次完全重写。

所以,我们将看到 Facebook 的工程师们奔向下一个“山头”。我们相信他们不会辜负众望。毕竟,他们正跨越山
头,那个我们大多数人仅能向往的山头;他们正扩展网站,那个用户来自全球各地的网站。当你实现那个里程碑
时,你将彪炳史册。

Contenu connexe

Similaire à 揭秘全球最大网站Facebook背后的那些软件

Sns&Facebook080521
Sns&Facebook080521Sns&Facebook080521
Sns&Facebook080521
yiming he
 
Facebook Open Graph Api
Facebook Open Graph ApiFacebook Open Graph Api
Facebook Open Graph Api
Simon Li
 
《氪周刊:互联网创业必读》(第83期)
《氪周刊:互联网创业必读》(第83期)《氪周刊:互联网创业必读》(第83期)
《氪周刊:互联网创业必读》(第83期)
36Kr.com
 
天鹅绒围脖
天鹅绒围脖天鹅绒围脖
天鹅绒围脖
Liu Chao
 
最科技——最周刊十七期
最科技——最周刊十七期最科技——最周刊十七期
最科技——最周刊十七期
最科技团队
 
最科技——最周刊十六期
最科技——最周刊十六期最科技——最周刊十六期
最科技——最周刊十六期
最科技团队
 
Seo简历示范
Seo简历示范Seo简历示范
Seo简历示范
kevin john
 
《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期
51CTO
 
氪周刊63期
氪周刊63期氪周刊63期
氪周刊63期
Chada Chiu
 
开放平台Open Api给我们带来机遇
开放平台Open Api给我们带来机遇开放平台Open Api给我们带来机遇
开放平台Open Api给我们带来机遇
YiDing Tang
 
版本控制与常见的分支模型
版本控制与常见的分支模型版本控制与常见的分支模型
版本控制与常见的分支模型
Tony Deng
 

Similaire à 揭秘全球最大网站Facebook背后的那些软件 (20)

Sns&Facebook080521
Sns&Facebook080521Sns&Facebook080521
Sns&Facebook080521
 
Facebook Open Graph Api
Facebook Open Graph ApiFacebook Open Graph Api
Facebook Open Graph Api
 
網頁設計 - 概述
網頁設計 - 概述網頁設計 - 概述
網頁設計 - 概述
 
introduction of web 2.0
introduction of web 2.0introduction of web 2.0
introduction of web 2.0
 
Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)
 
《氪周刊:互联网创业必读》(第83期)
《氪周刊:互联网创业必读》(第83期)《氪周刊:互联网创业必读》(第83期)
《氪周刊:互联网创业必读》(第83期)
 
天鹅绒围脖
天鹅绒围脖天鹅绒围脖
天鹅绒围脖
 
最科技——最周刊十七期
最科技——最周刊十七期最科技——最周刊十七期
最科技——最周刊十七期
 
最科技——最周刊十六期
最科技——最周刊十六期最科技——最周刊十六期
最科技——最周刊十六期
 
iOS Swift & FireBase 玩上雲端囉
iOS Swift & FireBase 玩上雲端囉iOS Swift & FireBase 玩上雲端囉
iOS Swift & FireBase 玩上雲端囉
 
墊子傷物facebook api
墊子傷物facebook api墊子傷物facebook api
墊子傷物facebook api
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
Seo简历示范
Seo简历示范Seo简历示范
Seo简历示范
 
构建网络工具箱
构建网络工具箱构建网络工具箱
构建网络工具箱
 
網上平台推廣和電子商貿最新趨勢 Tdc
網上平台推廣和電子商貿最新趨勢 Tdc網上平台推廣和電子商貿最新趨勢 Tdc
網上平台推廣和電子商貿最新趨勢 Tdc
 
《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期
 
氪周刊63期
氪周刊63期氪周刊63期
氪周刊63期
 
开放平台Open Api给我们带来机遇
开放平台Open Api给我们带来机遇开放平台Open Api给我们带来机遇
开放平台Open Api给我们带来机遇
 
Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手Codeigniter 3.0 之 30 分鐘就上手
Codeigniter 3.0 之 30 分鐘就上手
 
版本控制与常见的分支模型
版本控制与常见的分支模型版本控制与常见的分支模型
版本控制与常见的分支模型
 

Plus de wensheng wei

你会柔软地想起这个校园
你会柔软地想起这个校园你会柔软地想起这个校园
你会柔软地想起这个校园
wensheng wei
 
几米语录(1)
几米语录(1)几米语录(1)
几米语录(1)
wensheng wei
 
Installation of Subversion on Ubuntu,...
Installation of Subversion on Ubuntu,...Installation of Subversion on Ubuntu,...
Installation of Subversion on Ubuntu,...
wensheng wei
 
高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术
wensheng wei
 
存储过程编写经验和优化措施
存储过程编写经验和优化措施存储过程编写经验和优化措施
存储过程编写经验和优化措施
wensheng wei
 
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 ZendCentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
wensheng wei
 
Happiness is a Journey
Happiness is a JourneyHappiness is a Journey
Happiness is a Journey
wensheng wei
 
Linux Shortcuts and Commands:
Linux Shortcuts and Commands:Linux Shortcuts and Commands:
Linux Shortcuts and Commands:
wensheng wei
 
Java正则表达式详解
Java正则表达式详解Java正则表达式详解
Java正则表达式详解
wensheng wei
 
Linux Security Quick Reference Guide
Linux Security Quick Reference GuideLinux Security Quick Reference Guide
Linux Security Quick Reference Guide
wensheng wei
 
Android模拟器SD Card映像文件使用方法
Android模拟器SD Card映像文件使用方法Android模拟器SD Card映像文件使用方法
Android模拟器SD Card映像文件使用方法
wensheng wei
 
如何硬盘安装ubuntu8.10
如何硬盘安装ubuntu8.10如何硬盘安装ubuntu8.10
如何硬盘安装ubuntu8.10
wensheng wei
 
数据库设计方法、规范与技巧
数据库设计方法、规范与技巧数据库设计方法、规范与技巧
数据库设计方法、规范与技巧
wensheng wei
 
mysql的字符串函数
mysql的字符串函数mysql的字符串函数
mysql的字符串函数
wensheng wei
 
入门-Java运行环境变量的图文教程
入门-Java运行环境变量的图文教程入门-Java运行环境变量的图文教程
入门-Java运行环境变量的图文教程
wensheng wei
 

Plus de wensheng wei (20)

你会柔软地想起这个校园
你会柔软地想起这个校园你会柔软地想起这个校园
你会柔软地想起这个校园
 
几米语录(1)
几米语录(1)几米语录(1)
几米语录(1)
 
我的简历
我的简历我的简历
我的简历
 
Installation of Subversion on Ubuntu,...
Installation of Subversion on Ubuntu,...Installation of Subversion on Ubuntu,...
Installation of Subversion on Ubuntu,...
 
高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术
 
存储过程编写经验和优化措施
存储过程编写经验和优化措施存储过程编写经验和优化措施
存储过程编写经验和优化措施
 
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 ZendCentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
 
Happiness is a Journey
Happiness is a JourneyHappiness is a Journey
Happiness is a Journey
 
Linux Shortcuts and Commands:
Linux Shortcuts and Commands:Linux Shortcuts and Commands:
Linux Shortcuts and Commands:
 
Java正则表达式详解
Java正则表达式详解Java正则表达式详解
Java正则表达式详解
 
Linux Security Quick Reference Guide
Linux Security Quick Reference GuideLinux Security Quick Reference Guide
Linux Security Quick Reference Guide
 
issue35 zh-CN
issue35 zh-CNissue35 zh-CN
issue35 zh-CN
 
Android模拟器SD Card映像文件使用方法
Android模拟器SD Card映像文件使用方法Android模拟器SD Card映像文件使用方法
Android模拟器SD Card映像文件使用方法
 
Subversion FAQ
Subversion FAQSubversion FAQ
Subversion FAQ
 
如何硬盘安装ubuntu8.10
如何硬盘安装ubuntu8.10如何硬盘安装ubuntu8.10
如何硬盘安装ubuntu8.10
 
ubunturef
ubunturefubunturef
ubunturef
 
数据库设计方法、规范与技巧
数据库设计方法、规范与技巧数据库设计方法、规范与技巧
数据库设计方法、规范与技巧
 
mysql的字符串函数
mysql的字符串函数mysql的字符串函数
mysql的字符串函数
 
入门-Java运行环境变量的图文教程
入门-Java运行环境变量的图文教程入门-Java运行环境变量的图文教程
入门-Java运行环境变量的图文教程
 
Java学习路径
Java学习路径Java学习路径
Java学习路径
 

揭秘全球最大网站Facebook背后的那些软件

  • 1. 揭秘全球最大网站 Facebook 背后的那些软件 为这篇文章评分 0 评论 [发表时间]:2010-07-09 07:13 PM (2969 查看)       2010 年 6 月,Google 公布全球 Top 1000 网站。Facebook 独占鳌头。    以 Facebook 现在的经营规模,诸多传统服务器的技术均将崩溃或根本无法支撑。那么面对 5 亿的活跃用 户,Facebook 的工程师们又将如何让网站平稳运转呢?伯乐在线 - 职场博客的这篇文章将展示 Facebook 的工程 师完成这个艰巨任务所用到的一系列软件。 Facebook 级别规模的挑战 在我们深入细节之前,先了解一组 Facebook 不得不面对数据,你就可以想象这种规模。 • Facebook 每月的 PV 量:630,000,000,000 (6 千 3 百亿) • Facebook 上的图片数量超过其他图片网站的总和(包括诸如 Flickr 这样的图片网站) • 每个月有超过 30 亿的图片上传到 Facebook • Facebook 系统每秒可以处理 120 万张图片。这还不包括 Facebook 的 CDN 处理的图片。 • 每月处理超过 250 亿的信息内容(包括用户状态更新,评论等) • Facebook 的服务器数量超过 3 万台(此数据为 2009 年的数据)    Facebook 所用的软件 从某些方面来说,Facebook 还是属于 LAMP 类型网站,但是,为了配合其他大量的组件和服务,Facebook 对已有 的方法,已经做了必要的改变、拓展和修改。
  • 2. 比如: • Facebook 依然使用 PHP,但 Facebook 已重建新的编译器,以满足在其 Web 服务器上加载本地代码,从而提升性 能; • Facebook 使用 Linux 系统,但为了自身目的,也已做了必要的优化。(尤其是在网络吞吐量方面); • Facebook 使用 MySQL,但也对其做优化。    还有定制的系统,比如, Haystack -- 高度可扩展的对象存储,用来处理 Facebook 的庞大的图片;Scribe -- Facebook 的日志系统。 下面展现给大家的是,全球最大的社交网站 Facebook 所使用到的软件。 Memcached Memcached 是一款相当有名的软件。它是分布式内存缓存系统。Facebook(还有大量的网站)用它作为 Web 服务器 和 MySQL 服务器之间的缓存层。经过多年,Facebook 已在 Memcached 和其相关软件(比如,网络栈)上做了大 量优化工作。 Facebook 运行着成千上万的 Memcached 服务器,借以及时处理 TB 级的缓存数据。可以这样说,Facebook 拥有 全球最大的 Memcached 设备。 HipHop for PHP 和运行在本地服务器上代码相比,PHP 的运行速度相对较慢。HipHop 把 PHP 代码转换成 C++代码,提高编译时的 性能。因为 Facebook 很依赖 PHP 来处理信息,有了 HipHop,Facebook 在 Web 服务器方面更是如虎添翼。 HipHop 诞生过程:在 Facebook,一小组工程师(最初是 3 位)用了 18 个月研发而成。 Haystack Haystack 是 Facebook 高性能的图片存储/检索系统。(严格来说,Haystack 是一对象存储,所以它不一定要存储 图片。)Haystack 的工作量超大。Facebook 上有超过 2 百亿张图片,每张图片以四种不同分辨率保存,所 以,Facebook 有超过 8 百亿张图片。 Haystack 的作用不单是处理大量的图片,它的性能才是亮点。我们在前面已提到,Facebook 每秒大概处理 120 万
  • 3. 张图片,这个数据并不包括其 CDN 处理的图片数。这可是个惊人的数据!!! BigPipe BigPipe 是 Facebook 开发的动态网页处理系统。为了达到最优,Facebook 用它来处理每个网页的分块(也 称“Pagelets”)。 比如,聊天窗口是独立检索的,新闻源也是独立检索的。这些 Pagelets 是可以并发检索,性能也随之提高。如 此,即使网站的某部分停用或崩溃后,用户依然可以使用。 Cassandra Cassandra 是一个没有单点故障的分布式存储系统。它是前 NoSQL 运动的成员之一,现已开源(已加入 Apache 工 程)。Facebook 用它来做邮箱搜索。 除了 Facebook 之外,Cassandra 也适用于很多其他服务,比如 Digg。 Scribe Scribe 是个灵活多变的日志系统,Facebook 把它用于多种内部用途。Scribe 用途:处理 Facebook 级别日志,一旦 有新的日志分类生成,Scribe 将自动处理。(Facebook 有上百个日志分类)。 Hadoop and Hive Hadoop 是款开源 Map/Reduce 框架,它可以轻松处理海量数据。Facebook 用它来做数据分析。(前面就说到 了,Facebook 的数据量是超海量的。)Hive 起源于 Facebook,Hive 可以使用 SQL 查询,让非程序员比较容易使 用 Hadoop。(注 1: Hive 是是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库 表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。 ) Thrift Facebook 在其不同的服务中,使用了不同的语言。比如: PHP 用在前端,Erlang 用于聊天系统,Java 和 C++用于 其它地方,等等。Thrift 是内部开发的跨语言的框架,把不同的语言绑定在一起,使之可以相互“交流”。这就让 Facebook 的跨语言开发,变得比较轻松。 Facebook 已把 Thrift 开源,Thrift 支持的语言种类将更多。 Varnish Varnish 是一个 HTTP 加速器,担当负载均衡角色,同时也用于快速处理缓存内容。 Facebook 用 Varnish 处理图片和用户照片,每天都要处理十亿级的请求。和 Facebook 其他的应用应用一 样,Varnish 也是开源的。
  • 4. Facebook 可以平稳运行,还得利于其他方面 虽然上面已经提到了一些构成 Facebook 系统的软件,但是处理如此庞大的系统,本身就是一项复杂的任务。所 以,下面还将列出使 Facebook 能平稳运行的一些东西。 逐步发布&暗启动 Facebook 有一个系统,他们称之为“门卫”。该系统可以针对不同种类的用户运行不同的代码。(它简单介绍了代 码库中的不同条件。)该系统让 Facebook 逐步发布新特性、A/B 测试、激活仅针对 Facebook 员工的特性 等等。 门卫系统也让 Facebook 做些“暗启动”的事情。比如,在某一特性上线之前,可以激活该特性背后的元件。另外, 它还可以做模拟压力测试,发现瓶颈和潜在的问题。默默启动一般都是在正式启动之前的 2 周完成。 实时系统的简介 Facebook 会仔细监控自身系统,有趣的是,它还监控每个 PHP 函数在实时生产环境下的性能。这一实时 PHP 环境 监控是通过一个叫 XHProf 的开源工具完成的。 逐步禁用某些特性,借以提高性能 如果 Facebook 遇到性能问题,Facebook 有大量的途径来逐步禁用不很重要的特性,以提高其核心特性性能。 尚未提到的东西 虽然这里无法过多深入硬件方面,但硬件绝对是 Facebook 能达到空前规模的重要因素。比如,和其他大型网站一 样,Facebook 也用 CDN 来处理静态内容。Facebook 还在美国西部的俄勒冈州建有一超大的数据中心,可以随时 增加服务器。 当然了,除了前面已经提到的,还有其他大量的软件没有说到。但是,希望能突出其中非常有特色的。 Facebook 和开源之间的 “恋情 ” Facebook 和开源之间联系,此文不能不提,虽不能说 Facebook 是多么地钟爱开源,但至少可以这样 说,Facebook 是“爱”着开源的。 Facebook 不仅使用(也捐赠)开源软件,比如,Linux、Memcached、MySQL、Hadoop 等等,它还内部开发不少 软件,并且也将之开源。 Facebook 开发的开源工程,包括 HipHop、Cassandra、Thrift 和 Scribe。另外,Facebook 也把 Tornado 开源 了。Tornado 是一个高性能的 Web 服务器框架,由 FriendFeed 幕后团队开发而成。(2009 年 8 月,Facebook 收 购 FriendFeed。) (Facebook 所用到的开源软件,可以在 Facebook 的开源页面找到。) 面临更多的大规模挑战 Facebook 以一种令人难以置信的速度成长。它的用户群几乎是成倍增加,活跃用户数量现已接近 5 亿。而且,谁 都无法预测今年底,活跃用户量会到多少。 Facebook 甚至成立了一个专门的“成长小组”,该小组不断思考如何让人们使用 facebook 并融入到 facebook 中。 这一快速成长,意味着 Facebook 将遇到不同的性能瓶颈。Facebook 会面临来这如下方面的挑战:PV、搜索、上 传的图片和状态消息,用户之间的交互和用户和 Facebook 之间的交互带来的挑战。
  • 5. 这也是 Facebook 面对的事实。Facebook 的工程师们将继续寻求新方法来扩展(这不只是增加服务器的问题 了)。比如,随着网站成长,其图片存储系统已经多次完全重写。 所以,我们将看到 Facebook 的工程师们奔向下一个“山头”。我们相信他们不会辜负众望。毕竟,他们正跨越山 头,那个我们大多数人仅能向往的山头;他们正扩展网站,那个用户来自全球各地的网站。当你实现那个里程碑 时,你将彪炳史册。