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

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


 

推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
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社区 版权所有