阅读更多

7顶
0踩

互联网

转载新闻 Facebook停机事件详细技术内幕

2010-09-27 13:12 by 见习编辑 theone 评论(1) 有3074人浏览
今天早上Facebook发生宕机事故,导致你们中的很多人不能访问本站达2.5小时左右。这是我们在4年里遇到的最严重的一次宕机事故,我们首先要对这次事件表示歉意。我们同时也想把这次事故发生的更详细的技术内幕透露出来,和大家一起分享这次大教训。

导致这次事故演变成如此严重的事件的关键问题出在一个倒霉的错误状态处理操作上。一个用来检查配置数据的自动执行程序试图修复这个错误结果却带来了更糟糕的破坏。

这个自动执行程序的目的是检查缓存中的配置数据是否有效,并从持久存储库里取出数据更新到缓存。这项工作对处理缓存上的临时问题运行正常,但当持久数据库失效时,它就出问题了。

今天我们对一个配置数据的持久副本做了一点修改,让它显示为无效。这意味着每一个客户机都能看到这个无效数据,并且试图修复这个数据。因为修复过程牵涉到对数据库集群的查询,一下子这每秒钟百万次的查询迅速把集群累垮。

更糟糕的是,每次一个客户机试图查询数据库失败都认为是有一个无效数据,缓存里的相应的键值会被删除。这意味着即使最初的问题被解决了,请求查询的数据流仍然不会停止。直到数据库无法为其中的某些请求进行查询,而这又会给自己招致更多的查询。我们进入了一个循环反馈圈,使数据库无法恢复正常。

让这个循环反馈圈停下来的办法是很不情愿的——我们必须把所有通向数据库集群的请求全部停下来,也就是关闭网站。当数据库恢复正常,问题的根源被清除后,我们逐渐的开放用户对网站的访问。

这样今天我们使得网站恢复了运行,我们现在已经关闭了那个试图纠正配置数据的系统程序。我们正在对这个配置系统做新的设计,会参考Facebook上其它系统的设计模式,让其能够优雅的处理循环反馈圈和瞬间峰值。

我们再次对网站宕机表示歉意,我们希望你们能理解,我们对Facebook网站的性能和可靠性非常的重视。

[英文出处]:More Details on Today's Outage
来自: 外刊评论
7
0
评论 共 1 条 请登录后发表评论
1 楼 wjfw 2010-10-04 10:21
能够坦然的表述技术错误,赞一个

发表评论

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

相关推荐

  • C#简单的子父窗口委托事件

    很容易懂得的 里面包含源代码 等等................................................................................................................................................................................................................

  • C# 窗口事件

    窗口切换

  • C#窗体程序首次打开时控件绑定事件报错的处理

    C#窗体程序首次打开时控件绑定事件报错的处理

  • C# 窗体程序加载&事件触发顺序

    通常,我们观察窗体加载时,我们也可以看出一些规律。比如一个窗体内容很多的窗体,我们会看到,窗体的边框会最先出现,但是里面的内容还在加载,如果说对控件有绑定值的操作,那种效果就会更加明显。这时,我们可能就会有先让窗体加载出来,再让他在慢慢的加载一些隐藏数据的想法。。。 主要说明执行顺序事件有:Form()、Show()、ShowDialog()、Shown()、Load()、SizeChange() 知识无极限,与你来相见,欢迎点赞支持!

  • C# 窗口事件参数

    C#中,一般的窗口事件参数为:(object sender, KeyPressEventArgs e) 其中sender是指谁触发的事件;e则指出发送时候附带了什么信息 不同的事件,e中所含的信息会不同; 例如键盘敲击KeyPress事件,则包含键位信息;而在鼠标事件中,则包含左右键、点击位置等信息

  • C#窗体应用程序之新建窗体和添加窗体事件

    1.新建窗体并打开窗体 在项目文件中添加新建项,选择Windows窗体, 在Form1窗体中添加鼠标单击窗体事件,并在该事件对应的方法中写入打开 Form2 窗体的代码,点击窗体1,然后有下角点击事件,具体代码如下。 点击MouseClick,实现单击后弹出新的窗口的功能,双击MouseClick,跳到代码处并写入以下代码 private void Form1_MouseClick(object sender, MouseEventArgs e) { //

  • C#添加窗体事件

    在 Windows 窗体应用程序中系统已经自定义了一些事件, 在窗体属性面板中单击闪电图标即可查看到窗体中的事件,如下图所示。 窗体中常用的事件如下表所示: ...

  • C#窗体的常用事件

    Load                            ——窗体加载时事件MouseClick                 ——在窗体中单击鼠标触发该事件MouseDoubleClick     ——在窗体中双击鼠标触发该事件MouseMove               ——在窗体中移动鼠标触发该事件KeyDown                    ——键盘键按下时触发该事件Ke...

  • C#窗口事件处理初探(转载)

    C#窗口事件处理初探作者:zhenxizhouC#窗口事件处理初探 事件驱动(Event Driven)是C#窗口程序设计的核心,其重要性就相当于VC中的消息映射,不了解事件驱动就无法深入窗口程序设计的殿堂。在C#语言中,事件的处理主要有两种方法:委托式的事件处理模式(Delegation Event Model)与对可重载方法(Event Method)的重载。1、委托式事件

  • C#+wpf窗体事件

    C#+wpf 窗体Loaded Closing Closed事件,2010版本,适合初学者。

  • C# winform一个窗口按钮触发另一个窗口的load事件

    具体情况是: A是主页面,有datagridview控件显示数据,点击“增加”按钮弹出B页面,由B页面获取数据,然后在B页面,“保存”按钮点击后,保存数据,然后会重新load一次datagridview,更新数据表。 A页面的几个主要事件: namespace textbox { public partial class Form1:Form { public static Form

  • 用 C# 做组件设计时的事件实现方法讨论

    事件,其实就是将物体的某个过程处理通过委托(delegate, 也就是函数指针) 的方式公开给外部的自定义函数处理。 C# 可以使用多播委托,但实际上一般情况下只需要用到单播。事件需要通过调用到那个委托的代码触发才可以被调用。以下用例子来说明。首先我们定义一个委托:namespace EventDemo{ public delegate void ProcessHandl

  • C# 窗口关闭事件

    //退出按键 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("是否退出?", "提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (dr == DialogResult.OK) .

  • C#窗体之间传递消息和事件

    C# WinForm编程中,你是否遇到过这样的问题,在主窗口Form1中点击按钮,弹出一个子窗口Form2,你希望在Form2中调用Form1的函数,改变Form1的显示,却发现Form1不听话,达不到预期效果。有的人说我调试了的,那段函数确实执行了,怎么还是没有显示呢? 案例: 在winform中,我在点击from1的一个按钮,弹出from3执行一个函数,其实form

  • C#窗体应用开发基础(二)——事件与方法

    目录 总述 控件交互型事件 类与属于类的方法 方法在事件中调用 控件窗体交互型事件 方法中值的返回 总述 事件在某种意义上可以理解为控件交互或控件与窗体的交互,可以说成是不需要编写代码来调用的方法。这样分类可能并不严格,解释也不一定正确,但比较容易理解。按照这个思路,首先来看一下控件交互型事件。 控件交互型事件 控件间的交互很容易理解,打个比方:点击某个按钮,实现了对某个文本框内的数据的计算并返回给另一个文本框。在这里,点击按钮这个事件出发的即是后续一系列内容。 具体应该如何实现,就以

  • C#窗体的Load事件与Shown事件的区别

    转自:http://blog.csdn.net/lucky51222/article/details/44472527 Load:在第一次显示窗体前发生。 [csharp] view plain copy   "code" class="csharp"> private void Form1_Load(object sender,

Global site tag (gtag.js) - Google Analytics