阅读更多

2顶
1踩

企业架构

原创新闻 Facebook架构解读

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



从我看过的各种资料,还有与各式人等的交谈中,可以得出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打不开啊

发表评论

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

相关推荐

  • mysql常用的hint[转]

    对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法。同样,在mysql里,也有类似的hint功能。下面介绍一些常用的。 强制索引 FORCE INDEX SELECT * FROM TABLE1 FORCE INDEX (FIELD1) … 以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。...

  • hint UNNEST 可以提示CBO进行Subquery Unnesting

    SQL> set linesize 200 SQL> set pagesize 200 SQL> ALTER SESSION SET STATISTICS_LEVEL=ALL; 会话已更改。 SQL> select sql_text from v$sqlarea where (address, hash_value) in (select DECO...

  • sql查询结果太大导致oom解决方案

    执行的查询sql结果集太大,导致oom的现象很常见,下面是一些解决方案 条数限制的逻辑 限制最多查询10万条,设置maxRow为10万+1条,如果实际查询到的rowNum为10万+1,那么说明超过最大限制条数,报错 public static int resultLimit = 100000; statement.setMa...

  • postgresql 排它约束

    --pg支持 EXCLUSION Constraint,排它约束是约束中定义的操作计算结果为false,则不允许插入 Exclusion constraints ensure that if any two rows are compared on the specified columns or expressions using the speci...

  • 一些常见的SQL报错

    This section lists messages generated when SQL statements are parsed by the Oracle Server. Most, but not all, messages in this section indicate incorrect SQL syntax. For more information about SQL syn

  • 常用的几种Hints优化一条SQL

    环境:  oracle 10g R2  Select Count(*) From t_Ho_Order_Statistics --2032946 Select Count(*) From t_Ho_Order_Info       --2032946 其他都是小的维度表 统计信息已经检查过了,差不多10天前的(不过我10天前跑过这个SQL,出来的执行计划一样), 这里,这里就把注意力集中在两个大表

  • oracle hint用法

    常见的 从网上copy的1. /*+ALL_ROWS*/  表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.  例如:  SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=SCOTT;   2. /*+FIRST_ROWS*/  表明对语句块选择基于开销的优化方法,并获得最佳响

  • 【转】 ORACLE常用SQL优化hint语句

    ORACLE常用SQL优化hint语句 http://oracle.chinaitlab.com/induction/802186.html 在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法:  1. /*+ALL_ROWS*/  表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.  例如:

  • sql优化之hint运用

    HINT优化: 虽然ORACLE如今很智能几乎不用我们去干扰sql语句的执行计划,它就会按照一个正确的执行逻辑执行完你的sql得到你所要的结果。        不过有时面对大量的数据和频繁DML操作的表,ORACLE自己在执行sql 的时候可能也会发生错误,走错执行路径,你可能有时会发现一条很简单的sql语句执行了半天还没出来。这时候你就需要通过查看sql的执行轨迹是否符合正确的最好的那一条。

  • 【DBAplus】SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势

    原创2016-09-12韩锋 作者介绍 韩锋,宜信技术研发中心数据库架构师。精通多种关系型数据库,曾任职于当当网、TOM在线等公司,曾任多家公司首席DBA、数据库架构师等职,多...

  • [Spark SQL基础]-- 基本语法之 select [hints ...]

    背景 今天偶然有机会看见了以前一位同学在 join 中使用了 mapjoin 小表广播的优化,由此激起了我对 select 语法中的 hints 部分的深入挖掘,并分享出来,供小伙伴们参考,不足之处,还望赐教! 目录 select 基本语法 hints 来源 hints 的语法和选项 hints 使用的组合 内容 1 select 基本语法结构 SELECT [hin...

  • ORACLE10G中OPTIMIZER_GOAL参数被废弃问题

    ORACLE10G中OPTIMIZER_GOAL参数被废弃问题  如果在ORACLE10G服务器上产生了一个SQL TRACE文件,直接使用ORACLE10G的客户端再利用TKPROF格式化SQL语句的执行计划,不会有问题,如果使用10G以下的ORACLE客户端,比如9I,8I连接到10G的客户端,那么,如果使用了EXPLAIN参数产生SQL语句的执行计划,则在格式化的语句的执行计

  • Oracle Hints,Oracle并行模式(Parallel) /*+parallel(t,4)*/ 在SQL调优中的重要作用

      /*+parallel(t,4)*/在SQL调优中的重要作用! 2013年11月17日 12:59:24 雾里看花5566 阅读数:5422更多 个人分类: 数据库-oracle 谈谈HINT /*+parallel(t,4)*/在SQL调优中的重要作用! /*+parallel(t,4)*/在大表查询等操作中能够起到良好的效果, 基于并行查询要启动并行进程、分配任务与系统资源、合并...

  • T-SQL脚本优化技巧

    <br />1)对于SELECT/UPDATE语句必须显示的定义所有的列,避免使用星号。 <br />2)在执行SELECT/INSERT/UPDATE/DELETE语句时,请考虑执行规划的重用,尽量考虑用SP-EXECUTESQL存储过程。 <br />3)优先使用 SELECT...INTO,然后使用 INSERT...SELECT,以避免大量死锁。 <br />4)如果需要删除所有的数据,用TRUNCATE TABLE 代替DELETE 。<br />5)避免使用DISTINCT 语句。 <br />

  • Oracle中Hint深入理解(转)

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

  • sql加了hints sql_id就发生变化

    v$sql v$sql 列出统计信息在shared SQL areas 没有GROUP BY 字句, 每行包含每个原始SQL文本的每个child v$sql 显示的统计信息是通常更新在查询执行尾端。 v$sqlarea: v$sqlarea v$sqlarea 显示统计信息在恭喜SQL区域,每个SQL语句 一行 测试1: 先清空shared pool: SQL&amp;gt; ...

  • postgresql

    异常处理 ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT, use PERFORM instead. 把select 改为PERFORM 例如: select test() 改为PERFORM test()

Global site tag (gtag.js) - Google Analytics