本人才学疏浅,提出这个问题只是为了抛砖引玉,希望大家能在自己擅长的领域里对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的缓存方案如下图所示:
(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/
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn