Facebook背后的软件
Facebook的数据规模使得很多传统的解决方案根本不适用,或者无法分解来处理。保持一个拥有5亿用户的系统一直稳定可靠的运行,并不是一件很容易的事情。这篇文章介绍了一下Facebook使用的软件。
Facebook的扩展性挑战
在我们讨论细节之前,这里有一些Facebook已经做的软件规模:
> Facebook有570000000000每月页面浏览量 (据Google Ad Planner)。
> Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站)。
> 每个月超过30亿张照片被上传。
> Facebook的系统服务每秒处理120万张照片 。 这不包括CDN服务中处理的照片。
> 每月超过25亿条的内容 (状态更新,评论等)被共享。
> Facebook有超过30,000服务器 (这个数字是去年的!)
Facebook扩展所依赖的软件
Facebook是在某些程度上说仍然是LAMP的站点,但它比普通的LAMP大得多,以纳入其他元素和很多服务,并修改现行的做法。
例如:
> Facebook也使用PHP,但它已经为它建立一个编译器,以便它可以分为本地代码打开了Web服务器,从而提高性能。
> Facebook也使用Linux,但它特别为网络吞吐量做了优化。
> Facebook也使用MySQL,但主要是作为一个Key-value的持久性存储,Jions和服务器逻辑操作在Web服务器上操作。因为在那里更容易执行。
> 还有是自编写的系统,如Haystack,一个高度可扩展的对象存储,用来存储Facebook的照片。还有Scribe,一个日志系统,可以运行在Facebook的巨大规模上的日志系统。
OK。现在 我们介绍一下全球最大的社会网络网站的所使用的软件吧。
Memcached
memcached
的
是现在互联网最有名的软件之一了。 这是一个分布式内存缓存系统,用来作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问比较慢)。
多年以来,Facebook已经提出了一些优化Memcached和一些周边软件的办法。如压缩network stack。
Facebook的每时每刻都有数10TB的数据缓存在Memcached的数千台服务器上。 它可能是世界上最大的Memcached的集群了。
HipHop for PHP
PHP作为一种脚本语言,和本地程序相比是运行缓慢的。 HipHop
可以将PHP转换成C++代码,然后再进行编译,可以获得更好的性能。 因为Facebook严重依赖PHP,这使得其可以让Web服务器运行的更有效率。
一个工程师小团队在Facebook(一开始只有三人)花了18个月时间开发HipHop,现在已经是可用状态。
Haystack
Haystack
是Facebook的高性能照片存储/检索系统(严格来说,是一个对象存储,因此它并不一定要存储照片)。 它有许多工作要做;有超过20亿张上传的照片,并且每一个被保存在四个不同的分辨率,因此有超过800亿张照片。
它不仅是对能够处理的上亿的照片,运行表现也是至关重要的。 正如我们前面提到的,Facebook的服务约120万张照片每秒 ,这个数字不包括CDN上的。 这是一个惊人的数字。
BigPipe
BigPipe
是Facebook开发的一个动态的网页服务系统。 Facebook使用它来按section(称为“pagelets”)处理每个网页,以获取最佳性能。
例如,在聊天窗口是分开的,新闻Feed也是分开的,等等。 这些pagelets可以在一个页面表现的时候同时使用,这是该页面表现的时候获取进来的。即使某些工程的一部分关闭或中端,用户也可以获得一部分网页。
Cassandra
Cassandra
是一个不会单点失败的分布式存储系统。 这是为NoSQL运动的一个重要组成部分,并已公开的源代码(它甚至成为一个Apache项目)。Facebook在搜索功能中使用它。
除了Facebook,还有一些人也用它,例如Digg的。 不过最近Twitter放弃了cassandra
。
Scribe
Scribe
是一个灵活的日志系统,Facebook在他的内部大量使用。 它的能够处理在Facebook的大规模日志记录,并自动处理新的日志记录类别,Facebook有数百个日志类别(categories)。
Hadoop and Hive
Hadoop
的是一个开源的map-reduce实现,使得它可以在进行大数据上进行运算。 Facebook的使用这个进行数据分析(而我们都知道,Facebook已经大量的数据)。 Hive
就是发源于Facebook,使得对于Hadoop使用的SQL查询成为可能,从而是其更容易对非程序员使用。
Hadoop和Hive是开源的(Apache项目),有为数众多的追随者,例如雅虎和Twitter。
Thrift
Facebook使用的几种不同的语言和不同的services。 PHP是最终用于前端,Erlang是用于聊天,Java和C ++也使用于多种场所,也许还有其他语言。Thrift
是一个内部开发的跨语言的框架,联系语言,使他们可以在一起合作,从而使他们之间可以交互。 这使得Facebook可以更容易为继续保持其跨语言的发展。
Facebook已经让Thrift开源。更多的语言支持已被添加到Thrift。
Varnish
Varnish
是一个HTTP加速器,可以作为一个负载平衡器,并缓存的内容,然后可以以闪电般的速度送达。
Facebook使用的arnish来处理照片和个人资料图片,处理每天数十亿的要求。 和其他的东西一样,Varnish是开源的。
保持Facebook 顺畅运行的其他东西。
我们已经提到的软件,组成了Facebook的系统,并帮助运行在大规模上。 但是,处理这么大的系统是一个复杂的任务,因此我们将列出一些其他的东西,他们保持了Facebook的平稳运行。
渐进发布和暗启动
Facebook有一个他们所谓的守门人制度(Gatekeeper),允许他们可以给不同的用户运行两套不同的系统。 这让Facebook渐进的发布新的功能,A / B测试,只为Facebook雇员发布等的某些特性。
Gatekeeper
也可以让Facebook实现“暗启动”,这是在用户使用一些功能之前,就激活某些功能(因为用户没有察觉,所以称之为暗启动)。
这将作为一个现实世界的压力测试,在正式启动前,帮助揭露一些功能障碍和其他问题。 暗启动通常是在正式启动前两个星期。
Profiling的直播系统
Facebook的仔细监控其系统,有趣的是它也负责监察每一个PHP函数在生产环境的性能。 检测各个PHP的环境的配置运行情况。使用开源工具,XHProf
。
渐进的利用关闭功能来提升性能
如果Facebook运行时出现性能问题,有一个办法,就是逐步禁用不太重要的功能,以增强Facebook的大量核心功能表现。
我们没有提及的事情
我们没有提到硬件相关的事情,但这也是提高可伸缩性的重要一环。例如,就像其他大型站点,Facebook利用CDN来处理静态内容。Facebook还有一个the huge data center
,可以帮助他扩展更多的服务。
Facebook的开源情节
不仅是Facebook使用(和帮助),如Linux,Memcached的,MySQL和Hadoop的开源软件,以及许多其他情况下,也贡献许多了其内部开发的软件。
Facebook亦开源了Tornado,一个高性能的网络服务器框架,由FriendFeed团队开发。
关于开放源码软件清单,可以在Facebook’s Open Source page
找到。
本文来自:颜开的博客——我自然
原文标题:Facebook背后的软件
译文链接:http://www.yankay.com/
原文链接:http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/
分享到:
相关推荐
Facebook作为全球最大的社交网络平台,其背后的基础设施规模庞大且复杂。为了高效管理其数据中心的网络流量,Facebook采用了SDN(Software-Defined Networking,软件定义网络)技术。SDN的核心理念是将网络控制层面...
Facebook是全球最大的社交媒体平台之一,其背后有着复杂的网络架构来支撑数亿用户的日常互动。这份“Facebook的架构”PDF文件详细介绍了这个庞然大物的技术基础。以下是对这份文档内容的概览: Facebook架构的核心...
Facebook是全球最大的社交媒体平台之一,其背后支撑的架构设计是一个庞大的、复杂且高度优化的系统。这个压缩包“FaceBook架构设计.zip”包含了对Facebook如何处理海量数据、提供高效服务的深入探讨。以下是对其中...
总的来说,这个压缩包提供的内容揭示了Facebook服务器设计背后的技术细节,特别是AMD主板在其中的角色,这对于我们理解现代数据中心的构建原理,以及如何利用AMD硬件来驱动大规模的云计算和服务提供了宝贵的资料。...
- **故障恢复**:当发生硬件或软件故障时,系统需要具备快速恢复的能力。 - **数据一致性保证**:在分布式环境中,数据一致性是一个复杂的问题,需要特别注意。 #### 未来的发展方向 除了当前的实践外,文章还...
这些网站的成功不仅依赖于其创新的功能和吸引人的内容,更在于背后复杂而高效的架构设计。本文将从社区网站的技术特性、涉及的各个方面以及关注的关键点出发,深入探讨这些大型互动网站的架构预览。 社区网站技术...
健壮、优雅、灵活和易维护的软件架构是怎样炼成的?本书通过一系列优秀的文章回答了这个问题,这些文章来自于十几位当今一流的软件设计师和架构师。... ·jikes rvm自优化、自支持的运行时环境背后的魔法...
6. **通信和社交图标**:电话、邮件、消息气泡、社交网络标志(如Facebook、Twitter、LinkedIn)等,用于表示沟通和分享功能。 7. **媒体和娱乐图标**:音乐播放器、视频播放、暂停、快进、快退、音量控制等,常见...
4-1-facebook的项目开发流程和工程师的绩效管理机制-覃超 4-2-亿万级用户产品转型背后的项目快速交付-王海燕 4-3-支撑滴滴高歌猛进的管理基石-易芹芹 4-4-知名互联网公司的管理方法-乔梁-《腾讯方法,你能学到什么》...
- **Facebook**通过用户驱动的方式进行迭代开发,根据用户的使用习惯和反馈不断改进产品特性。 #### 第三章:反馈循环与持续改进 **反馈循环**是软件工程中用于收集和利用反馈信息以改进产品质量的关键机制。其...
在本文中,我们将深入探讨Facebook登录背后的技术细节,特别是与CSS(层叠样式表)相关的方面。 首先,Facebook登录界面的前端设计通常涉及到HTML、CSS和JavaScript的结合。CSS在这里的作用是定义页面的布局、颜色...
8. **分享与导出**:制作好的电子相册可以直接上传到社交媒体平台,如YouTube、Facebook,或者通过电子邮件、蓝牙等方式分享给亲友。此外,也可以保存为文件,刻录到DVD,以便于离线观看。 压缩包中的`aiqi-...
5. 数据可视化:Tableau、PowerBI等软件用于将复杂的数据转化为直观的图表,帮助决策者理解数据背后的故事。 三、案例分析 1. 电商领域:亚马逊利用大数据分析用户的购物行为,推荐个性化商品,提高销售额。 2. ...
这篇文章深入探讨了Facebook改名背后的战略意图以及元宇宙的相关知识。Facebook的这一举动不仅仅是为了推广虚拟现实(VR)技术,而是将其视为公司未来的赌注,旨在构建一个全面的元宇宙生态系统。元宇宙是一个融合了...
它揭示了科技巨头背后的人际动态、决策过程以及快速发展的科技行业如何塑造我们的社会。书中的故事激发了对创业、技术创新以及个人与公司成长的思考,对IT行业的发展历程和未来趋势有着深远的影响。 压缩包内的文件...