本人才学疏浅,提出这个问题只是为了抛砖引玉,希望大家能在自己擅长的领域里对Facebook中可能采用的某个技术或者架构方案或优化方法,做个自己的论述。根据2008年9月1日,腾讯网对Facebook的技术运营副总裁Jonathan Heiliger的访问,我们了解到:
(1)Facebook自称全球流量第四的网站,每天9000万活跃用户访问Facebook的1万台服务器。
(2)25TB数据(08年12月为28TB),40万名外部开发者支持,开发了2.5万套应用软件。
(3)使用LAMP(Linux、 Apache、 MySQL、 PHP)技术构架;数据库使用MySQL;使用Memcached缓存SQL加速(全球最大的分布式Memcached缓存,800多台服务器,光缓存在Memcached中数据就达20多TB);使用APC进行opcode编译缓存。关于PHP的编译执行如下图所示:
而Facebook的缓存方案如下图所示:
2. 可能会采用的MySQL架构与优化
(1)数据的垂直(无关联数据放置不同数据库服务器)与水平分割(库表散列,如用user_id散列),然后用MySQL Proxy/Spock Proxy进行分割表的反向代理。
(2)合理使用变量,并在本地文件建立散列的映射关系,进一步进行分割。
(3)Master/Slave集群架构,实现读写分离。
(4)合理的数据库结构设计,与索引优化
(5)其他:索引缓存、联合索引、查询缓存等。