阅读更多
Facebook用户数量,已经突破10亿大关。Facebook在发展期间,所实现的技术成就,成为了IT行业工程师关注的话题。究竟Facebook取得了哪些技术成就呢?Facebook前工程部门总监,在问答网站Quora上,对这一问题作出回答。无论对于IT行业的投资者还是使用者,这些回答都有着指导意义。


以下是文章全文:

我在Facebook的基础架构软件开发团队,工作了5年,并且参与了多数项目的开发。我认为在Facebook时,最伟大的成就是Memcache/MySQL集群。一年前,我离开Facebook的时候,这个集群中已经拥有超过1万亿对象(没错是万亿),每秒请求数量超过10亿,处理时间通常不超过1毫秒。这一集群,在多个数据中心之间,保持了良好的一致性,并且很少出现停机的情况。

实际上,我们取得的真正成就,与Memcache和MySQL并没有多大的关系——随着时间的推移,这些都将会被新的“技术”所取代,但是这里真正重要的技术,是让数量如此庞大的机器,快速、可靠的协同工作。这并不同于通常意义上,人们在询问“你用的是什么样的技术?”时,所指代的东西,但是这一方面确实会出现很多有趣的创新。

这包括算法方面的技巧,如分片(Shard)、分区(Partition)、缓存数据,以及保持分布式数据的一致等。虽然像“部署和监控”这样的事情,听上去似乎有些很普通,但是当一切到了Facebook这样大的规模,就变的不再简单。

以下是我们面临的一些具体的挑战:

1. 数据中心间的一致性

Facebook是一个实时的应用程序,这也就意味着,无论世界哪一个角落的数据发生改变,都需要立即显示到所有其他的地方。因此这对一致性有着令人惊讶的高要求。

常常有人说,“哦,Facebook只是一个让人觉得挺有趣的社交网站,一致性并没有那么重要。”但是如果信息出现的时间顺序有问题,或者有的消息会凭空消失,那么这些情况就很容易惹恼用户。以下是我们在2007年,创建首个地理分布数据中心时的老博客:《Scaling Out Facebook》

现在回头看,虽然这个方案听起来有些严格,但是它真的很有用,而且帮助让我们达到了现在这个巨大得规模。而现在的设置显然已经变得更为复杂。

2. 网络流

Facebook的页面,需要很多小块的数据,而这些往往并不容易聚集。所以我们经常看到的一个模式,是一台服务器,会从大量其他的服务器处,要求大量小的对象。而这里的问题在于,如果所有的服务器都在同时进行回复,你就会通过请求服务器的rack switch和网络适配器(NIC)突然获得大量的数据包,然后就会有数据包被丢弃。这就是学术文献中所谓的“TCP incast”,而我们解决这个的方法,是对机器上发送的请求进行截流。

而当故障(failure)出现的时候,网络问题往往会变得更加糟糕。大多数软件在没有从另一个服务器获得回应时,都会重新发送另外一个数据包。不幸的是,大多数时候,没有获得回复的原因,恰恰是另外一个服务器已经过载。因此,当一个服务器过载严重,而无法作出及时回复时由于大量请求会重新发送,它的数据流量会瞬时增长一倍。

我们投入了大量的时间用于算法研究,并希望无缝处理“重试”(retry)可以解决的小问题,但是也需要确保不会在出现大故障的时候失去控制,因为那时候重试只会让事情变得更糟。

3. 高速缓存配置

这里有很多东西需要平衡——如果你有大的对象,你希望通过机器进行传递开,这样你就可以进行并行处理;但是如果是小的对象,你则希望它们可以同时出现,这样在RPC调用会给你带来多个对象。而Facebook需要的往往是后者,因此我们在改善“每RPC对象数量”方面,使用了很多的技巧。

很多情况都需要分离不同工作负载的对象,进行不同的调整。我们还花了大量的的时间,搞清楚是什么内存之中最具有成本效益的东西,以及何时非规范化能有用(实践中的大多数时候,非规范化并没有什么实质性的帮助)。

4. 失败处理

正如前面网络部分所提到的,有的时候一些方法能够解决小问题,但往往会让大问题变得更糟。例如,我有一个算法,给随机服务器发送请求,如果它没有得到答复,就会把请求重新发送到另一个不同的随机服务器上,直到它得到一个答复才会停止。如果你只有一两个机器出现问题的时候,这种方法显然会表现很好。但是如果你一半的机器都出现问题,那么就成了一场灾难。

这时,所有其他的机器的负荷都会突然加倍,而如果一半的机器都出现问题,很有可能意味着有着负载已经过高。这时候,你需要做的事情,是检测过载情况,并且减少负载。重要的是,要记住计算机科学意义上的实时系统,意味着:一个迟到的回应,就是一个错误的回应。

放弃一个请求的时候,人们往往会感觉不好,不过这往往是最好的处理方式——在出现问题的时候,最大化正确答案的数量才是最正确的。

另一种常见的模式是,当有些东西变慢的时候,就建立一个较大的队列(queue),然后让所有事情慢下来,减少负载。这可以是一个很棘手的算法,因为你可能在正常操作中也需要一个深队列,来处理瞬间突发流量。

5. 提升Memcache和MySQL

我们讨论到数据库/缓存集群的时候,人们总会想到Memecache和MySQL。我们在Memcache方面做了大量的工作,以提升吞吐量——大量的分析和解决方法,这大多数都是在网络栈中。因此很多这样的工作,实际上是在Linux内核中发生的。

在MySQL中,则是关于以一种合理的方式,获得磁盘上的数据,并且把内存中最有用的东西放到缓存里。马克•卡拉汉(Mark Callaghan)的博客中,有着大量的信息:《高可用性MySQL》

6. Meta

我们所遵循的原则,可以看看这篇文章《让Facebook的用户超过5亿》
  • 大小: 68.1 KB
来自: 腾讯科技
6
1
评论 共 11 条 请登录后发表评论
11 楼 dashuang 2013-01-31 18:34
   
10 楼 jasph77 2013-01-31 16:56
无意中点了一下文章后面的连接,
fb既然打开了。。。。。
9 楼 eisenwolf 2013-01-30 16:57
嗯。。人肉DDOS攻击还心有余悸呢,,,
8 楼 yy4252888 2013-01-30 13:21
中国墙开了 Fb就躺枪了。。。。
7 楼 swanky_yao 2013-01-29 18:11
计算机科学意义上的实时系统,意味着:一个迟到的回应,就是一个错误的回应。
6 楼 realvalkyrie 2013-01-29 16:20
counters15 写道
dsjt 写道
Facebook软件团队, 先感谢中国墙吧,
不然你们将面临更加庞大的数据量!!!


国内哪个达到了万亿级别的数据了?哪个达到10亿用户了?


这回答,想什么呢
5 楼 counters15 2013-01-29 15:34
dsjt 写道
Facebook软件团队, 先感谢中国墙吧,
不然你们将面临更加庞大的数据量!!!


国内哪个达到了万亿级别的数据了?哪个达到10亿用户了?
4 楼 zhongmin2012 2013-01-28 19:45
dsjt 写道
Facebook软件团队, 先感谢中国墙吧,
不然你们将面临更加庞大的数据量!!!



哈哈,精炼
3 楼 edhn 2013-01-28 19:25
虽然说的不多,但是看来挺有启发
2 楼 joynn 2013-01-28 18:00
dsjt 写道
Facebook软件团队, 先感谢中国墙吧,
不然你们将面临更加庞大的数据量!!!

哈哈,一针见血
1 楼 dsjt 2013-01-28 17:39
Facebook软件团队, 先感谢中国墙吧,
不然你们将面临更加庞大的数据量!!!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • [转]Facebook技术总监:如何管理10亿用户的数据?

    腾讯科技讯 (迭影) 北京时间1月28日消息,Facebook用户数量,已经突破10亿大关。Facebook在发展期间,所实现的技术成就,成为了IT行业工程师关注的话题。究竟Facebook取得了哪些技术成就呢?Facebook前工程部门...

  • 互联网企业:如何建设数据安全体系?

    Facebook数据泄露事件一度成为互联网行业的焦点,几百亿美元市值瞬间蒸发,这个代价足以在地球上养活一支绝对庞大的安全团队,甚至可以直接收购几家规模比较大的安全公司了。 虽然媒体上发表了很多谴责的言论,但...

  • 美图数据总监:Facebook的法宝,我们在产品中怎么用?

    【编者按】如果看过前FB工程师覃超的(《关于神秘的Growth Hacking...这里Facebook使用的一大法宝就是灰度发布和 A/B testing,让Facebook的日活达到了10亿用户。本文作者Fan,在美国卡耐基梅隆大学完成博士阶段学习...

  • 独家专访阿里云胡晓明:产业互联网 什么为王?

    钛媒体:你接手阿里云这几年,阿里云每年翻番地增长,而且同时面对着技术的变化、市场的变化、用户的变化,你觉得管理这样一个公司,到底需要什么样的能力和素质? 胡晓明:我自己认为阿里云是一家比较幸运的公司,...

  • 腾讯研发总监王辉:十亿级视频播放技术优化揭秘

    QQ 空间在 2016 年日均视频播放量由年初的千万级迅速突破到十亿级,过程中也对整个视频播放技术的可靠性、性能、操作体验等方面提出严峻的考验,相关质量急需提升。经过多个迭代持续和各项优化,外网整体质量已经...

  • 关于Libra的思考:金融服务是否应该开源?

    这是19年写的一篇文章,写给一位高层领导作为内部交流的资料,当时是不方便...而Libra,作为一个由多个金融机构组成的联盟,使用区块链技术提供金融服务,却按照区块链的习惯完全公开了其源码。开源到底有何利弊?金...

  • 解密MGC:如何用创新型AI做好Facebook广告?

    2020年1月,我发表了一篇名为《15分钟内破解Facebook广告》的文章,分享了2012至2019年我就职于Facebook7年间的工作方法与案例。 我最初写这篇文章其实是为了避免谈广告,因为各种朋友和创始人都找我咨询,最好能...

  • 数据架构选型必读:2021上半年数据库产品技术解析

    并且能够通过资源组的方式将TP和AP工作负载使用的资源进行隔离,而且实现了对大尺寸事务的支持,允许用户在一条DML语句中修改上亿行数据,真正实现了用一套系统支持实时混合负载。 兼容性:在V3.1版本,OceanBase...

  • We Are Social:数据显示印度Facebook用户中男性用户占比达76%

    根据英国咨询公司“We Are Social”最近发布的报告,印度Facebook用户中男性用户占比达76%,女性用户占比仅为24%。 从整个亚太地区来看,Facebook女性用户占比最高的国家分别为:新西兰(59%)、香港(54%)、澳门...

  • 数十家公司超10亿数据外泄,2019年数据安全不再“纸上谈兵”

    根据IDC预测,人类产生的数据量正在呈指数级增长,大约每两年翻一番,2020年全球数椐总量将达到35ZB(注:ZB为计算机术语Zettabyte,译为字节,1ZB为十万亿亿字节)。一方面...

  • 什么是超大规模数据中心?它们是如何工作的?

    有没有想过亚马逊和谷歌等大型科技公司如何继续为数十亿用户按分钟开发新应用程序并在很少停机的情况下运行它们?这些公司推出的一些技术已经成为我们日常生活中不可或缺的一部分。但这仅意味着增加了为这些应用程序...

  • 思科领导层薪酬曝光:CEO 1.5亿元、工程副总裁 280万、系统工程总监 135万、数据和分析经理 129万、销售主管169万...

    公众号回复:干货,领取价值58元/套IT管理体系文档公众号回复:ITIL教材,领取最新ITIL4中文教材正文《商业内幕》杂志分析了美国外国劳工认证办公室发布的数据,以了解思科为担任高级职位...

  • 数据挖掘,你知道的大公司有哪些?独家揭秘:大数据公司挖掘数据价值的49个典型案例

    本文力图从企业运营和管理的角度,梳理出发掘大数据价值的一般规律:一是以数据驱动的决策,主要通过提高预测概率,来提高决策成功率;二是以数据驱动的流程,主要是形成营销闭环战略,提高销售漏斗的转化率;三是以...

  • node-v5.2.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • node-v4.4.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • node-v5.9.1-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • node-v4.8.3-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • paython作业,字典类型

    paython作业,字典类型

  • 西北工业大学-金工实习答案.pdf

    西北工业大学-金工实习答案.pdf

Global site tag (gtag.js) - Google Analytics