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

news/2024/5/20 14:52:04/文章来源:https://blog.csdn.net/iteye_3055/article/details/82041615




   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

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

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

   HipHop for PHP HipHop for PHP

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

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

   Haystack Haystack

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

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

   BigPipe bigpipe

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

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

   Cassandra Cassandra

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

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

   Scribe Scribe

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

   Hadoop and HiveHadoop

   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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_823951.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用VS2012开发的网站或者webservice在IIS6.0上发布的注意事项

由于新版的VS2012的出现,很多人转而使用VS2012作为开发工具,微软每次新的版本都会新增一些功能,带给我们不少的惊喜,但是在VS2012或者VS2010下开发的网站或者webservice在部署时要注意了,由于VS2010以上版本的.net fra…

网站导航颜色停留_【设计师必看】提高网站易访问性的5个UI设计技巧

以下内容由摹客团队翻译整理,仅供学习交流。生活中难免会有这样的场景,例如打电话告诉别人你开会快要迟到了。这听起来是一个很简单的操作,对吗? 我也这么认为。但随即我又思考到另外一个问题,当手中有一堆重物时又该如何进行操作…

最简单的小说网站的部署

1.首先准备: 一个公网ip,一台云服务器 2.用ssh连接云服务器 3.rm -rf /etc/yum.repos.d/*.repo 清除损坏的repo包 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo 下载华为的yum yum cl…

网站文件放在linux的哪个目录中,linux 的命令放在哪个目录下

满意答案yuemeiren682017.05.16采纳率:59% 等级:12已帮助:10073人cd的基本语法是:cd[选项][参数]选项:-P,如果目录是符号链接,则进入实际的目录;-L,如果目录是符号链接,则进行链接…

刚新建好的动态网站项目,创建jsp页面就报错

拿到刚刚可以运行的Eclipse,就马上想敲码了,但一创建项目之后再创建jsp页面就报错 ! 报错的内容大概为缺乏对应的jar包。我们常用Tomcat为中间体,而他本身是带有开发jsp网站的对应的jar包,检查在创建的时候是否有在Ecl…

想学网站建设与设计的书籍_楚雄网站建设_做网站_网站设计

介绍一诺建站公司成立于2006年,主要提供楚雄网络基础服务和网络推广服务。服务项目包含:楚雄网站建设,手机网站建设,楚雄网站制作,楚雄网站优化,楚雄网站改版,网站SEO优化推广等网络相关服务。我…

页面加载多久算超时_打开一个网站,花几秒钟算正常?

全文共4167字,预计学习时长11分钟图源:turnkeyInternet查询谷歌会发现很多文章指出2到5秒钟网页就能加载完毕。但是,是什么使2-5秒成为预设范围呢?直觉告诉你,答案必定比这更复杂。没错,真正的答案比任何试…

网站正在建设中_网站建设中更有利SEO优化的细节

点击蓝字获取更多优惠信息我们现在日常在网络上所花费的时间超出三分之一,甚至更高。在信息化成型的时代,如果在信息市场中不掉队呢?企业推广外宣的途径和方式有了许多选择,企业网站建设、小程序应用、各网络平台推送,…

C# WPF Image如何利用IsMouseOver变成不同的图片

参考代码&#xff1a; <Image Cursor"Hand" x:Name"testImage" Height"200" Width"200" Stretch"Uniform" MouseEnter"Image_MouseEnter" MouseLeave"Image_MouseLeave"><Image.Style>&l…

wos 文献被引_有哪些免费查找、下载文献的网站?(内含SCI-hub最新地址)

各位小伙伴&#xff0c;好久没有送福利给大家了&#xff0c;今天又要送给大家一份免费课程了&#xff01;&#xff0c;有没有开始激动了&#xff1f;科研文献浩如烟海&#xff0c;如何才能找到对自己有重要参考意义的文献&#xff0c;是每个科研工作者都必须要面对的课题&#…

飞鱼星路由器如何限制外网访问服务器网站,飞鱼星路由器如何限制禁止指定IP上网...

你知道飞鱼星路由器如何限制禁止指定IP上网吗?下面是学习啦小编整理的一些关于飞鱼星路由器如何限制禁止指定IP上网的相关资料&#xff0c;供你参考。飞鱼星路由器限制禁止指定IP上网的方法&#xff1a;如何设置让有的电脑能上网而有的电脑不能上网&#xff0c;这个是一个常见…

vue cli中使用预渲染技术解决SEO对SPA不友好问题

单页面应用(SPA)对于SEO不友好的问题可以通过预渲染(Prerender)和服务端渲染(SSR)技术解决 本文主要记录预渲染技术在vue cli构建的项目中的使用 用到插件prerender-spa-plugin、vue-meta-info 内容1. 引入依赖 prerender-spa-plugin2. vue.config.js配置3. 在main.js 添加监听…

allegro如何导入中文丝印_SEO优化中导入链接的相关知识

什么是导入链接&#xff1f;导入链接&#xff08;Inbound Link)即指向你的网站的其他网站的URL。搜索引擎认为&#xff0c;如果你的网站有价值&#xff0c;其他网站会提到你的网站&#xff1b;被提到的次数越多&#xff0c;就说明网站的价值越高。将导入链接纳入排名重要指标的…

vue+springboot 制作属于自己的个人网站 ① vue前端部署

一、准备工作 1.1 下载node vue ① 下载 node node.js下载地址&#xff1a;建议下载稳定版Node.jshttps://nodejs.org/zh-cn/ ② 下载vue 在控制台输入如下指令 npm install -g vue/cli 1.2 租用xx云服务器&#xff0c;这里以阿里云服务器为例 建议百度 阿里云/华为云/百…

vue+springboot 制作属于自己的个人网站 ② spring boot后端部署

一、阿里云服务器安装MySQL ① 阿里云服务器操作系统查看&#xff1a; ② 推荐安装流程 阿里云服务器 linux系统安装mysql8.0.20&#xff0c;超详细步骤_长腿欧巴~的博客-CSDN博客 其中需要注意的是 &#xff08;1&#xff09;强力卸载之前安装mysql的命令&#xff1a; yum …

树展示 移动端_百度移动端开始用网站品牌名代替网址显示

最近&#xff0c;有站长发现&#xff0c;百度移动端最近做了部分改版&#xff1a;移动端部分网站域名开始逐渐被网站相关名称代替&#xff0c;PC端还是用域名展示&#xff0c;卢松松博客网站域名也被替换成网站品牌名显示!百度移动端用网站相关名称代替网址显示这波改版细节。简…

nginx部署网站

nginx部署网站源码编译的nginxyum安装的nginx源码编译的nginx cd /usr/local/nginx/html # 源码编译默认位置把里面所有文件删掉或是只删掉index.html 不想删掉也可以更改文件名 # 任选其一 rm -rf * rm -rf index.html mv index.html 111 # 111 为你要改成的名字接下来就可…

spark网站日志分析实例

文章目录网站日志分析实例日志过滤日志分析网站日志分析实例 日志是非结构化数据&#xff0c;做分析需要先将日志文件做数据清洗。将数据清洗为结构化数据&#xff0c;入库分析。 另外&#xff0c;还有考虑数据的管理&#xff0c;譬如日志数据增量更新等等。针对数据量大&…

网址添加html 301,通过修改.htaccess批量实现网站内页301重定向跳转 | 甄选网

网站死链有时候是不可避免的&#xff0c;网站栏目页或者文章内页因为某些原因调整了路径&#xff0c;如果想保留之前的链接就需要做301跳转。网站首页的301重定向容易做&#xff0c;不过内页的301就相对复杂一些&#xff0c;通过修改.htaccess文件可以轻松完成这项工作。htacce…

手机通过IP访问电脑(端口、网站),手机以及电脑IP查看,防火墙开放指定端口设置。

1.通过IP互访&#xff1a; 手机电脑须在同一局域网&#xff08;网段&#xff09;下。 提示&#xff1a;如果连接没有问题&#xff0c;仍无法访问。需要开放电脑防火墙。可以全开也可以开放特定端口。 方法请看最下面 &#xff12;.操作&#xff1a; 1.电脑开移动热点手机连热…