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

[企业开源系列]后起之秀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背后的开源力量

可视化:图像的主题色提取算法,是不是太高端了? 不利于写出好代码的15个职场因素 GPU Saturday技术沙龙:分享异构计算新技术及应用 微软隐藏最深的秘密武器之一——Visual Studio可作为Python IDE 历时六月,Qt 5.1正式版终于面世! HTML5全硬件加速游戏引擎:Sphinx正式公测 专访“Monster Blade”创始人:无需营销,百万下载背后的秘密 Twitter实时分析平台主要合作伙伴Dataminr:让用户不再错过重要的推文 OpenStack、OpenNebula、Eucalyptus、CloudStack社区活跃度比较 XOR的黄色大象:Erasure Code为Hadoop节省数据恢复带宽 竞争将越来越激烈:戴尔或也进军可穿戴计算市场 新技术:可直接在人脑播放广告 编程调试和诊断的五大规则 70%开发者:对现有应用推广和广告并不满意 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中 扩展PHP的五个简单技巧,让单服务器并行支撑30000用户 硅谷为什么无法复制 PubNub+Cloudinary:简单几步快速搭建实时图片分享应用 影响互联网行业的十大API(信息图) Hadoop+GPU强强联手的性能探索 Eurora获最节能超算殊荣,中国天河2号位列第31 程序员的野心:让GPU像CPU一样运行 Gungho热潮正在逐渐消退? Thalmic创始人专访:穿戴式体感设备MYO背后的开发故事 移动周报:GSMA各种神器,Qt 5.1,Android 4.3,本周惊喜多多! 奇虎360Web平台部基础架构团队访谈:开源线上数据库中间件Atlas 化繁为简:UC优视发布“UC+”开放平台战略 从40亿美元到10亿美元 Hulu的美梦是否又一次成为泡影? 百度开发者俱乐部第六期:BAE3.0开放内测 云编程马拉松启动 微软宣布将于今年9月30日正式关闭MSN TV服务 程序员不应该再犯的五大编程错误 大家认为在开发过程中是否不能用全局变量? 如何让LINUX支持我显卡 高手,谁来帮我一下~! 取字符 在SDK中,如何获得客户区的宽度和高度呢??(哪两个函数呢?) 哪里有ATL的电子书下载?最好是中文的! 高手谁能帮帮我呀~~~~~~~! 请教:如何在statusbar的panel中显示一个图标呢? VC++中如何使用OLE对象? 初来乍到,发现这儿JJMM还挺多的。。。 请高人指教~! CSDN中碰到这种问题,该如何解决呢? 如何学习director 你能帮我一下吗?~ 企业商务管理软件,开放全部的源代码及开发文档! 企业管理软件,全套源码及开发文档!!!! 哪里有支持任何波特率的通讯控件下载? net_lover(孟子E章)请进~! 一个有关CWebBrowser的问题,急急急!!! 这样的语句为什么不可以实现一次删除多条记录 plmm是什么意思? 各位大侠,知道哪儿有直接可用的上传文件的控件吗? 多谢了!!! 论坛的题目是不是太没意思了 一个sqlserver7统计的问题?? varchar类型不是可以输入255个字符吗,为什么我输了160个就出现'item XXX doesn't pass validation test ' 唉 ~~~~~ 奈何 ~~~~~ 突然想到个荒唐的问题: 事件和过程有什么不同? 奇怪的事前,高手请进来 我的问题还没有解决~! 这里的高手呢,人听多,会的人不多 申奥倒计时,如果你在线,请进来验证这以历史性时刻,谢谢 我有一个用hook截获鼠标移动的dll,但是没有效果,请问怎么调试? 请教,怎样在java中把Button的背景改做一个图片 对delphi5一个自带例题的疑问。 爆炒MM之水园MM ID一览 窗体和控件的自适应问题? 求《unix》环境高级编程的源程序下载。 在MIS或WEB中有大量的对数据操作的工作,是否所有的insert,update,delete工作都需lock and unlock??? 紧急求助:那里有pb7的最新版本下载(mark200106@sina.com) 感谢stanely :) 哪里有《unix环境高级编程》所带的源程序下载? 关于quickrep得统计问题,为什么我只能把所有的数据累加而不能累加一个grouphead和groupfoot之间的数据 关于ATL做ActiveX控件的问题 关于jc文件的问题 请问:在用ADO执行查询操作时,如出现“超时”错误,应该有哪些解决办法? 帮忙算一下JB5的激活代码,呵呵 模板问题 软件发布:捉图王 DirectX 的编程问题小 怎样用VB写收发邮件的控件,现成的也可以,多谢!!! 来水园有一阵子了,但就是不认识一个叫pmagic的,有人能告诉我他/她是谁吗?解释清楚的,300分奉上 当a=-2时,a+2a+3a+4a+.+100a= -化简求值2/3a-{1/3-[(3a²-5a+1)]},其中a=3 a^2+6a+9分之4-a^2÷2a+6分之a-2+2 a= 2,a+2a+3a+4a+...+100A=? 化简求值2/3a-{1/3-[(3a²-5a+1)-1/3a-5]} 3a^2-a-2=0.则5+2a-6a^2=? 5(3a方b-ab方)-4(-3ab方+2a方b),其中A等于-2,B等于3化简求值 化简求值2(3a-1)-3(2-5a+3a²),其中a=负三分之一,其结果为多少? 若3a^2-a+2=0,则5+2a-6a^2= 化简 3a²×根号下2/a 化简求值:(-5-a²+3a)+(-a²-5a+4)其中a=-1/2 若3a^2-a-2=0,求5+2a-6a^2的值 求解过程,急!给悬赏!先化简,后计算:81-a²/a²+6a+9÷9-a/2a+6×1/a+9,其中a=根号3-3 5a²+[a²+(5a²-2a)-2(a²-3a)]其中a=-1/2 先化简再求值1/2(x²-y²)-4(2x²-3y²)其中x=-3y=2 3a的2次方-a-2=0,则5+2a-6a的2次方=什么 已知角a的终边上有一点P(3a,4a) (a 已知根号2a-3+b=4,化简根号a²-2a+1-根号b²-8b+16 先化简,后求值:(5a²-3b²)+(a²+b²)-(5a²+3b²),其中a=-1,b=1. 设α角终边过点p(3a,4a)(a≠0)求sinα,cosα,tanα? 已知b 先化简,在求值 5a²+3b²+2(a²-b²)-(5a²-3b²),其中a=-1,b=1/2 设α角终边过点p(3a,4a)(a≠0)求sinα,cosα,tanα? 已知:a<0,化简:根号下4-(a+a分之一)²-根号下4-(a-a分之一)² 先化简再求值(5a²-3b²)+(a²+b²)-(5a²+3b²)其中a=-1 b=1 已知角B的终边过点P(-4a,3a)Simb.cos b.tan b谁知道怎么整啊 已知a=1-根号2,先化简,再求(a²-1)/(a²+a)+根号( a²-2a+1)/(a²-a)值老师讲的答案和我算的不一样,求过程 化简:1、-5a²(3ab²-6a³);2、[x(x²y²-xy)-y(x²-x³y)]÷3x²y;3、已知(a的n次方b的m+1次方)³=a的9次方b的15次方,则m的n次方=? sin²a+cosˇ4a+sin²acos²a 化简 若a²-3a=9,则2a²-6a+3的值是-----------------. 先化简 在求值3a^3-6a^2b/a^2b-2ab^2 ,其中a=3,b=1 2.证明:sin²²a+cos²²a=1-2sin²acos²a 22是4噢2.证明:sin²²a+cos²²a=1-2sin²acos²a 22是4噢 打不出这个符号 a-²b-³·﹙-3a﹣¹b﹣²﹚÷6a﹣⁴b﹣²的结果是?请带上过程.(-²这个是负二次方,其余的也是这样) 化简(a+b)(a-b)-(3a-2b)(3a+2b) 求证[1]1-2sin acos a/cos²a -sin²a =1-tan a/1+tan a.[2]1-cos 2θ/1+cos 2θ=tan²θ 若√a²-3a+1 +b²+2b+1=0,求3a²-6a+1/a²-(-b)²的值.若√a²-3a+1 +b²+2b+1=0,求3a²-6a+1/a²-(-b)²的值。 化简 |a+b|-|3a-2b|a sin∨4a-cos∨4a=sin²a-cos²a 求证 下列各式计算正确的是A(-3a²b)(-2ab²)=6a³b²B(﹣2×10)²×(6×10³)=1.2×10的5次方C﹣2a²(2分之1ab-b²)=﹣a³b-2a²b² D(﹣ab²)³=﹣a³b的6次方,若ab²= 化简(3a+2b)(2a+b)-(2b+a)(b+a) 证明:sinα^2+sinβ^2-sinα^2sinβ^2+cosα^2cosβ^2=1 已知a²+b²-6a+8b+25=0,求3a+4b的值. 当a>0,b 证明:1-2sinα cosα/cos^2α -sin^2α=1-tanα/1+tanα 因式分解:(3a+2b)²-(3a-2b)²和9x²-4y² 化简求值 (3a+1)(3a-1)-(2a-3)(3a+2),其中2=4分之一 证明[2-2sin(α+3π/4)cos(α+π/4)]/(cos^4α-sin^4α)=(1+tanα)/(1-tanα) 6a²-9ab+3a 因式分解 化简求值:3a(a^2-2a+1)-2a^2(a-3),其中a=2分之3 证明sin^4α-cos^4α=2sinα²-1 因式分解3a²-5ab+2b²加上:若多项式f(x)=x的四次方-x的三次方+ax²+bx+c能被(x-1)的三次方整除,求a,b,c的值设abc是三角形的三条边,则a的四次方+b的四次方+c的四次方-2a²b²-2b²c² 化简求值: (3a-7)(3a+7)-2a(二分之9a-1) 其中a=*3 证明(1-2sinθcosθ)/(cos^2θ-sin^2θ)=(cos^2θ-sin^2θ)/(1-2sinθcosθ) 化简5a^2-[a^2+(5a^2-2a)-2(a^2-3a)] 若3a^2-a-2=0,则5+2a-6a^2=____________ 当a=-2时,a+2a+3a+4a.+100a等于多少 5a²+[a²+(5a²-2a)-2(a2-3a)],a=-二分之一 先化简再求值 (3a^2)^3-6a^3(2a^2+3a^2+a) a=-2时,a+2a+3a+4a+.+100a等于多少 化简求值:5a^2+[2a^2+(5a^2-2a)-2(a^2-3a)],其中a=-1/2 (2a+3/a^2+1)-(a+3/a^2+1)*(2a^2+6a/a^2+6a+9)化简
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn