阅读更多

2顶
1踩

企业架构

原创新闻 Facebook架构解读

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



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

发表评论

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

相关推荐

  • Hints优化.pdf

    Hints优化.pdf

  • 通过分析SQL语句的执行计划优化SQL

    如何干预执行计划 – – 使用hints提示 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在Oracle中,是通过为语句添加hints(提示)来实现干预优化器优化的目的。 hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划

  • 数据库中 SQL Hint 是什么?

    最近在调研业界其他数据库中 SQL Hint 功能的设计和实现,整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解,这里整理一篇文章来对其进行梳理,一是帮助自己未来回顾,加深自己的思考,二是也能帮助大家更好的了解数据库 SQL Hint 的实现原理。

  • 通过分析SQL语句的执行计划优化SQL(总结)

    第1章 性能调整综述 第2章 有效的应用设计 第3章 SQL语句处理的过程 第4章 ORACLE的优化器 第5章 ORACLE的执行计划 访问路径(方法) -- access path 表之间的连接 如何产生执行计划 如何分析执行计划 如何干预执行计划 - - 使用hints提示 具体案例分析 第6章 其它注意事项

  • 使用Mysql期间遇到的一些错误

    Err 1114 ERROR: 1114, The table 'XXXXXXX' is full 老版本的innodb_data_file_path = ibdata1:10M:autoextend:max:128M配置,改为innodb_data_file_path = ibdata1:10M:autoextend 查看数据库所在磁盘,可能是磁盘满了。 Err 1041 [Err] 1041 - Out of memory; check if mysqld or some other..

  • SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行)

    前面几篇我们分析了关于SQL Server关于性能调优的一系列内容,我把它分为两个模块。第一个模块注重基础内容的掌握,共分7篇文章完成,内容涵盖一系列基础运算算法,详细分析了如何查看执行计划、掌握执行计划优化点,并一一列举了日常我们平常所写的T-SQL语句所会应用的运算符。我相信你平常所写的T-SQL语句在这几篇文章中都能找到相应的分解运算符。第二个模块注重SQL Server执行T-SQL语句的时候一些内幕解析,共分为5篇文章完成,其中包括:查询优化器的运行方式、运行时几个优化指标值检测,统计信息

  • Hints用法大全

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法:1. /*+ALL_ROWS*/表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.例如:SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’; 2. /*+F

  • SQL优化技巧

    理论上,它会考虑所有可行的执行计划,实际上,除了简单的SQL语句之外,优化器为了保持合理的优化时间,不会考虑太多种组合。hint必须紧随delete、insert、merge、select和update关键字,注释分隔符的第一个字符必须是加号。除非改变执行环境,使用hint你将告诉查询优化器,针对某跳特定SQL语句应该考虑哪些操作或者不应该考虑哪些操作。一般而言,hint的语法错误不会引发报错,如果解析器无法解析它们,就会把它们当做注释。hint是添加到SQL语句中的指令,用来影响查询优化器的判定。...

  • Oracle中Hint深入理解(转)

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

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

  • mysql常用的hint[转]

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

  • SQL优化--用各种hints优化一条SQL

    oracle 10g R2加各种hints优化一条SQL:Select Count(*) From t_Ho_Order_Statistics --2032946Select ...

  • Sql优化(五) hint(提示)介绍

    上篇介绍了oracle优化器。尽管oracle优化器很智能,但有时候你想自己选择执行计划,可以通过hint实现。在开发测试环境中,可以通过hint测试不同执行计划的性能。Hint的缺点是增加了管理代码的额外负担,当数据库或环境发...

  • sql hint 的作用

    1、写HINT目的 手工指定SQL语句的执行计划   hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用hints来实现:   1) 使用的优化器的类型   2) 基于代价的优化器的优化目标,是all_

  • Lint常见的问题及解决方案

    通用的解决方案: 在java代码中同样可以忽略(ignore) Lint 警告:@SuppressLint(“忽略的警告名称”),如:Handler泄漏(@SuppressLint(“HandlerLeak”))要是你不清楚要忽略的警告具体是什么名字,那就直接忽略 all,当然是当前类/方法/对象: @SuppressLint("all") 在XML中:tools:ignore="忽略"

  • postgresql 排它约束

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

  • 1. PLSQL程序开发总结

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

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

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

Global site tag (gtag.js) - Google Analytics