阅读更多

2顶
1踩

企业架构

原创新闻 Facebook架构解读

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



从我看过的各种资料,还有与各式人等的交谈中,可以得出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优化hint语句

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

  • mysql常用的hint[转]

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

  • SQL中的hint

    语法:`SELECT * FROM table_name WITH (INDEX(index_name)) WHERE ...`- **文档和注释**:使用`HINT`时,应添加适当的注释,说明为什么使用该`HINT`以及期望的效果,以便未来的维护者理解。- 语法:`/*+ INDEX(table_name index_name) */`- 语法:`/*+ DRIVING_SITE(table_name) */`- 语法:`/*+ NO_PARALLEL(table_name) */`

  • jdbc 查询数据时出错

    /* 查询数据库,输出符合要求的记录的情况 */ public static void query() { conn = getConnection(); // 同样先要获取连接,即连接到数据库 try { String sql = "select * from question"; // 查询数据的sql语句 st = (Statement) conn.createStatem

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

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

  • 一些常见的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

  • oracle hint用法

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

  • Ctrip DAL Database Sharding Support

    配置指南 参见下面的例子 demo config dal name="dal.prize.test">   databaseSets>     databaseSet name="manytypes" provider="sqlProvider">         add name="HotelPubDB"

  • [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 />

  • Spring Data JPA - 如何创建查询(10)应用Query Hints

    作者简介 陈喆,现就职于中科院某研究所担任副研究员,专注于工业云平台、MES系统的设计与研发。 内容来源:https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/#jpa.query-hints 先解释一下什么是Query Hint。参考Orcale官方文档。默认情况下,@NameQuery或@Na...

  • 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; ...

  • sql优化之hint运用

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

  • PLSQL_性能优化系列04_Oracle Optimizer优化器

    2014-09-25 Created By BaoXinjian 一、摘要 1. Oracle优化器介绍 本文讲述了Oracle优化器的概念、工作原理和使用方法,兼顾了Oracle8i、9i以及最新的10g三个版本。理解本文将有助于您更好的更有效的进行SQL优化工作。 2. RBO优化器 RBO是一种基于规则的优化器,随着CBO优化器的逐步发展和完善,在最新的10g版本中Oracle...

  • SQL Server 2008中的Hints(提示)的简单整理

          SQL Server的系统查询过程 负责在SELECT查询执行时候产生查询执行计划。SQL Server会“智能”地选择一个高效计划来取代低效的一个。大多数时候,SQL Server会把这份工作干得很棒。但正如有些人所担忧的,SQL Server并不是万能的,有时候,我们通过查询执行计划、表统计信息、支撑的索引及其他因素,研究性能之后,发现查询优化器选择的执行计划没有达到预期的效果,或...

Global site tag (gtag.js) - Google Analytics