阅读更多

2顶
1踩

企业架构

原创新闻 Facebook架构解读

2016-01-18 16:10 by 副主编 mengyidan1988 评论(3) 有11263人浏览



从我看过的各种资料,还有与各式人等的交谈中,可以得出Facebook现在的架构是这样的:
  • Web前端用PHP语言编写,然后用HipHop Compiler[1]转换为C++语言,再用g++编译器编写,从而提供高性能的模板与web逻辑执行层。
  • 完全依赖静态编译所造成的限制,让Facebook开始启用HipHop Interpreter [2]及HipHop虚拟机,将PHP代码转译为HipHop ByteCode[3]。
  • 其业务逻辑以服务形式存在,使用Thrift框架[4]。其中一些服务根据具体需求,在实现时使用了PHP、C++或者Java语言(可能还用到了一些其他语言)。
  • 使用Java实现的服务并未使用任何常规的企业应用服务,而是使用Facebook的定制应用服务器。一开始这些都被视为重复工作,不过随着这些服务仅(或大多)使用Thrift框架,Tomcat甚至Jetty都显得开销过大、值不符实了。
  • 用MySQL、Memcached[5]、Hadoop’s HBase[6]实现持久化;用Memcached作为MySQL缓存与通用缓存。
  • 用Hadoop和Hive实现离线处理。
  • 类似日志、链接与feed之类的数据传输用Scribe[7]实现;用Scribe-HDFS [8]来完成HDFS的聚合存储工作;从而可以用MapReduce进行深入扩展分析。
  • BigPipe[9]是他们的定制技术,用流水线逻辑加快页面呈现。
  • 用Varnish Cache[10]实现HTTP代理,这套软件因其性能与效率较高而受到青睐[11]。
  • Facebook用户所发布的照片数以亿计,其存储由Haystack这个ad-hoc存储解决方案(由Facebook开发)来处理——包括对其进行低级别优化与只扩展写入方式[12]。
  • Facebook Message使用了自身架构——众所周知是基于分区与动态集群管理的架构。业务逻辑与持久化被封装到所谓的“Cell”中。每个Cell处理一部分用户的请求;随着用户数增加再扩展新的Cell[13]。使用HBase实现持久化[14]。
  • Facebook Message的搜索引擎建立在反向索引之上,存储于HBase之中[15]。
  • Facebook搜索引擎的实现细节尚不得而知。
  • 预输入搜索(typeahead search)使用定制化存储与检索逻辑[16]。
  • 聊天服务建立在Epoll服务器之上,由Erlang开发,用Thrift[17]访问。
  • Facebook还构建了一个自动化系统,负责启动适当的修复工作流来管理应对警报,并在故障无法解决时通知人类管理员[18]。

已知信息中,各个组件的配置资源、一些信息还有数字如下:
  • Facebook拥有超过6万台服务器 [18]。最近发布的数据中心位于俄勒冈州普赖恩维尔市,硬件完全自行设计[19] ,并被归为Open Compute Project[20]。
  • Memcached所存储与处理的数据多达300TB[21]。
  • 其Hadoop与Hive集群由3000台8核、32G内存、12TB空间的服务器组成,总计达到2.4万核、96TB内存、36PB空间[22]。
  • 在2010年7月份就已达到每天1000亿的点击量,500亿张图片,3万亿个缓存对象,130TB的日志[22]。
  • 备注:Cassandra已经不再使用。Facebook的实时分析系统是基于记录所有输入的链接(来自用户页面的like和comment请求)。将其记录在HDFS中,而不是用Puma将其拽出再分批存储到HBase中。

相关资料与可参考文章还包括:
Facebook近期发布了一篇博文,详细描述了将会在Altoona数据中心试用的下一代网络架构。这种处理大流量的方式非常新颖,优于传统方式与协议。 Facebook发布了下一代网络

还有就是近期宣布强化搜索功能,以大数据分析与数据管理基础作为支持。Facebook大数据分析增强搜索功能

另外可参考的文章还有:

参考资料包括:
[1] HipHop for PHP
[2] Making HPHPi Faster
[3] The HipHop Virtual Machine
[4] Thrift
[5] Memcached
[6] HBase
[7] Scribe
[8] Scribe-HDFS
[9] BigPipe
[10] Varnish Cache
[11] Facebook goes for Varnish
[12] Needle in a haystack: efficient storage of billions of photos
[13] Scaling the Messages Application Back End
[14] The Underlying Technology of Messages
[15] The Underlying Technology of Messages Tech Talk
[16] Facebook’s typeahead search architecture
[17] Facebook Chat
[18] Who has the most Web Servers?
[19] Building Efficient Data Centers with the Open Compute Project
[20] Open Compute Project
[21] Facebook’s architecture presentation at Devoxx 2010
[22] Scaling Facebook to 500 millions users and beyond

原文链接:What is Facebook’s architecture?(译者/Vera 责编/钱曙光)
  • 大小: 34.2 KB
来自: 极客头条
2
1
评论 共 3 条 请登录后发表评论
3 楼 Gould 2016-01-25 15:00
mark!!!
2 楼 netkiller.github.com 2016-01-25 14:15
没有任何参考价值
1 楼 dieslrae 2016-01-20 23:46
404打不开啊

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • oracle sql 语句暗示 hints

    oracle sql 暗示 描述了oracle sql 语句的所有暗示

  • Oracle中Hint深入理解(转)

    Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。 此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从 而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器...

  • 数据库优化器后门 Hints

    点击蓝色“有关SQL”关注我哟加个“星标”,天天与10000人一起快乐成长知识星球特供稿https://articles.zsxq.com/id_ddwf21qgviw8.html机器与...

  • MySQL Hints:控制查询优化器的选择

    MySQL Hints是一组特殊的注释或指令,可以直接嵌入到SQL查询中,以改变MySQL优化器的默认行为。这些Hints通常被用于解决性能问题,或者当开发者比优化器更了解数据分布和查询特性时,来指导优化器选择更好的查询计划。MySQL Hints是一种强大的工具,可以帮助我们解决复杂的查询性能问题。然而,它们应该谨慎使用,并且总是与彻底的测试和验证相结合。通过正确使用Hints,我们可以引导MySQL优化器做出更明智的决策,从而提高数据库查询的性能和稳定性。

  • mysql sql提示_MySQL 使用SQL提示

    SQL提示(SQL HINT)是优化数据库的一种重要手段,简单来说就是在SQL语句中加入一些人为的提示来达到优化操作的目的。下面是一个使用SQL提示的例子:SELECTSQL_BUFFER_RESULTS*FROM……这个语句将强制MySQL 生成一个临时结果集。只要临时结果集生成后,所有表上的锁定均被释放。这能在遇到锁问题时或者更长时间将结果传给客户端时有所帮助,因为可以尽快释放锁资...

  • 1. PLSQL程序开发总结

    1. PLSQL程序优化原则 1.1 导致性能问题的内在原因 导致系统性能出现问题从系统底层分析也就是如下几个原因: l  CPU占用率过高,资源争用导致等待 l  内存使用率过高,内存不足需要磁盘虚拟内存 l  IO占用率过高,磁盘访问需要等待 1.2 PLSQL优化的核心思想 PLSQL优化实际上就是避免出现“导致性能问题的内在原因”,实际上编写程序,以及性能问题跟踪应该本着这个

  • 数据库SQL语句自动提示插件

    数据库SQL语句自动提示插件,可智能提示要输入的sql语句。

  • SqlServer语句自动提示插件

    编写SQL自动提示工具,找了半天不容易啊,共享哈。灰常好用!

  • 图解:千万级记录的海量数据表使用Hints优化----从3分钟优化到几十毫秒

    下面分析一个案例,千万级记录的海量数据表使用Hints优化----从3分钟优化到40ms。 为了说明这个过程,我构造y

  • SQL 优化提示

    如果是字符型关键字,用条件过滤比较加‘’引起来,否则,不会使用索引。 一、操作符优化 1、IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表...

  • Hints优化查询

    Hints let you make decisions usually made by the optimizer. As an application designer, you might know information about your data that the optimizer does not know. For example, you might know that a certain index is more selective for certain queries

  • Oracle SQL Hints

    hints can be categorized as follows: Hints for Optimization Approaches and Goals, Hints for Access Paths, Hints for Query Transformations, Hints for Join Orders, Hints for Join Operations, Hints for P

  • 书写SQL语句的智能提示工具(SQL_Prompt_4 插件)

    书写sql语句也这么久(嘿嘿大概2年了吧),从最初的学习到现在,都期盼能向VS那样有智能的提示,我敲一个单词,他就提示!那该多好啊!又可以减少错误,也提高了开发效率。哎…没办法,身边的人也都这样敲,看来是大家都没有找到SQL_prompt这个插件,或者说根本不知道这个插件[我反正今天才知道的],大家也都期盼到了Sqlserver2008能智能提示!Sqlserver2008有这个提示功能我真是喜出...

  • sql 语句 颜色提示

    蓝色说明是系统变量,黑色才是用户自定义变量。 字段显示蓝色,要修改成其他,否则sql语句出错

  • 参数 PLSQL_OPTIMIZE_LEVEL

    196. QUESTION 32 In your database server, the parameter PLSQL_OPTIMIZE_LEVEL has been set to 2. What would this setting achieve? A> It degrades the run time and compiler performance. B> It p

  • T-SQL Hints

    ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

  • /*+ hint*/用法,该如何解决

    /*+ use_hash(b, a)*/用法SELECT /*+ use_hash(b, a)*/ 1, NVL(b.AgentWorkGroup, ' '), .............................. from table1 a, table2 b where .....................其中加 :/*+ use_hash(b, a)*/ 能提高查询...

  • ORACLE 优化器和Hints

    Oracle Hints是一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划,从而认为干预系统优化器的选择。我们可以用Oracle Hints来实现: 使用的优化器的类型 基于代价的优化器的优化目标,是all_rows还是first_rows。 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。 表之间的连接类型 表之间的连接顺序 语句的并行程度 注意: 可以通过

Global site tag (gtag.js) - Google Analytics