`
xinlanzero
  • 浏览: 252996 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

揭秘Facebook 的系统架构

阅读更多

Facebook是一个社交网路服务网站,同时Facebook是美国排名第一的照片分享站点,每天上载八百五十万张照片。那么Facebook系统架构是什么样的呢?本文将为你揭秘!

来源:http://www.quora.com/What-is-Facebooks-architecture (由Micha?l Figuière回答)

根据我现有的阅读和谈话,我所理解的今天Facebook的架构如下:

◆  Web 前端是由 PHP 写的。Facebook 的 HipHop [1] 会把PHP转成 C++并用 g++编译,这样就可以为模板和Web逻贺业务层提供高的性能。

◆  业务逻辑以Service的形式存在,其使用Thrift [2]。这些Service根据需求的不同由PHP,C++或Java实现(也可以用到了其它的一些语言……)

◆  用Java写的Services没有用到任何一个企业级的应用服务器,但用到了Facebook自己的定制的应用服务器。看上去好像是重新发明轮子,但是这些Services只被暴露给Thrift使用(绝大所数是这样),Tomcat太重量级了,即使是Jetty也可能太过了点,其附加值对Facebook所需要的没有意义。

◆  持久化由MySQL, Memcached [3], Facebook 的 Cassandra [4], Hadoop 的 HBase [5] 完成。Memcached 使用了MySQL的内存Cache。Facebook 工程师承认他们的Cassandra 使用正在减少,因为他们更喜欢HBase,因为它的更简单的一致性模型,以到其MapReduce能力。

◆  离线处理使用Hadoop 和 Hive

◆  日志,点击,feeds数据使用Scribe [6],把其聚合并存在 HDFS,其使用Scribe-HDFS[7],因而允许使用MapReduce进行扩展分析。

◆  BigPipe [8] 是他们的定制技术,用来加速页面显示。

◆  Varnish Cache [9]用作HTTP代理。他们用这个的原因是高速和有效率。 [10].

◆  用来搞定用户上传的十亿张照片的存储,其由Haystack处理,Facebook自己开发了一个Ad-Hoc存储方案,其主要做了一些低层优化和“仅追加”写技术 [11].

◆  Facebook Messages 使用了自己的架构,其明显地构建在了一个动态集群的基础架构上。业务逻辑和持久化被封装在一个所谓的’Cell’。每个‘Cell’都处理一部分用户,新的‘Cell’可以因为访问热度被添加[12]。持久化归档使用HBase [13]。

◆  Facebook Messages 的搜索引擎由存储在HBase中的一个倒置索引的构建。 [14]

◆  Facebook 搜索引擎实现细节据我所知目前是未知状态。

◆  Typeahead 搜索使用了一个定制的存储和检索逻辑。 [15]

◆  Chat 基于一个Epoll 服务器,这个服务器由Erlang 开发,由Thrift存取 [16]

◆  关于那些供给给上述组件的资源,下面是一些信息和数量,但是有一些是未知的:

◆  Facebook估计有超过60,000 台服务器[16]。他们最新的数据中心在俄勒冈州的Prineville,其基于完全自定设计的硬件[17] 那是最近才公开的 Open Compute 项目[18]。

◆  300 TB 的数据存在 Memcached 中处理 [19]

◆  他们的Hadoop 和 Hive 集群由3000 服务器组成,每台服务器有8个核,32GB的内存,12TB的硬盘,全部有2万4千个CPU的核,96TB内存和36PB的硬盘。 [20]

◆  每天有1000亿的点击量,500亿张照片,100 billion hits per day, 50 billion photos, 3 万亿个对象被 Cache,每天130TB的日志(2010年7月的数据) [21]

参考引用

[1] HipHop for PHP: http://developers.facebook.com/blog/post/358

[2] Thrift: http://thrift.apache.org/

[3] Memcached: http://memcached.org/

[4] Cassandra: http://cassandra.apache.org/

[5] HBase: http://hbase.apache.org/

[6] Scribe: https://github.com/facebook/scribe

[7] Scribe-HDFS: http://hadoopblog.blogspot.com/2009/06/hdfs-scribe-integration.html

[8] BigPipe: http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919

[9] Varnish Cache: http://www.varnish-cache.org/

[10] Facebook goes for Varnish: http://www.varnish-software.com/customers/facebook

[11] Needle in a haystack: efficient storage of billions of photos:http://www.facebook.com/note.php?note_id=76191543919

[12] Scaling the Messages Application Back End:http://www.facebook.com/note.php?note_id=10150148835363920

[13] The Underlying Technology of Messages:https://www.facebook.com/note.php?note_id=454991608919

[14] The Underlying Technology of Messages Tech Talk:http://www.facebook.com/video/video.php?v=690851516105

[15] Facebook’s typeahead search architecture:http://www.facebook.com/video/video.php?v=432864835468

[16] Facebook Chat: http://www.facebook.com/note.php?note_id=14218138919

[17] Who has the most Web Servers?:http://www.datacenterknowledge.com/archives/2009/05/14/whos-got-the-most-web-servers/

[18] Building Efficient Data Centers with the Open Compute Project:http://www.facebook.com/note.php?note_id=10150144039563920

[19] Open Compute Project: http://opencompute.org/

[20] Facebook’s architecture presentation at Devoxx 2010:http://www.devoxx.com

[21] Scaling Facebook to 500 millions users and beyond:http://www.facebook.com/note.php?note_id=409881258919

【编辑推荐】

  1. 专访Facebook工程师:迁移5亿用户数据的挑战
  2. Facebook是怎么做MySQL备份的?
  3. 揭秘:Facebook如何发布代码
  4. 揭秘Facebook设计师是怎么工作的
  5. Facebook是如何管理代码的

 

分享到:
评论

相关推荐

    Facebook数据仓库揭秘

    ### Facebook数据仓库揭秘:RCFile高效存储结构 #### RCFile:一种混合型高效存储结构 在大数据处理领域,特别是对于像Facebook这样的大型社交平台来说,数据仓库的设计与优化至关重要。Facebook提出了一种新的...

    Facebook数据仓库揭秘之RCFile高效存储结构.docx

    ### Facebook数据仓库揭秘之RCFile高效存储结构 #### RCFile高效存储结构概述 Facebook的数据仓库在处理海量数据方面面临着巨大挑战。为了优化数据处理效率,Facebook引入了一种名为RCFile(Record Columnar File...

    Facebook数据仓库揭秘:RCFile高效存储结构

    本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮演重要角色。Facebook曾在2010ICDE...

    Facebook揭秘深度学习编译器Glow.pdf

    Facebook揭秘深度学习编译器Glow文档涉及的知识点主要包括深度学习编译器的概念、作用、工作原理以及Facebook在这一领域的研究成果。深度学习编译器是一种专门针对深度学习模型进行优化的工具,其目的在于提高深度...

    架构之美——顶级业界软件专家揭秘软件设计之美

    本书由Diomidis Spinellis等著,王海鹏等翻译,是一本讲诉架构设计之美的著作,书中介绍了什么是一个好的架构,怎样创建软件架构,什么是伸缩性的架构设计,并通过风靡全球的社交软件Facebook平台的架构距离,具体...

    faceback数据仓库揭秘

    《faceback数据仓库揭秘:RCFile存储结构的卓越性能》 Facebook的数据分析系统,作为全球最大的社交网络之一,处理着海量的数据,其数据仓库的设计与优化成为业界关注的焦点。本文将深入探讨Facebook数据仓库中的一...

    Android应用开发揭秘14

    5. **组件化开发**:为了提高代码复用和模块化,开发者可能会讨论组件化开发的思想,如何将应用拆分成独立的模块,每个模块负责特定的功能,使得代码结构更清晰,也方便团队协作。 6. **插件化开发**:在大型应用中...

    十亿级视频播放技术优化揭秘-腾讯.pdf

    据数据显示,在Facebook核心平台上,每天有超过80亿段视频被观看,短视频不仅为Facebook带来了强劲的收入,也成为了互联网的一个重要流量入口。在中国市场,QQ空间的数据同样显示出了短视频的火爆程度,2016年的视频...

    程序之美系列(架构之美、安全之美、数据之美)

    《架构之美》内容包括:facebook的架构如何建立在以数据为中心的应用生态系统之上。xen的创新架构对操作系统未来的影响。kde项目的社群过程如何让软件的架构从粗略的草图成为漂亮的系统。蔓延的特征如何让gnu emacs...

    Android应用开发揭秘6

    - **Android Framework**:了解Android系统的架构,包括Activity、Service、BroadcastReceiver和ContentProvider等组件的生命周期和交互方式。深入学习这些组件的源码,可以更好地控制应用的行为。 - **UI渲染机制*...

    Android应用开发揭秘源码.7z

    1. **Android架构**:Android系统由Linux内核、库、运行时环境、应用程序框架和应用程序组成。理解这些组成部分的工作原理对于开发高质量的应用至关重要。 2. **Activity和Intent**:Activity是Android应用的基本...

    Android应用开发揭秘9

    《Android应用开发揭秘9》这篇博文主要探讨了在Android应用开发中的高级技术和实践,结合了源码分析和工具使用的主题。以下是对这些知识点的详细解析: 1. **源码分析**: - 在Android开发中,理解源码是提升技能...

    新浪微博内耗揭秘.pdf

    9. **市场期待与实际表现**:微博曾被看好为Twitter和Facebook的结合体,但其营收能力和市场表现并未达到类似平台的高度,反映出在快速发展的同时,也面临着巨大的市场压力和盈利能力的考验。 10. **未来展望**:...

    揭秘一线互联网企业 前端JavaScript高级面试

    ### 揭秘一线互联网企业前端JavaScript高级面试 随着互联网技术的快速发展,前端开发技术日新月异,JavaScript作为前端开发的核心语言,其重要性不言而喻。在一线互联网企业中,JavaScript高级面试成为了筛选优秀...

    React事件处理深度剖析:揭秘组件间的交互艺术

    React是一个用于构建用户界面的开源JavaScript库,由Facebook维护。它于2013年首次发布,自那以后就因其高效性、灵活性和可扩展性而广受欢迎。React主要用于构建单页应用(Single-Page Applications, SPAs)、移动...

    MySQL内幕揭秘:探索MySQL调优指南,解锁MySQL的强大功能

    它在各个大型平台和企业中扮演着关键角色,如谷歌、Facebook、Twitter、美团、阿里巴巴和百度等,这些公司均依赖MySQL来支撑其庞大的数据处理需求。 在性能调优方面,MySQL的优化策略主要涉及以下几个维度: 1. **...

Global site tag (gtag.js) - Google Analytics