原文地址:http://linuxsysadminblog.com/2010/09/a-day-in-the-life-of-facebook-operations/
顺便说一句,这个linuxsysadminblog.com确实不错。
文章是笔者在现场听Facebook系统工程师汤姆·库克在2010年的surge可扩展和性能大会上的讲演时记录下来的——
这是到目前为止最火爆的讲座了,还没开始就只剩下点站着的空间……
Facebook运维需要支持多大的应用环境:
1、在facebook花上每个月7亿分钟(不太明白这个意思,一个月明明只有43200分钟)
2、60亿次内容更新;
3、30亿张图片;
4、实现100万连接;
5、5亿活跃用户。
基础设施建设的发展:
1、租用IDC达到瓶颈;
2、开始自建;
3、目前已为加利福尼亚和弗吉尼亚两州服务。
发展历程:
从LAMP起步,然后拆分负载均衡,web服务器,app服务器,memcached,数据库。
最早的Facebook是一个单纯的发布在apache上的php站点。但后来php不足以支持Facebook的访问了,现在,Facebook已经开始编译一些php功能成C++程序,这就是业界闻名的HipHop。
Facebook大概拥有世上最大的memcached集群,超过300TB的数据存储在memcached内存中。
使用flashcache来改善mysql性能。
已实现支持的服务:
新闻feed、搜索、缓存。
服务使用中的编程语言:
C++、php(前台)、python、ruby、java、erlang(聊天室)
各种编程语言间如何交互数据?json?soap?都不是。Facebook专用一个为各编程语言开发服务的软件框架。所有的Facebook系统后面,都是统一的一个平台。
Facebook每天都在担心:
开发、监控、数据管理、代码上线。
Facebook使用centos操作系统!
系统管理:
配置管理;
系统管理——用CFengine;
按需管理。
开发:
前台部分——每天都有新代码上线。代码统一协调,所有人都在IRC的频道里交流。每个人都可以知道发生了什么,而不单单是工程师自己。
1、程序推送按需分发;
2、代码分发通过BT的方式;
3、php是经过编译的,数百MB的二进制文件通过极小的BT种子迅速下发;
4、完成全网更新只需要1分钟。
后台部分——只有开发和运维。开发工程师写代码、测试、演示。
1、这样能迅速得到性能数据;
2、揭露各环节的真实交互(这里翻译的应该不对,看不懂……);
3、没有所谓的“提交、退出”;
4、全面参与应用变成产品的过程;
5、运维被“嵌入”每个开发团队。
代码的每一处修改和推送,都必须详细记录。
Facebook的服务器性能指标在线监控
ganglia监控系统:快速、便捷、超过500万的监控指标、可以通过网格和池的方式进行规划。
自主的监控系统
nagios监控系统:用来给各团队发报警,最开始是用的email。
Scribe高性能日志系统:最开始用的是syslogd,同时在用hadoop和hive。
怎么运行的呢:
1、定义要明确的依赖关系;
2、固定的失败次数;
3、服务器是第一步,系统架构设计。
4、现在重点是搞集群。通过功能不同进行逻辑关系划分(web、db、feed等)
5、下一步是数据中心。尤其是灾备。
6、不断的沟通——信息永远在共享中。
7、IRC。
8、大量的自动化数据获取和设置。
9、内部新闻更新。
10、内部工具的’headers’;
11、变更日志。
12、团队要短小精悍。
一个有趣的数字:平均每台Facebook的服务器8分钟就升级一次。
一个有趣的事实:Facebook最忙的时候是万圣节后的那天。