热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Twitter为什么没有宕机?

五年来,我一直是Twitter的站点可靠性工程师(SRE),以后四年里,我是Cache团队唯一的SRE,四年来,我负责团队中的自动化、可靠性和运营。我设计并实现了大部分保持它运行的



五年来,我一直是 Twitter 的站点可靠性工程师 (SRE),以后四年里,我是 Cache 团队唯一的 SRE,四年来,我负责团队中的自动化、可靠性和运营。我设计并实现了大部分保持它运行的工具。

缓存可以用来使事情变得更快,或者减轻运行成本较高的东西的请求:
如果你有一个服务器需要1秒钟的响应,但每次都是同样的响应,你可以把这个响应存储在一个缓存服务器中,在那里可以在几毫秒内提供响应。或者,
如果你有一个服务器集群,每秒服务1000个请求可能会花费1000美元,你可以使用缓存来存储响应,并从该缓存服务器上提供服务。那么你就会有一个100美元的小型集群,而一个便宜的大型缓存服务器集群也许还需要100美元。
这些数字只是为了说明问题的例子。

缓存承担了该网站的大部分流量。推文、所有的时间线、直接信息、广告、认证,都是由Cache团队的服务器提供的。如果Cache出了问题,作为用户的你会知道,问题是可见的。

当我加入这个团队时,我的第一个项目是把正在退役的旧机器换成新机器。当时没有任何工具或自动化手段来做这件事,我得到的是一个包含服务器名称的电子表格。

缓存如何保持运行
保持缓存运行的第一个要点是,它们是作为Mesos上的Aurora作业运行的。Aurora为应用程序找到运行的服务器,Mesos将所有的服务器聚集在一起,所以Aurora知道它们。Aurora也会在应用程序启动后保持它们的运行。
如果我们说一个缓存集群需要100个服务器,它将尽力保持100个服务器的运行。如果一个服务器由于某种原因完全坏了,Mesos会检测到这一点,将服务器从它的聚合池中移除,Aurora现在会被告知只有99个缓存在运行,然后知道它需要从Aurora中找到一个新的服务器来运行。它将自动找到一个,并使总数恢复到100。没有人需要参与。

在数据中心,服务器被放置在称为机架的地方。机架上的服务器通过一个叫做交换机的设备与机架上的其他服务器相连。
从这里开始,有一个完整的复杂系统,将交换机连接到更多的交换机和路由器,并最终接入互联网。一个机架上可以容纳20到30台服务器。一个机架可能会出现故障,交换机可能会损坏,或者电源可能会坏掉,这样就会导致所有20台服务器瘫痪。
Aurora和Mesos为我们做的另一件好事是确保不会有太多的应用程序被放在一个机架上。因此,整个机架可以安全地瘫痪,突然间,Aurora和Mesos会找到新的服务器,作为运行在那里的应用程序的家。

之前提到的那个电子表格,也是在跟踪机架上有多少台服务器,电子表格作者试图确保不会有太多的服务器。现在有了当前的工具,当我们提供新的服务器以使其上线时,我们有工具可以跟踪所有这些。这些工具确保团队在一个机架上没有太多的物理服务器,而且所有的东西都以一种在出现故障时不会造成问题的方式分布。

不幸的是,Mesos并不能检测到每一个服务器的故障,所以我们对硬件问题有额外的监控。我们寻找像坏的磁盘和有问题的内存这样的东西。其中一些问题不会导致整个服务器瘫痪,但可能只是运行缓慢。我们有一个警报的仪表板,可以扫描到损坏的服务器。如果发现有一台服务器坏了,我们会自动创建一个维修任务,让数据中心的人去看看。

该团队还有一个重要的软件,就是跟踪缓存集群的启动时间的服务。如果在很短的时间内有太多的服务器被视为停机,那么需要关闭缓存的新任务将被拒绝,直到它安全为止。这就是我们如何避免意外地关闭整个高速缓存集群,并使受其保护的服务不堪重负。我们有一些阻止措施,比如有太多的服务器很快被关闭,一次有太多的服务器需要修复,或者Aurora无法找到新的服务器来放置旧的任务。要为一个被检测为故障的服务器创建一个修复任务,首先我们通过检查该服务来检查它是否可以安全地移除作业,然后一旦它是空的,它就被标记为安全的,以便数据中心的技术人员对其进行工作。当数据中心的技术人员将服务器标记为固定的时候,我们又有工具来寻找这一点,并自动激活服务器,以便它可以运行作业。唯一需要的人是数据中心的人,实际上是在修复它。(不过他们还在那里吗?)

反复出现的应用问题也得到了解决。我们有一些错误,新的缓存服务器不能被添加回来(启动时的竞赛条件),或者有时需要花费10分钟来添加一个服务器(O(n^n)逻辑)。由于所有的自动化工作,我们没有被人工任务所困扰,我们可以在团队中形成一种文化,在保持项目进度的同时,我们可以去修复这些问题。我们还有其他的自动修复措施,例如,如果一些应用指标,如延迟是一个异常值,我们会自动重新启动任务,所以工程师不会被呼唤。团队可能每周会收到一个页面,几乎没有关键的。我们经常有轮流值班的情况,没有人被呼叫。

容量规划也是网站没有瘫痪的重要原因之一。Twitter有两个数据中心,可以处理整个网站的故障。每个重要的服务都可以从一个数据中心运行。随时可用的总容量实际上是200%。这只是在灾难情况下,大多数时候两个数据中心都在为流量服务。数据中心的利用率最多只有50%。即使这样在实践中也会很忙。当人们计算他们的容量需求时,他们会计算出一个数据中心为所有流量服务所需的容量,然后通常在此基础上增加净空!只要不需要故障,就有大量的服务器净空可用于额外的流量。整个数据中心的故障是相当罕见的,在我工作的五年中只发生过一次。

我们还将缓存集群分开。我们没有一个多租户集群,为所有的东西提供服务,并且有应用层面的隔离。这有助于在一个集群出现问题时,将爆炸半径保持在只有该集群和机器上的一些共处的服务器。同样,Aurora通过保持缓存分布来帮助这里,所以不会有很多影响,最终监控会赶上并修复它们。



我做了上面的所有事情我确实与客户(使用缓存服务的团队)进行了交谈。在事情被自动化之后,我又把更多的事情自动化。我还研究了一些有趣的性能问题,试验了一些可能使事情变得更好的技术,并推动了一些大型的成本节约项目。我做了容量规划,并决定要订购多少台服务器。我很忙。

这就是为Twitter请求提供服务的缓存如何保持运行的原因。这只是日常运作的一部分。为了达到这一点,多年来付出了很多努力。这是一个回过头来欣赏这个东西仍在实际工作的时刻。

至少现在是这样,我肯定有一些错误潜伏在某个地方......


 

推荐阅读
  • 周鸿祎火力全开
    “在这个IoT时代,只是孤立地搞大数据,孤立地搞云,或谈AI,或做一个智能硬件,我觉得都是不完备的,必须将这几项技术综合运用起来,才是一个真正的IoT时代,也是IoT真正的春天。” ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和 ... [详细]
  • 点击上方[全栈开发者社区]→右上角[]→[设为星标⭐]前言年前准备换工作,总结了一波面试最频繁的面试问题跟大家交流。此文章是关于浏览器的常见问题, ... [详细]
  • 智慧城市背景下Python机器学习项目实战案例分享
    首先,何为智慧城市?智慧城市的“智慧”源自何处?智慧城市的特征在于运用大数据和数字技术提高居民生活质量。机构获得的数据越全面、越实时,它们就越有能力观测事件发生的详情、分析需求模 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 解决浏览器打开网页后提示“dns_probe_possible 怎么解决”的方法
    在使用浏览器进行网上冲浪的时候遇到故障是一件很常见的事情,很多用户都遇到过系统提示:dns_probe_possible。从提示中可以看出和DNS是有一定的关系的,经过小编测试之后 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • CISCO ASA防火墙Failover+multiple context详细部署By 年糕泰迪[操作系统入门]
    一.文章概述本文主要就CISCOASA防火墙的高可用和扩张性进行阐述和部署。再cisco防火墙系列中主要有3种技术来实现高可用和扩张性。分别是Failover,multiplese ... [详细]
  • IP、ARP、TCP、UDP、ICMP、DNS、路由协议、DHCP协议的缺陷,容易受到的攻击,以及防御措施1、IP协议1.1、介绍: ... [详细]
author-avatar
手机用户2502887763
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有