Facebook的七个伸缩性策略

来源:互联网 发布:uploadify php demo 编辑:程序博客网 时间:2024/05/17 01:46

Robert Johnson,在Facebook用户到达5亿之际,分享了期间采用的技术策略。如果你对5亿用户没有什么概念,Robert Johnson给出了如下数据:

  • 每个工程师1 百万用户
  • 5亿活跃用户
  • 每天1000亿点击
  • 500亿相片
  • 2万亿缓存对象,和每秒数亿请求
  • 每天130TB日志

Facebook如何做到这点?

  1. 人是最重要的  是人创建和运行系统。提高伸缩性的最好工具是能够处理任何事情的开发和运维团队。
  2. 水平扩展  把呈指数增长的流量请求,随机分布到大量机器上。对不同的表,如账号和配置表,使用不同的数据库,可以使性能翻倍。这种做法虽然损害了效率,不过效率只是提高伸缩性工作中的一个关注点,它的降低,并不会必然对伸缩性产生重大危害。
  3. 快速前进  在扩展的每一个阶段都有意外。我们灵活、训练有素的跨学科团队快速地解决着各种突发意外。灵活性比任何独立的技术决策都重要。快速实施使得Facebook能够尝试更多的选择,并找到最佳方案。
  4. 增量改进  小步前进,然后评估结果是快速前进的关键。把大事情分成多个独立的部分,而不是把全部修改集中在一起操作。修改可以在小部分机器上回滚,只会对小部分用户有影响。新系统可以和旧系统并行搭建,并逐步引入流量,评估结果。整个系统的稳定性因为增量改进而提高,因为你可以更快地知道某个策略是否生效。当然,这也更容易发现修改中出现的问题。
  5. 评估所有东西  产品的运行是所有有用数据的来源。评估系统和应用层级的统计数据,从而得知系统发生的各种事情,找出那些原本隐藏的重要问题。
  6. 小而独立的团队  小团队可以让事情高效、快速和小心地完成。比如说只有三个人的团队维护相册——网络上最大的相册。
  7. 控制和责任  责任需要控制。如果一个团队负责一个事情,那么他们就必须控制它。比方说,Facebook每天都升级产品的代码。撰写代码的人,需要为他自己的代码负责。如果这两者是分离的,那么开发者就感觉不到那些破坏了系统的代码。Robert更进一步指出:我们所知的创建满足5亿用户的软件的最好办法是,寻找这样一个人,他知道对一个自己理解并能控制的事情做出一个好的决策的重要性。

这样原则都似曾相识,但这样把它们放在一起,就非常容易看出它们是如何相互作用,并形成一个良性循环。你无法快速前进,除非你有一个小的能够控制和负责的团队;你无法知道你的修改是否生效,除非你把它加入产品并评估结果;你无法把代码部署到产品中,除非开发者能够负责任地移除已有代码;你无法扩展系统,除非你知道如何水平扩展、如何快速前进、如何评估系统等。而所有这些,都需要好的开发人员。

这些原则能够应付下一个5亿用户吗?从第一个原则来看,我想是可以的。这个世界会变化,将来的挑战无法预测,但是好的开发人员,在良好的环境中会学习和适应。将来的挑战是什么,到目前为止Facebook面临的挑战是坚持这些帮助它取得今天这些成绩的原则,不要重蹈以前那些大企业的覆辙。

原创粉丝点击