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

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

移动应用注册表单必死! 数据:2012年的全球互联网知多少 访中粮我买陈伟伟:高并发大压力挑战架构师极限 左路Deep Learning+右路Knowledge Graph,谷歌引爆大数据 数据库排行榜:关系型居首,NoSQL整体人气最高 联通:要做PaaS,存储最低为TB 百度资深交互设计师谈微信4.5版本 TalkingData推出移动游戏数据分析平台 一周消息树:著名计算机黑客Aaron Swartz自杀身亡 使用Windows 8模拟器及Visual Studio 2012调试IE 10触控及响应式Web设计 Azure、AWS要来了 IDC抱团取暖还是各找出路 C#使用ICDBurn实现CD刻录 验证码识别基础方法及C#/.NET源码 傲逆软件CEO周鲁:核心游戏精神,在移动游戏创作中传承 Kim Dotcom推出新文件存储服务平台Mega 用户数一天达百万 美FCC:希望全美在2015年部署千兆以太网 iOS和Android双平台:帷千动媒SDK 3.0发布 移动周报:2013年移动App设计13大精髓 构建高可扩Web架构和分布式系统实战(下) API设计的十大最差和五大最佳实践 Hadoop:为什么RAID-0不行? 电子前沿基金会:实现互联网自由需翻越5座大山 安全无小事:2013年最令人期待的15家安全公司 移动电商:更喜欢用HTML5代替原生APP Talkingdata行业预警:移动游戏正在变成红海 微软无视W3C 拒绝遵循WebRTC标准 Linux下使用MongoDB+GridFS实现备份作业的优化和监视 AWS建新数据中心 老用户获益不易 铜导线退出历史舞台 激光传导速度将达100G bps 大众点评推出首个O2O开放者平台:高德、盛大加入 从APM角度上看:NoSQL和关系数据库并无不同 各位老大请进. 如何给下拉列表框中某一选项的值赋null?另,如何判断用户没有对列表框进行选择? 为什么我在sql*plus在system表空间建了个scott.sale表后在oem看不见呀!! 如何给下拉列表框中某一选项的值赋null?另,如何判断用户没有对列表框进行选择? 各位老大请进. 超级菜鸟 datagrid的触发事件问题 为什么选择服务器游标后,datagrid 不能用了? 数据库oracle9.2,用oledb连接数据库时出现“未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序。”怎样解决? 直接通过ADO如何远程访问计算机上的SQL Server数据库 如何升级jbuilder7的jdk? 发布基于TXMLDocument的程序需要打包哪些文件? 小白鲨只是提议版主不要随意性执法 彩色图像的亮度和对比度? HTML Help Workshop 话中国电影的英文译名(英语爱好者请进,更新中) 小弟做的第一个网页,知道来这个论坛的都是高手,请大家多批评! 如何从CObject中派生一个类? 初学请求大家帮助希望早结贴早睡觉(两贴共120分)。 菜鸟问题:应该先学开发平台还是先学开发语言? service是否也有消息队列? 不知道这样的情况,SQL语句该如何写!谢谢了! HTML Help Workshop 安装什么样的版本? iis无缘无故死掉??? c#.net ! Delphi程序员现在的工资怎么样啊? 如何取得Button的Text属性值? 歪脚鸭病了 一个想了很久的问题,C/C++为什么把声明与实现放在不同的文件里(*.h,*.cpp),感觉没有一点好处。 郁闷,散分! 关于scjp的一个很菜的问题 请问为什么我的两千上网后不能关机? 哈!又升级了!(版主要手下留情,我是真心感谢大家) 现在再看《人月神话》有价值吗? 有关生成可执行文件的问题 水源里的兄弟们进来说说,到底怎样才能渡自己早日成星呀? 请教:怎样在一个应用程序中提取经运算的 多行文本行 有关new操作的问题 我要学c#.net,该从那开始??难吗??谢谢指教啊~~~~~ 两个小问题 请教:怎样在一个应用程序中提取经运算的 多行文本行 如何读取一个目录下所有目录? 如何测出电话不通时返回得声音(占线声),它的具体代码?我要做一个占线自动重拨的程序! 我的插入代码为什么不能执行!? 声卡资源的分配??帮帮我!!! 怪事多多!IE窗口无法“还原” 我的代码怎么发不上去? msdn不知为什么运行不好了,要运行两次才行,速度很慢! 一个播放器,如何判断它要播放的是视频文件还是音频文件? 我在银行工作,请推荐一些关于UNIX和informix online的好书,如何学习? 汪峰战队导师考核 “那张渔网”遭遇选华少出书揭“好声音”内幕 最大梦想是传“好声音”李代沫将与神秘歌手合作新王励勤女友刘彦池 玩泰拳摆POSE卖学员唱哭观众 导师汪峰纠结到要改规则梦想导师贾轶男助阵汪峰队明晚进行考核韩艳星李芭妮海量性感照 没有什么她不中韩女星同场合照比美 韩女星弱爆了导师庾澄庆:我要的是可塑性强的怪声音汪峰组考核成演唱会 钟伟强对战毕夏引柳岩与胡夏贴身跳热舞侧露内衣走光显尴刘晓庆美国婚礼现场照曝光 与老公花海第六期好声音收视创新高 数据持续打破《新白娘子传奇》演员现状同剧不同命揭秘《好声音》政治学:成年人的权力游好声音人气学员亮相天津国际沙滩音乐节“好声音”胡梦周是吴莫愁师兄同受哈林《陆贞传奇》赵丽颖绝美私照曝光“好声音”毅光年能留下 声音乐团帮了李小璐与明星姐妹淘装嫩照 棒球帽吐舌“双生林志玲”被曝外围女 海量性感照世界体育舞蹈大赛24日光谷起舞四厅官涉嫌严重违纪被免职日本取代中国成美国最大债权国图文:87家科技型企业昨集体挂牌S板全国政协在鄂调研台资企业转型升级拜仁“自杀”连开了三枪紧扣主题 突出重点 精细运作充分展示综合交通先行 实现互通共赢一个被颠覆的赛季黄石西塞山区倒逼干部接地气金龙泉依托大病救助会建立员工长效帮扶拜仁“自杀”连开了三枪要拿出建高铁的魄力提网速促进县域经济更好更快发展减免小微企业税收747.18万元我省通过政策性招聘努力解决农村教师短全国政府网站首次普查剑指“僵尸”网站这不是镜头脏了台北路片旧城改造项目被征收房屋分户评五千名海内外嘉宾下月聚首中博会朱英国院士执教治学50年
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘