狠狠撸

狠狠撸Share a Scribd company logo
揭秘全球最大网站 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 的工程师们奔向下一个“山头”。我们相信他们不会辜负众望。毕竟,他们正跨越山
头,那个我们大多数人仅能向往的山头;他们正扩展网站,那个用户来自全球各地的网站。当你实现那个里程碑
时,你将彪炳史册。

More Related Content

揭秘全球最大网站贵补肠别产辞辞办背后的那些软件

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