Facebook的架构


从各种文章来源来看,我理解的Facebook架构如下
1:web前端用PHP来写的。再用Facebook的HipHop转换成C++代码,使用g++编译。提供了一个高性能的模板系统和web逻辑执行层。

2:业务逻辑使用Thrift做成服务。一些服务根据不同情况使用php,c++,java来实现。也有可能使用其他语言。

3:用java写的服务没有使用一些企业级的框架服务。

4:持久化使用MYSQL,Memcached,Facebook自己的Cassandra.Hadoop的HBase。Memcached用来作为MySql的缓存。Facebook的工程师承认他们在减少Cassandra的使用,因为更简单的一致性模型和MapReduce 能力而倾向于使用HBase。

5:离线的处理是使用Hadoop和Hive.

6:诸如日志,点击和feed这样的数据使用Scribe,并使用Scribe-HDFS来聚合和存储。因此可以使用MapReduce来分析。

7:BigPipe 使用流水线的逻辑来加速页面的生成。

8:搜索引擎的实现细节还是一个谜。

9:预搜索使用了一个自定义的存储和检索逻辑。

10:Chat建在一个Epoll服务器,使用Erlang开发,并用Thrift访问。

11;数以亿记的用户上传图片用Haystack处理。

12:消息系统明显使用分片的架构设计和动态集群管理。业务逻辑和持久化封装在所谓的Cell里面。每个Cell处理一部分用户。新Cell会随着流行度增加而增加。使用HBase持久化。

支持以上服务的一些已知数字如下:
1:超过6万台的服务器。最新的数据中心位于Prineville,使用他们自己设计的硬件。即是最近公布的Open Compute Project
2:Memcached存储了300 TB 的数据。
3:Hadoop和Hive集群由3000台服务器组成,配备8核,32GB内存,12TB的磁盘,即24000核,96TB内存,36PB磁盘。
4:每天1000亿次点击,5000万图片,3trillion缓存对象。130TB的日志。(july 2010)

猜你喜欢

转载自buluzhai.iteye.com/blog/1007728