风头正尽的 Facebook 正式向美国证券交易委员会提交了 IPO 申请文件,这是迄今为止美国最大的互联网企业 IPO 项目,计划募资金额达 50 亿美元,振奋了美国股市的同时也提升了 国内社交网络相关概念股股价, 自从上周 Facebook 上市消息传出以来,上述三家网站股价持续上涨。上周五及本周一,人人网股价累计涨幅超过 50% ,周三出现回调,最终下跌 9.73% ,收报 5.01 美元。新浪股价昨日涨幅达 5.15% 。腾讯昨日股价收于 187.50 港元,涨幅达 2.07%

Facebook 上市的那些事儿就交给所谓的专家学者去讨论吧,术业有专攻!作为一个开源社区,我们关心的当然是 Facebook 采用了哪些开源项目以及对开源运动做出的贡献!
Facebook 采用的编程语言包括: Java, Ruby, PHP, Python, Objective-C ,并在 2011 年中开源了服务器和数据中心核心技术以及 HipHop 虚拟机,下面是 Facebook 正在使用或者贡献的开源软件详细列表和介绍:
Apache Cassandra 套开源分布式 Key-Value 存储系统。它最初由 Facebook 开发,用于储存特别大的数据。

MySQL 这个不需要在介绍什么了吧,使用最为广泛的开源数据库。

Memcached 是一个高性能的、分布式的内存对象缓存系统。

Scribe 旨在帮助 Facebook 处理服务器上的大量数据,正像 Scribe 网页所述 如经常访问 Facebook ,请使用 Scribe 。具体而言, Scribe 就是一台服务器,实时收集用网站日志信息。

Thrift 是一个可伸缩的跨语言的服务开发框架。 Key-Value  存储服务器  Cassandra  就是使用 Thrift 作为其客户端 API 的。

FlashCache   是一个适合一般应用场景的 MySQL 缓存优化模块。

Hadoop 并不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架。

Hive   是一个基于 Hadoop 的数据仓库平台。通过 Hive ,我们可以方便地进行 ETL 的工作。 Hive 定义了一个类似于 SQL 的查询语言: HQL ,能   够将用户编写的 QL 转化为相应的 Mapreduce 程序基于 Hadoop 执行。

Open Graph protocol   可让你的任何网页变成社交图谱。

OpenCompute  -  一个开源硬件项目,提供高能效的数据中心。

Tornado web server  是使用 Python 编写出來的一个极轻量级、高可伸缩性和非阻塞 IO Web 服务器软件,著名的 Friendfeed 网站就是使用它搭建的。

Varnish cache   是一款高性能的开源 HTTP 加速器,挪威最大的在线报纸  Verdens Gang 使用 3 Varnish 代替了原来的 12 squid ,性能居然比以前更好。

Facebook开源HipHop虚拟机
Facebook公布了HipHop虚拟机,源代码发布在Github上。 Facebook称,他们建立了一支团队去实验性的将PHP代码动态翻译成原生机器码。开发者最后在HipHop运行时上开发出了一种新的PHP执行引擎,它被命名为HipHop Virtual Machine(hhvm)。Facebook表示,hhvm将替代hphpi,用于所有的PHP执行。Facebook说,hhvm显著改进了速度,比它目前使用的PHP解释器快60%,使用内存少90%。
163405fq8nukhzhq4qhtzk.jpg
  这个项目由一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常用PHP扩展的重写版本构成,目的是旨在加速和优化PHP。
  用Facebook官方博客(无法直接访问)上项目负责人赵海平(北大1987届遗传与分子生物专业,普林斯顿计算机科学博士)的话说,HipHop项目对Facebook影响巨大。它目前已经支撑了Facebook 90%的Web流量。由于HipHop,Facebook Web服务器上的CPU使用平均减少了50%,从而大大减少了服务器的需求。为了让这一改进也惠及社区,他们决定将之开源,希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。

PHP和Facebook的问题

  众所周知,Facebook的前端主要是用PHP写的。赵海平说,过去六年Facebook从PHP语言的进展上获益良多。PHP非常简单,易学易用,好读好调试,因此新工程师成长很快,有利地促进了Facebook的更快的创新。
  PHP是一种脚本语言,其好处是编程效率高,能够支持产品的快速迭代。但是与传统的编译语言相比,脚本语言的CPU和内存使用效率不好。随着Ajax技术的广泛采用,加上SNS对动态要求较高,这些缺点更显得突出。对于每月超过4000亿次PV的Facebook来说,如何实现扩展,尤其具有挑战性。
  常见的办法是直接用C++重写PHP应用中比较复杂的部分,作为PHP扩展。实际上,PHP就转变为一种胶水语言,连接前端HTML和C++应用逻辑。从技术角度讲这也没有问题,但是增加了技能需求,能够在整个应用上工作的工程师数量就大大减少了。学习C++只是编写PHP扩展的第一步,接下来还要理解Zend API。由于Facebook的工程团队较小,每个工程师要支持100万以上的用户。有些代码不是团队里每个人都能看懂,这对于Facebook是无法接受的。
  Facebook网站本身的可伸缩性更具挑战性,因为几乎每次页面浏览都是有个性化体验的登录用户发起。浏览主页 时,系统需要查询所有朋友、朋友最重要的状态更新、 根据隐私设置筛选结果,然后还要显示评论、照片等等动态,这一切都需要在一秒内完 成。
  自2007年以来,Facebook曾写过几种不同办法解决这些问题。其中包括用另 一种语言重写Facebook,但是由于开发的复杂性和速度等原因,未能实现。他们还重写了PHP的核心部分Zend引擎,并提交给了PHP项目,但最终还是没有获得所需的性能。最后,他们选择了HipHop,终于得偿所愿。
  有了HipHop,工程师可以编写代码,用PHP编写组合最后页面的逻辑,并能够继续快速迭代,同时后端服务使用C++,Erlang,Java,Py thon编写,提供新闻提要、搜索、聊天和其他核心功能。

HipHop开发故事

  赵海平透露,项目最初是来自几年前Facebook公司一次Hackathon活动(员工在一个晚上自由发挥,实验新的想法),他手工将PHP转换为C++代码,虽然语法上很类似,但是无论是CPU还是内存使用,转换后的C++代码都大大优于PHP。于是他想,如果构建一个系统,编程实现转换,会怎么样呢?
  在此之前,已经有了不少改善PHP性能的方法。Zend引擎在运行时转换PHP源代码为运行在Zend虚拟机上的opcode。开源项目APC和eAccelerator将输出缓存,为大多数PHP网站所使用。此外,还有Zend Server这样的商业产品,通过opcode优化和缓存,提高PHP速度。赵海平选择了另一条道路,将PHP直接转为C++,然后再变成本地机器码。当然,有许多开源项目也是同样的思路,Roadsend和phc编译为C,Quercus编译为Java,而Phalanger编译为.NET。
  Hackathon之后8个月,赵海平拿出了原型,足以说明这条路可以走通,编译后的代码的确更快。不久,Iain Proctor和Minghui Yang加入进来。接下来又开发了10个月,在生产服务器上测试了6个月。然后正式上线部署,6个月之后,Facebook 90%以上的Web流量都使用了HipHop。
  按赵海平的说法,凭借HipHop,Facebook Web服务器上的CPU使用平均减少了50%,从而大大减少了服务器的需求。项目对Facebook影响巨大。为了让这一改进也惠及社区,他们决定将之开源,希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。

HipHop的原理

  HipHop将PHP代码转换为高度优化的C++代码,然后再用g++编译器编译。它可以保持语义等效地执行源代码,但为了提高性能,牺牲了一些很少用到的特性,比如eval()。
  HipHop开发中的主要困难在于,在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些很巧妙的动态特性,但是大多数PHP代码还是非常简单的。if (…) {…} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时,还使用类型推演来选出变量最可能对应的某个类型,从而节省内存。
  转换过程分三步:
  1. 静态分析。收集声明关系和依赖关系等信息。
  2. 类型推演。选择最合适的类型,是C++的标量?还是String,Array,classes,Object或者Variant。
  3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。
  在开发过程中,还有一个副产品:HPHPi,是一个实验性的解释器。通过它,不编译PHP源代码也可以运行。它已经用于HipHop自身的调试中。
  HipHop在保持了PHP优点的同时,也兼得了C++的性能优势。项目总共有30万行代码,5000多个单元测试。所有这些都将以PHP开源许可证形式发布到GitHub。

  Facebook开源服务器和数据中心核心技术
  Facebook今年上半年在其总部启动了名为The Open Compute Project的新项目(http://opencompute.org/servers/)(http://opencompute.org/datacenters/),将其底层服务器和数据中心技术开源。
  值得注意的是,Facebook不仅公开了技术文档,甚至连服务器和数据中心的CAD图纸设计也完全公开。
  Facebook CEO Mark Zuckerberg称,将开放他们领先业界的定制服务器和数据中心技术的规范和文档,以回馈社区,促进生态系统成长,推进技术进步。他表示,Facebook团队为此已经工作了一年。 Facebook的数据表明,他们的定制硬件各方面指标比业界标准要高得多,与公司从设备厂商购买的同类现成产品相比,效率提升38%,成本则降低了28%。而整个数据中心的能耗按PUE(Power Usage Effectiveness,电能使用效率)衡量是1.07,大大低于业界通常的1.5。
  Facebook的运营负责人Jonathan Heiliger表示,公司前七年也是租用数据中心,但后来意识到其中有很多改进空间,于是决定自建。目前已经开始建设第二个数据中心。与此同时,他们还自己设计了服务器。随着Facebook开源这些技术,其他创业公司将有可能根据自己的需求,在其基础上进行进一步的定制,可以想像,会有更多创新涌现。
  目前,Facebook的硬件项目合作伙伴包括英特尔、AMD、戴尔和惠普。
  惠普行业标准服务器和软件业务首席技术官格雷格·哈弗(Greg Huff)说:“拥有庞大计算需求的企业仍将寻找创新技术,以便突破当今的障碍。”
  戴尔服务器平台副总裁佛雷斯特·诺罗德(Forrester Norrod)表示,他的公司已经根据Facebook的新设计为一些企业提供了部分系统。“这意味着你将拥有一个开放的创新平台。”他说。
  Facebook此举将对其他网络巨头构成压力,他们正在很多技术问题上与Facebook争夺“开放性”。谷歌发言人说:“我们仍在熟悉这个项目,但总体而言,我们会支持那些能够推动最佳措施,并方便企业部署节能设计的计划。”
  Facebook此举堪与2004年Google陆续发表MapReduce等论文相提并论。Google当年的开放措施实际上直接启动了如今如火如荼的云计算运动。而Facebook今天将云计算之火烧到了硬件和数据中心领域。 Heiliger在今天发布会上的一句话非常耐人寻味。他说,数据中心的神秘面纱该去掉了。两年前,Google曾对其数据中心服务器进行了粗略的介绍,TechCrunch的记者认为,Facebook此举是在讽刺Google,后者的数据中心和服务器领域技术公认非常领先,但一直视为独门绝技,密不示人。
Facebook 与开源的故事到此结束,希望 Facebook 在不断壮大发展的路上为开源运动提供更多的帮助!让开源力量愈发强大!