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的巨大规模上的日志系统。
现在我们介绍一下全球最大的社会网络网站的所使用的软件吧。
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上的。 这是一个惊人的数字。关于Facebook的图片存储请参考51CTO之前的报道《Facebook图片存储架构技术全解析
》。
BigPipe
BigPipe是Facebook开发的一个动态的网页服务系统。 Facebook使用它来按section(称为“pagelets”)处理每个网页,以获取最佳性能。
例如,在聊天窗口是分开的,新闻Feed也是分开的,等等。 这些pagelets可以在一个页面表现的时候同时使用,这是该页面表现的时候获取进来的。即使某些工程的一部分关闭或中端,用户也可以获得一部分网页。
Cassandra
Cassandra是一个不会单点失败的分布式存储系统。 这是为NoSQL运动的一个重要组成部分,并已公开的源代码(它甚至成为一个Apache项目)。Facebook在搜索功能中使用它。
除了Facebook,还有一些人也用它,例如Digg的。 不过最近Twitter放弃了Cassandra。关于Cassandra的更多介绍可以参考51CTO的专题《奔向自由?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.找到。
分享到:
相关推荐
2. **响应式设计**:由于用户可能在不同设备上访问Facebook后台,因此模板需要具备响应式设计,能自动适应各种屏幕尺寸,如桌面、平板电脑和手机。 3. **HTML/CSS/JavaScript**:这些是网页开发的基础技术,HTML...
facebook数据表结构一览图
1. **安装与激活插件**:首先,你需要在 WordPress 后台的插件管理界面搜索 "Facebook Pixel" 或 "Facebook 多像素",找到对应的插件并进行安装。安装完成后,激活插件以启用其功能。 2. **创建 Facebook 像素**:...
Facebook API和Facebook_JAR包是开发者用来与Facebook平台进行交互的重要工具,它们使得开发者能够创建应用程序,集成到Facebook生态系统中,实现数据交换、用户登录验证、发布内容等功能。Facebook API通常指的是...
Facebook签到位置预测是一个涉及大数据分析、地理位置服务和社交网络行为学的复杂主题。在这个问题中,我们关注的是如何利用用户在Facebook上分享的签到信息来预测他们可能的未来签到位置。以下是对这个话题的详细...
在IT行业中,Facebook分享是一项常见的功能,特别是在移动应用和网页开发中。Facebook分享允许用户将内容,如文本、图片或链接,快速便捷地发布到他们的Facebook时间线,从而扩大信息的传播范围。在这个"facebook...
Facebook Android SDK 4.8.2 是Facebook提供的一款用于帮助Android开发者在其应用中集成Facebook功能的开发工具包。这个版本的SDK包含了实现Facebook登录、分享、邀请、广告以及分析等功能所需的库和资源。通过使用...
Facebook的源代码框架与Android框架紧密集成,展示了如何充分利用Android SDK和各种API来创建用户界面、处理网络请求、管理数据存储以及实现后台服务。例如,它可能包含了对Android的Activity、Fragment、Intent、...
2. ShareDialog与ShareApi:这两个接口提供了分享功能的基本实现,ShareDialog用于UI交互式的分享,而ShareApi则允许在没有用户界面的情况下进行后台分享。 3. 分享预览:在分享前,应用可以使用ContentPreview类来...
Unity Facebook API 官方 Demo 是一个为游戏开发者提供的完整工程,它展示了如何在Unity引擎中集成Facebook的功能,以便实现用户登录、得分分享、排行榜展示以及头像获取等社交互动功能。这个Demo项目名为...
3. **AsyncTask**:这是一个用于在后台执行任务并更新UI的工具类,Facebook广告SDK可能使用它来处理网络请求、数据解析等耗时操作,同时确保UI线程不被阻塞。 4. **Parcelable接口**:在Android中,Parcelable接口...
在IT行业中,Facebook的登录和统计功能是许多开发者在构建应用程序时经常使用的工具。Facebook提供了SDK(Software Development Kit)来简化这些过程,使得开发者能够轻松地整合Facebook的登录系统和数据分析服务。...
3. **Magento后台配置**:在Magento后台管理界面,你需要找到扩展管理部分,安装并激活Facebook登录插件。然后,输入从Facebook开发者平台获得的App ID和App Secret。此外,还可以配置其他选项,如登录按钮样式、回...
这本书的书名——《打造Facebook:亲历Facebook爆发的5年》很嚣张,谁有资格可以说这句话呢,当然,扎克伯格最有资格,但他不会亲自来告诉你,至少从目前的情况来看,近几年都不大可能。而且,这不是一个人的公司。...
Facebook登录分享发布信息程序是基于C#编程语言和Facebook SDK(FaceBook.dll)构建的应用,旨在为用户提供一种简便的方式,通过Webview组件实现用户在Windows桌面应用中的Facebook账户登录,并授权应用发布信息到...
Facebook Android SDK 4.18.0 是一个用于在Android应用程序中集成Facebook功能的开发工具包。这个SDK允许开发者轻松地实现用户登录、分享、广告、分析和其他Facebook服务。2017年发布的这个版本是当时最新的,为...
接入Facebook登录功能是Android应用开发中的常见需求,它允许用户使用他们的Facebook账号快速登录到你的应用,提升用户体验。而为了实现这一功能,开发者需要获取到应用的APK秘钥散列(Key Hash),这是一个用于验证...
"FaceBook插件开发入门教程" 本文将从Facebook插件开发的角度,讲解如何创建一个简单的Facebook插件,并介绍Facebook插件开发的基本概念和流程。 一、Facebook插件开发简介 Facebook插件开发是指在Facebook平台上...
【标题】:“Web版Facebook登录”探讨 在Web开发领域,Facebook登录是一种常见的社交登录方式,它允许用户通过他们的Facebook账号快速登录到第三方网站或应用,简化了注册和登录流程。本文将深入讨论Web版Facebook...
Facebook Flash 示例教程旨在帮助开发者和设计师了解如何在Flash环境中与Facebook平台进行集成,创建互动性的社交媒体应用程序或游戏。本教程将深入探讨以下关键知识点: 1. **Facebook API**:Facebook 提供了一组...