`
yale
  • 浏览: 360431 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Facebook运用软件

阅读更多

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

 

Facebook级别规模的挑战
在我们深入细节之前,先了解一组Facebook不得不面对数据,你就可以想象这种规模。
1) Facebook每月的PV量:630,000,000,000 (6万3千亿)
2) Facebook上的图片数量超过其他图片网站的总和(包括诸如Flickr这样的图片网站)
3) 每个月有超过30亿的图片上传到Facebook
4) Facebook系统每秒可以处理120万张图片。这还不包括Facebook的CDN处理的图片。
5) 每月处理超过250亿的信息内容(包括用户状态更新,评论等)
6) Facebook的服务器数量超过3万台(此数据为2009年的数据)

 

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

 

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
 是Facebook高性能的图片存储/检索系统。(严格来说,Haystack是一对象存储,所以它不一定
要存储图片。)Haystack的工作量超大。Facebook上有超过2百亿张图片,每张图片以四种不同分辨率保存,
所以,Facebook有超过8百亿张图片。
Haystack的作用不单是处理大量的图片,它的性能才是亮点。我们在前面已提到,Facebook每秒大概处
理120万张图片,这个数据并不包括其CDN处理的图片数。这可是个惊人的数据!!!

 

BigPipe
BigPipe是Facebook开发的动态网页处理系统。为了达到最优,Facebook用它来处理每个网页的分块
(也称“Pagelets”)。
比如,聊天窗口是独立检索的,新闻源也是独立检索的。这些Pagelets是可以并发检索,性能也随之提
高。如此,即使网站的某部分停用或崩溃后,用户依然可以使用。

 

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

分享到:
评论

相关推荐

    《Facebook效应》中文完整版

    - **平台转型**: 扎克伯格计划将Facebook转变为一个开放的软件开发平台。 - **行业地位**: Facebook正式超越竞争对手MySpace,在行业中确立了自己的领先地位。 - **长远目标**: 扎克伯格希望Facebook能够成为互联网...

    Android-Facebook开源的一个轻松构建文本布局的Android库

    库内部优化了文本测量和绘制过程,降低了内存消耗,同时提供了对辅助功能的支持,如读屏软件的兼容。 总结来说,`TextLayoutBuilder`是Facebook为Android开发者提供的一款强大的文本布局工具。它简化了复杂的文本...

    Android 仿facebook布局效果.zip

    通过深入研究"SlidingMenuDemo"项目,开发者可以了解到如何将这些技术综合运用,实现类似Facebook应用的滑动菜单效果。此外,这也可以作为进一步定制化和优化的基础,比如加入动画过渡、触摸反馈等高级特性。总之,...

    优秀的超级DV软件下载

    为了方便用户分享作品,超级DV软件通常内置了上传至社交媒体的功能,如YouTube、Facebook、Vimeo等,用户可以直接从软件内部将作品发布到这些平台。同时,对于希望保存到物理介质的用户,软件还提供了DVD或蓝光刻录...

    软件产品推广宣传网站模板

    在IT行业中,软件产品的推广和宣传是至关重要的环节,它能有效地吸引潜在客户,提高产品的知名度和销售量。...通过深入理解和灵活运用html源码,开发者可以打造一个既专业又个性化的推广平台,助力软件产品的成功销售。

    软件工程中的软件度量与评估.pptx

    - **Facebook的性能度量**:监控和优化系统性能表现。 #### 第4章:软件度量的优势与应用 - **优势**: - **提高质量**:通过对关键指标的跟踪,及时发现问题,保证软件质量。 - **降低成本**:早期识别风险点...

    免费快易网站推广软件2012_SP4

    4. **社交媒体整合**:软件集成了各大社交媒体平台,用户可以一键分享网站内容到Facebook、Twitter等社交网络,扩大影响力,吸引更多的潜在访问者。 5. **网站分析**:内置了基本的网站统计工具,能实时监测网站的...

    防恶意点击软件

    8. **集成与优化**:防恶意点击软件通常可以与主流的广告平台(如Google AdWords、Facebook Ads等)集成,帮助广告主在平台上实现自动防护。 9. **机器学习与人工智能**:随着技术的发展,许多防恶意点击软件开始...

    基于多角度视频的人脸识别系统的软件工程设计与实现.docx

    Facebook 提出的 DeepFace 使用深度卷积神经网络在 440 万张图像上进行训练,在人脸公开测试数据集 LFW 上获得了 97.35% 的识别率。 本文的设计目标是实现基于多角度视频的人脸识别系统,克服基于单角度视频的人脸...

    国外社交软件ppt

    通过这份【国外社交软件PPT】,读者可以全面了解全球社交媒体的现状,学习如何有效地运用这些工具,无论是为了个人学习、提升社交技能,还是为了企业的市场战略制定,都将受益匪浅。无论你是学生、教师、市场营销...

    关于社交软件的论述(Jan van Eijck等)Discourses on Social Software (Jan van Eijck, et al)

    所探讨的社交软件并不仅限于我们日常使用的社交平台,比如Facebook、Twitter等,它涉及更广泛的领域,包括在互联网上形成和维持社会互动的各种软件系统。 书中详细介绍了社交软件的基本概念、社会软件与社会科学的...

    软件系统宣传首页

    在构建一个软件系统的宣传首页时...总的来说,“软件系统宣传首页”的创建是一个综合运用HTML、JavaScript、CSS和可能的前端框架的过程,目的是以最有效的方式展示产品特性,吸引并引导用户进一步了解和使用软件系统。

    各种社交软件分析三角折纸背景欧美风网络科技ppt模板.rar

    同时,案例研究如Facebook如何应对隐私争议,Snapchat如何吸引青少年用户等,可以提供实战经验。 5. **技术趋势与未来展望**:随着5G、人工智能、虚拟现实等新技术的发展,社交软件也在不断进化。例如,视频直播、...

    react-reactavatareditor类似Facebook的头像图片编辑器组件

    在React生态系统中,开发者可以利用各种丰富的第三方组件来加速应用的开发进程,其中之一就是`react-avatar-editor`。...通过理解和运用这些知识点,开发者可以轻松地将高质量的图片编辑功能集成到自己的React项目中。

    即时通信软件在中国办公自动化进程中的应用与分析——以QQ、微信和钉钉为例.pdf

    针对这些问题,文章建议应采取措施打破对即时通信工具的依赖,明晰工作与个人生活的边界,并坚持以人为本,理性对待即时通信技术,充分发挥员工的主观能动性,合理运用软件而不过度依赖工具。 文章还提到,2014年,...

    软件工程中的迭代与增量开发.pptx

    - **Netflix**:运用迭代优化算法改善视频推荐系统,提高推荐精度,增加用户黏性。 - **Spotify**:采用增量式音乐推荐系统,提升个性化推荐效果,增加用户满意度。 综上所述,软件工程中的迭代与增量开发方法能够...

    软件工程实践中的团队合作技巧.pptx

    - **定义**:软件工程实践是指在软件开发过程中运用一系列工程原理、方法和技术的实践过程。其目的是为了提高软件开发的效率和质量,确保项目能够按时、按质完成。 - **重要性**: - **解决问题**:帮助团队成员...

    手机跑步软件网站模板是一款适合手机APP软件开发官网模板下载 .rar

    7. **社交媒体集成**:与Facebook、Instagram等社交平台的整合,允许用户一键分享他们的跑步成就。 8. **隐私政策与条款**:为符合法规要求,网站会包含关于数据隐私和使用条款的详细信息。 9. **联系我们**:提供...

    网络 ,营销, 专家,最好的软件

    "网络营销专家"软件可能集成了广告投放平台,如Google AdWords或Facebook Ads,让用户能便捷地创建和管理在线广告,同时进行A/B测试,找出最佳广告组合,提升转化率。 社交媒体管理也是该软件的一大亮点。它可能...

    500套安卓软件源码打包.rar

    比如,我们可以看到如何使用SQLite数据库进行数据持久化,如何利用SharedPreferences存储用户偏好,如何运用Intent进行组件间通信,以及如何使用AdMob或Facebook SDK实现广告和社交功能等。 再者,源码中的错误处理...

Global site tag (gtag.js) - Google Analytics