说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

[企业开源系列]后起之秀Facebook凭什么挑战互联网霸主Google?

HTML文档下载 WORD文档下载 PDF文档下载
尽管Google声称拥抱开源,但是其对于某些技术、服务器信息讳莫如深。在此方面,Facebook要显得大度得多。这也是为什么Facebook能够在短短的几年间一跃成为全球最大的社交网站。本文就来探讨Facebook背后的开源力量。

尽管Google极其推崇开源,并推出大量的开源项目,但是从根本上来看,Google的开源力度、开放程度远远比不上Facebook。这也是为什么Facebook能够在短短的几年间,一跃成为全球最大的社交网站的原因之一。本文就来看看Facebook背后的开源力量。

[企业开源系列]系列专注于全球著名企业(包括国内企业)中的开源现状,探讨开源软件的力量,以使更多的开发者了解开源、贡献开源,打造更加和谐的国内开源生态。

一、Facebook vs. Google

Facebook从2004年创始以来,已经从一个哈佛大学校内网站一跃发展成为了全球最大的社交网站。目前,Facebook的用户数量已经突破10亿,全球平均每天有7亿用户在使用其服务,远远将Google+(活跃用户3.43亿)甩在了身后。

相比Google+,Facebook已经完胜。Facebook大量的用户也造就其巨额的广告收入,在互联网广告业务方面,Facebook已经成为Google最具威胁的竞争对手。

Facebook发展如此迅速,与其内部大量的人才分不开。而近几年,Facebook与Google的竞争也体现在人才抢夺战中。Facebook疯狂从Google、微软、苹果、雅虎等公司挖掘人才,以微软为例,2012年每1名Facebook员工跳槽至微软,就有30.5名微软员工跳槽至Facebook。而Google对Facebook的该比例为15.5 : 1。

如今Facebook的员工总数已达5000人,尽管如此,Facebook公司的规模还只相当于Google的十分之一(Google员工已经达到5万多人)。而在资金方面,Facebook比Google也差了一大截。

在人力、财力都不及对手的情况下,Facebook凭什么得以与互联网的霸主Google抗衡?其中一个很大的因素就是开源,这样可以吸引全球更多的开发者为你工作,以此来弥补某些不足。

二、Facebook的开源大手笔

尽管Google一直声称拥抱开源,但是Google对于其某些技术、服务器方面的信息讳莫如深。而在此方面,Facebook要显得大度得多。

1.  开源Facebook平台代码

Facebook在2008年选择将该平台上的重要部分的代码和应用工具开源。Facebook称,平台已经基本发展成熟,此举可以让开发者更全面地理解整个Facebook平台,更容易地为Facebook开发应用软件,并可以回报社区。

该项目代号为“FBOpen”,其中包含了实现Facebook平台的一些基础设施、功能等,如API架构、FQL分析器、FBML分析器、FBJS,以及许多常用方法和标签的实现,代码基于PHP。这意味着其他开发者可以很方便地利用Facebook所采用的基础设施和技术。

项目地址:https://github.com/facebook/platform/tree/master/fbopen

开源的代码中,绝大部分使用CPAL(Common Public Attribution License)许可,而FBML分析器使用的是MPL(Mozilla Public License)许可证。

2.  开源数据中心和网络系统

为了在数据中心上与Google对抗,2011年Facebook宣布了开源计算项目(Open Compute Project,简称OCP)计划。该项目旨在创建“开源的”数据中心硬件,Facebook数据中心设计图、服务器配置、数据中心监控界面等悉数开源。Facebook此举的目的是为大数据中心建立更快、更便宜、用材更少的硬件。更重要的是,通过OCP免费提供的设计,任何企业都可以使用它,并对其进行调整。

今年5月份,Facebook又宣布将其包括交换机等网络设备在内的网络系统开源。

采用开源数据中心,使得Facebook可以与Google这一规模、经济实力都在它之上的对手在数据中心领域展开竞争。

三、开源基础设施

除了大的系统平台、数据中心外,Facebook也开源了其所使用的基础设施和服务。介绍如下。

1.  Apache Cassandra

这是一个分布式的存储系统,用来管理结构化数据,并可以扩展非常大型的、跨多个商品服务器(commodity servers)的大数据集,而不用担心出现单点故障。

2.  Apache Hive

这是一个数据仓库基础设施,构建于Hadoop之上,其提供的工具可以轻松对大数据集进行数据汇总、即席查询(adhoc querying)和分析等。

3.  FlashCache

这是一个针对Linux的通用的回写块缓存。它可以作为一个可加载的Linux内核模块,在文件系统之下使用。

4.  HipHop for PHP

这是一个PHP虚拟机、运行时、JIT(Just In Time,实时生产系统)。它的前身是HPHPc(可将PHP代码编译为C++的项目)。HipHop虚拟机为PHP代码带来了一个大大的性能提升。

5.  folly

folly(Facebook Open-source LibrarY)是一个提供类似std和boost功能的底层库,基于C++11特性。folly的开发者包括了Andrei Alexandrescu之类的C++编程领域的大师级人物。folly与std和boost的最大不同就是在大规模的场景中效率更高。

6.  Scribe

这是一个可扩展的服务,用于从大量的服务器中实时聚合日志数据流。

7.  Thrift

该项目提供了一个框架,用于可扩展的跨语言服务开发。Thrift结合了一个软件堆栈和一个代码生成引擎,来构建可高效工作的服务,可无缝跨C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、OCaml、Delphi和其他语言。

8.  Tornado

一个相对简单、无阻塞的Web服务器框架,使用Python编写。它被设计用来处理成千上万的并发连接,这使得它非常适合实时Web服务。

9.  React

这是一个用于构建用户界面的JavaScript库,用来呈现instagram.com和Facebook的部分站点。

10.  FBMock

FBMock是一个PHP mocking框架,简单且易于使用。

四、Facebook开源的内部开发工具

Facebook也选择将其内部开发人员所使用的工具开源。

1.  codemod

可以协助开发者对大型代码库进行部分自动化重构工作,但仍然需要人的监督和不定期的干预。

2.  Facebook Animation

这是一个JavaScript库,可以帮助开发者使用DOM和CSS来创建自定义动画。

3.  Online Schema Change for MySQL

允许你在线更改集群中的大型数据库表,而不需将集群离线。

4.  Phabricator

这是一个Web应用程序集合,可以帮助开发者轻松编写、审查和共享源代码。目前数百名Facebook工程师每天都在使用它。

5.  PHPEmbed

该工具使得嵌入PHP对于开发者来说变得真正简单,这是一个更方便和更简化的、构建于PHP SAPI之上的API。

6.  phpsh

该工具为PHP提供了一个交互式的shell,功能包括readline历史、标签自动完成以及快速访问文档等。有趣的是这个工具是用Python写的。

7.  Three20

这是一个针对iPhone开发者的Objective-C库,提供了很多UI元素和数据辅助工具,不过该项目现在已经不维护了,不过你可以用于iOS5/6系统的应用开发中。

8.  XHP

XHP是一个PHP扩展,可以增强PHP语言的语法,比如将XML文档片段变为有效的表达式。

9.  XHProf

这是一个针对PHP的函数级的分层分析器,拥有一个简单的基于HTML的导航界面。

五、开发平台

Facebook的平台工程团队也发布和维护着一些开源的平台SDK,这些SDK可以帮助开发者很方便地将Facebook整合进第三方应用中。

  • Facebook Android SDK:针对Android平台的SDK。
  • Facebook iOS SDK:针对iOS平台的SDK。
  • Facebook JavaScript SDK:针对JavaScript应用的SDK。
  • Facebook PHP SDK:针对PHP应用的SDK。

六、Facebook工程师贡献的开源项目

Facebook的工程师也参与了很多开源项目的贡献。这些开源项目在Facebook中都有应用,并在生产环境中得到了优化。

1.  Apache Hadoop

Apache Hadoop提供了可靠的、可扩展的、分布式的计算基础设施,在Facebook中用于数据分析。

2.  Apache HBase

这是一个分布式的、面向列的数据存储,构建于Hadoop分布式文件系统(HDFS)之上。

3.  Cfengine

这是一个基于规则的配置系统,用于服务器的自动配置和维护。Facebook使用Cfengine来维护主机配置,并在产品层面上自动化许多管理操作。

4.  jemalloc

这是一个快速、一致、支持堆分析的内存分配器。Facebook的工程师为其添加了堆分析特性,并做出了很多优化。

5.  memcached

这是一个分布式的内存对象缓存系统。Memcached最初不是由Facebook开发的,但Facebook已经成为了该技术的最大用户。

6.  MySQL

MySQL是Facebook数据库基础设施的骨干。你可以在Launchpad中找到很多Facebook贡献的补丁,还可以通过MySQL@Facebook页面来了解Facebook如何使用它。

7.  PHP

Facebook的大部分代码都是使用PHP开发的。它的语法很简单,让Facebook在产品上能够更快地迁移和迭代。

8.  Varnish

在Facebook,该项目每天处理来自全世界用户的数十亿请求。当你加载朋友的图片和和头像时,Varnish就有参与。

总结

由上可知,Facebook在开源方面的力度非常大。在与规模、财力都在其之上的Google的竞争中,开源确实是一个非常好的途径——采用开源项目,使得Facebook可以使用很少的成本即可快速构建稳定、高效的系统;而通过将自己的产品开源,Facebook吸引了全球大量的优秀的开发者为其工作。

Facebook的所有开源项目都可以在Github中找到:https://github.com/facebook

利用开源,使得Facebook这个后起之秀能够快速崛起,并逐渐缩小与互联网霸主Google的差距。还有哪些企业利用开源获得了成功呢?请关注[企业开源系列]的后续报道。

相关阅读:[企业开源系列]Google背后的开源力量

帮助开发者轻松管理项目的8款在线工具 现代Web应用开发者必备的六大技能 JavaScript异步编程好助手:Promise模式 功能解析:Red语言推出0.3.3新版本 可穿戴?可吞咽!UI和UX的悄然转变 华为刘成:讲述开发者联盟的故事 出尔反尔,Amazon咬文嚼字玩转私有云 创业公司SOASTA:曾帮助伦敦奥运会官网进行云负载测试 金山云进一步聚焦云存储 Facebook公布用户数据:美国移动用户占比78% Zynga开源服务器监控工具zPerfmon 上海海事大学王洁:打造物流教学科研应用云平台生态系统 15个步骤创立技术公司,并收获千万用户(二) HTML5发展慢热 开发者热情不减 NimbleBit孪生兄弟创始人:最后悔没有专注和扩大品牌 将对Windows形成挑战:谷歌在Chrome OS中默认支持Office 微软的企业社交大动作:Yammer发布移动SDK 谷歌开源Gumbo:纯C语言实现的HTML5解析库 AMD发布APPML源码,构建clMath库 【观察】3个月,每天增加52台,又一家云企业跻身十万台服务器俱乐部 感受华为IT业务的实力 小米雷军:我为什么做红米? GitHub上线Trending功能,帮你轻松找到有潜力的开源项目 如私人秘书:谷歌搜索将变得更加个性化 微软将于10月17日正式发布Windows 8.1 Google推出在线教育C2C平台Helpouts 技术人员组团参加SDCC 2013的十个理由 继BAT之后 第四大巨头是谁 如果传统IT部门真的消亡,你该何去何从? 闪存突袭,混合储存是否已步入黄昏 Cloudera发布Hadoop开源组件Sentry:提供细粒度基于角色的安全控制 在SDK中,如何判断对话框中的CheckBox是否选中? 请教如何修改如何提交数据(一对多的表) 如何在delphi里实现文件(比如文本文件)从一台机器传递到另一台机器?比较急! 不知道主板集成声卡的型号,又没有驱动程序?怎么办?主板是ASUS CUSL2,I815E CHIPSET 想问问大家pb自带的例子中有没有关于权限的例子 怎么样吧jpg图片转成ico?????? 听说程序员结婚生孩子多数会是女孩,是不是真的?,好像与辐射有关哦 那里有windoes版的ftp源码 不知道主板集成声卡的型号,又没有驱动程序?怎么办? 主板是ASUS CUSL2 ,I815E CHIPSET 请问哪里有编写多线程安全对象的资料?(72分) 通过界面输入大量数据,界面如何设计??? 在Red hat 7.1如何安装GBK字符集! Focus(老鱼)回答得50分 请教网站的建设计划如何写呀? 请问下面的DELPHI程序如何转为CB 帮忙测试! 怎样得到硬盘序列号 关于Web开发…… Notes Client 待办事宜的定时刷新问题 都是面向对象,怎么C++和JAVA对此代码的结果不同?欢迎高手讨论! 关于//{{AFX_??? 的问题 ---> 如何动态建立字符数组? 都是面向对象,怎么JAVA和C++对此代码结果不同?欢迎高手讨论! 如何解决线程函数与窗体的交互 vb+SQL2000的奇怪出错提示 请问怎么作出jar文件? 急!!!谁有RTF文件格式中元素说明?给一份!谢先!!!!70分奉上!!! java plug-in 1.3.1是什么东东?如何用? ASP中用foxpro数据库,删除记录的问题,我急。。。 急急急 兄弟我用HTML Help workshop 制作帮助,无法显示图片和默认页,那位来切磋一下好吗 怎么判断打印完毕和打印故障和取消打印的状态? php网络程式的问题。 用C++如何实现多进程ftp功能? 加了个硬盘,整个系统全乱了,怎么办? delphi 6手册组,我翻译好的文件无法上传,谁知道该怎么办? 我不想用第三方控件,如果我想使把Panel中的内容达到一个清屏效果(便如由上向下刷新,但最前有一些粉碎状效果,或是百叶窗什么的。) 有关异常的问题 如何用最简单的方法控制在数据窗口最后一列按回车键增加一行? 哪有ASP的技术手册呀?有关组件用法的 那位能有一个使用xpoint的应用?我不知道应该怎么用xpoint,有什么好??? 为什么我建立了两个读写线程,当频繁读写硬盘后,无法刷新界面呢? 再请教:如何得到浏览器的窗口的尺寸? 高分求助!!!怎样用VC在98下建立一拨号连接? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net socket编程,如何使connect()30秒超时???? 请问国内有OpenGL的比较全面的代码下载站点吗?能否提供几个URL?谢谢! 关于操作符重载的问题 有什么办法隐藏一个文件夹,使别人清除隐藏属性也看不到。 com的奇怪问题,27分 新手三层结构。问题多多。。。 Mike's birthday is on next week对on next week提问 He eats food,so he is ()fat.A.much too;too much B.much too; too many C.too much; much too 是谁发明的数学啊······好烦人 I'm going to ___ (have) a birthday party next week. 排列组合证明题:(C0n)2+ (C1n)2+…+(Cnn)2=(2n!)/n!比较急的,里面是关于组合数的各项,应该能看懂吧!左边是二项展开式各项的平方和 某军事行动中,对军队部署的方位,采用钟代码的方式来显示.例如:北偏东30°方向45千米的位置,与钟面相结合.以钟面圆心为基准,时针指向北偏东30°的时刻是1:00,那么这个地点就用代码010045 Tom's going to have a birthday party next week.(改为反义疑问句)Tom's going to have a birthday party next week,_____ _____? HE eats XXX food so he is XXX fat.A much too ,toomuch B much too many tooC too much much too D too much many too加解释喔~ 一种磁带盒长,宽,高分别是10厘米,6厘米和1厘米..现将4盒同样的磁带用包装盒包装起来没怎样最省包装纸?最少需要多少平方厘米的包装纸? I hope Tina( )the birthday party next Sunday.A.to go to .B.goes toC.will have D.had 数学排列组合中A和C怎样区分? 3月12日植树节某班同学计划植树M棵,原计划每天植树X棵,结果每天比原计划多植树5棵,问实际比原计划提前多少天完成任务?并求出当M=120,X=10时实际比原计划提前的天数. 已知a,b为常数,若ax+b>0的解集为x too much food还是too many foods (2013.潍坊)如图,抛物线y=ax平方+bx+c关于直线x=1对称,与坐标轴交于点A,B,C三点,且AB=4,点D(2,2/3)在在抛物线上,直线l是一次函数y=kx-2的图像,点O是坐标原点(1)求抛物线的解析式(2)若直线l平 已知a,b,c为常数,若ax+b>0的解集是x He is much too fat because he always eats too much food."too much"+______."much too"+_____意思都是“______”请用too much 和much too照一个句子._____________________________ 有没有英语的四级的单词要有中文和读音的,最好是mp3 a、b为非零常数,若ax+b>0的解集为x The boy is fat,he eats food.用much too 还是too much 英语翻译主要是带翻译的MP3 根号16,根号8,根号4,根号1的通项公式是什么 (-2)²-(3-5)-根号4+2×(-3) 一道数学试卷题一种商品,原价20元一件,为了促销,甲商店的策略是,凡买10件者优惠10%出售,乙商店的策略是“买十送一”,你认为这两个商店卖的这种商品那家便宜一些?(要写出计算过程) 谁 怎样证明在(a+b)n次的展开式中,奇数项的二项式系数的和等于偶数项的二项式系数的和? (x+a)(x+b 原式=x(x+b)+a(x+b) =x²+bx+ax+ab =x²+(a+b)x+ab 请问x的系数必须是1吗?(x+a)(x+b )只有x的系数是1,x²+(a+b)x+ab才成立吗? 魔术师把四张扑克牌放在桌子上(4567),然后蒙住眼睛,请一位观众上台,把某一张牌旋转180度.魔术师解除蒙具后,看到四张扑克牌和原先的一模一样,他很快确定了哪一张牌被旋转过, 英语翻译:如今中药在许多西方国家很受欢迎._____ _____is now_____in many_____ _____. 设ab为常数,ax+b大于0的解集是x小于四分之一,求bx-a小于0的解集前面的a b是分着的,非乘积形式 ax²-a²x+bx²-2abx+a²b-b²x+ab² 英语翻译2.the list of goods and closing time3.The marketing and accounting offices are on the secong floor.And we have many other departments:personnel,research,ete.4.I sell all kinds of things.And the shop stays open longer.5.They may crash beca sleep 的相关短语 “曲线”中的曲的读音是什么呢? I think there are too many rules in my home 哪里错了还有Tom doesn't like math,too.哪里错了 英语翻译Help! 求英语四级词汇,还有英语四级词汇的发音MP3格式,最好同步带LRC 英语翻译Do you think there is too much noise in our city?Perhaps you do.If you live near an airport,you will probably feel unhappy because of the noise of jet planes(喷气式飞机).It is said that the noise of planes or trains or trucks can 有词组ee并且发音为i:的单词有哪些?至少7个,如see,sleep,tree. 在哪里可以下载到英语四级单词的发音 计算根号1又16分子9+根号4又36分子25的值为什么?A,2又12分子5 B,3又12分子5 C,4又12分子7 D,5又12 go to sleep=那个短语go to sleep=____ _____ 谁可以推荐一下带有发音的英语四级单词软件 计算根号下36*25= 根号下(-15)*(-27)=化简:根号下81x的平方y的三次方 根号下8a的三次方b的四次方c的五次方(要过程) sleep a little longer 翻译词组 1:(a-1)x=b (a≠1); 2:(a-1)x=b; 3:ax-b=bx-a; 4:a分之x-1-b分之1-x=ab分之a+b(a+b≠0) 根号下4+25怎么算加减的运算法则是怎么样的,忘记了 看到数学题就头晕、怎么办哪? 如图,已知抛物线y=ax方+bx+c的顶点坐标为Q(2,-1),且与y轴交于C(0,3),与x轴交于AB两点点A在点B的右侧,点P是该抛物线上的一动点,从点C沿抛物线向点A运动(P与A不重合),过点P作PD//y轴,交AC于点D1.求 计算:根号下4+根号下25-根号下100 看上去很晕已知一次函数Y=AX+B的图像与直线Y=-X平行,并且经过点Q(1,4),求该一次函数的表达式, 根号下401² 值是多少 求2n元排列2n 1 2n-1 2 2n-2 3 2n-3 .n+1 n的逆序数. 数学题啊,晕~~~~~~~~~`客.货2车同时从甲,乙2地相对开出,客车每小时行54千米,货车每小时行48千米,2车相遇后,又以原速继续前进,客车到达乙地后立刻返回,货车到达乙地立即返回,2车在距中点37.8 求下面各式的值: 1. ±根号(-7)² 2.|√2-√3|+|1-√2|-1-√3| 为什么我在做数学题时我头会痛,还很晕 排列组合 C(0 n)+C(1 n)+C(2 n)+...+C(n-1 n)+C(n n)(n∈N*)的值,并证明你的结果.括号内前一个数在C上方,后一个数在C下方...值为2^n,我想知道怎么证明. 三次根号-8-1-根号2的绝对值+根号(-3)²-根号4 it's( )birthday next week 排列组合C(2,n)-n= 数学学不下去了,整式好难啊,什么同底数幂的除法啊,什么的~真死麻烦,又难.随便问一下,像:若2^x=6,2^y=3,求2^2x-3y,还有:已知27^3x/9^x/3^x=27,求X的值一点头绪都没,有什么诀窍?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn