作者介绍:Ben Maurer是Facebook的网络基础团队的技术领先者,主要负责整个Facebook面向用户产品的性能和可靠性。Ben于2010年正式加入Facebook,基础设施团队的成员。在加入Facebook之前,他与Luis von Ahn共同创立的验证码。最近,本与美国数字服务公司合作,以改进在联邦政府的技术使用。
昨天,数人云已经为大家带来了Ben Maurer分享的“面对大规模系统工程,看Facebook如何处理故障排查(一)”的上半部分,主要涉及导致故障的原因、以及可以使用一个通用的系统等相关内容,今天,正式为大家带来了最终的解决方案,跟数人云一起来了解下吧~
故障是任何大规模工程系统的一部分。Facebook的文化价值之一就是拥抱失败。这可以从挂在门洛帕克总部墙上的海报上得到体现:“如果你无所畏惧,你会怎样?”“天佑勇者。”
为了使Facebook的系统在快速变化的情况下保持可靠,专门为其研究了常见的故障模式,并建立抽象理念来解决这些问题。这些理念确保最佳实践应用于的整个基础设施。通过建立工具来诊断问题,并创建一种复盘事故的文化来推动并作出改进,防止未来发生故障。
帮助诊断故障的工具
一个服务器即使有最好的预防措施,但是也会发生一些故障。在停机期间,正确的方式可以迅速解决问题,最大限度地减少故障持续时间。
高密度的仪表板与立体主义理念
在处理故障时,快速的获取信息也是至关重要的。良好的仪表板会让工程师快速评估一些可能会出现的异常指标,然后利用这些异常指标来推测原因。然而,仪表板增长速度越来越快,以至于很难迅速对其进行监控,如图3所示,仪表板显示的线程比会逐渐增多。
为了解决这个问题,Facebook专门为其制定了一个专业的仪表板,其采用了立体主义理念,主要用于创建图表折线图,折线部分用不同颜色来编码,使其更容易监测信息且看起来更加明了,同时可以将多个相似的数据放在一起进行比较,当然,立体主义也可以将多个不同的数据标准进行比较。上述的“立体主义理念”,可以更便捷的使用键盘进行操控,以此保证工程师可以快速查看多个指标。如图4所示,在不同高度情况下,面积图和平行线图表所显示相同的数据集,在区域图版本中,所显示的30像素点很难被监测,但是,立体主义理念可以使它更容易找到峰值,即使在30像素点也能很好的被检测到。
解决故障的有效办法
一般来说,导致故障的首要原因就是人为原因,而调试故障的最有效的方法是寻找人对其所做的更改,对这些已更改的信息进行收集整理,从配置更改入手,使用“opsstreamm”新软件。之前,由于较多的工程师对数据进行更改,致使数据源就变得越来越复杂,导致人们对其无法进行评估。
学习和借鉴
故障发生后,其中的故障审查过程可以更好的了解这些故障。
故障审查过程中,无论是谁都没有必要推卸责任,也没有人会因为这个故障被批评,其实,审查的目的是为了了解故障的起因,以及修复故障是否会引起一些不良现象出现,同时提出最为安全有效解决办法,以此来减少此类故障的再次发生。
如今,Facebook已经开发出一种解决方案,称为DERP(检测、升级、修复、预防),它可以提出更及时有效的解决方法。
检测:故障如何检测报警,仪表板的用户报告如何做?
升级:相关的人员能够很快的介入吗?这些人可能是通过警报而不是手动引入吗?
修复:应该采取怎样的措施来解决这个问题?这些步骤可能采取自动化吗?
预防:哪些改进可以消除此种故障再次发生?怎样汲取教训,以减少此种故障发生概率?
DERP可以分析故障的每一步,可以借助这种分析,即使不能确保此类故障不再发生,但至少可以保证下次恢复的更快。
“快速移动”的理念与稳定性不相矛盾,二者可以相互兼容。
Facebook的基础设施提供了安全:配置系统可以防止快速部署不良配置,其中核心服务是为客户提供API,以此避免故障发生;核心库是为了解决因资源枯竭所引发的延迟问题,建立更方便的仪表板和工具助力解决可能引起的问题,同时对故障进行改进,最重要的是,故障发生后,应该汲取经验教训,进行更改,使基础信息更稳定。
以上内容是数人云今天为大家带来的Facebook面对大规模系统工程故障时所提供的的解决方案,可以通过高密度的仪表板与立体主义理念进行故障排查,然后通过DERP对其进行实时监测、升级、修复等,以此来确保信息更稳定,保证故障发生的频率逐渐降低。
作者:Ben Maurer
原文:Fail at Scale Reliability in the face of rapid change
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。