facebook的技术相关架构

人才 学疏浅,提出这个问题只是为了抛砖引玉,希望大家能在自己擅长的领域里对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的编译执行如下图所示:
机制.jpg

而Facebook的缓存方案如下图所示:
facebook机制.jpg


(4)一些后台应用是用Python、Perl和Java ,以及一些gcc和Boost。 (5)使用SVN和Git来进行代码 管理,并且全部企业内部的软件部署都采用开源 程序


2. 可能会采用的MySQL架构与优化
(1)数据的垂直(无关联数据放置不同数据库服务器)与水平分割(库表散列,如用user_id散列),然后用MySQL Proxy/Spock Proxy进行分割表的反向代理。
(2)合理使用变量,并在本地文件 建立散列的映射关系,进一步进行分割。
(3)Master/Slave集群架构,实现读写分离。
(4)合理的数据库结构设计,与索引优化

(5)其他:索引缓存、联合索引、查询 缓存等。


3. 可能会采用的系统 优化
(1)使用epoll模型
(2)异步I/O
(3)fastcgi或其他方法实现多进程
(4)sendfile系统调用增大网络 I/O流量
4. 可能会采用的Web 架构或前端技术
(1)Web组件分离,如独立的图片服务器,JavaScript、CSS 文件、动态脚本的分离。
(2)Nginx反向代理(或Squid)
(3)多副本负载均衡
(4)HTTP持久连接与合理利用浏览器缓存,例如背景图偏移量技术,及对CSS、JavaScript和视频
5. 一些可能会用也可能不用的压力测试
(1)Apache的ab进行压力测试
(2)Apache的prefork模式进行多进程切换的压力测试
(3)使用Nginx为多进程下的CPU与IO进行监控

Linux下的Memcached开发,请参看逆雪寒的文章 http://bbs.phpchina .com/viewthread.php?tid=48667&highlight=linux %2B%CF%C2%B5%C4%2Bmemcached%2B%BF%AA%B7%A2
Memcached的分布式缓存机制及相关解决 方案请阅读以下网址及相关文章:
http://tech.idv2.com/2008/07/24/memcached-004/

猜你喜欢

转载自zhang1120peng.iteye.com/blog/769347