热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阿里云大规模故障_故障隔离和恢复:从大规模和超大规模计算中学习

阿里云大规模故障在我建立业务关键型企业系统很长时间以来,我还没有从事具有成千上万台服务器的大规模云计算或Internet规模的体系结构的工作。大规模的工程系统中需要解

阿里云大规模故障

在我建立业务关键型企业系统很长时间以来,我还没有从事具有成千上万台服务器的大规模云计算或Internet规模的体系结构的工作。 大规模的工程系统中需要解决一些引人入胜的难题,但我最感兴趣的是部署和运营管理中的问题,尤其是如何处理故障。

在大型系统中,活动部件如此之多,一种或另一种故障是常见的:磁盘(尤其是),服务器和多台服务器,机架,网络,数据中心中断和地理灾难,以及数据库故障,中间件和应用程序软件故障,当然还有人为错误–配置和操作中的错误。 随着扩展,您还将遇到多个同时发生的故障和故障组合, 正常事故 ,更多的heisenbug和mandelbug ,以及数据损坏问题和其他无提示故障。

这些挑战在petascale和exascale HPC平台中达到了极限。 在petascale系统(今天运行的最大的超级计算机)上的平均故障时间(MTTF)可以低至1天。 桑迪亚国家实验室(Sandia National Laboratories)的迈克尔·海洛克斯(Michael Heroux)表示,百亿亿级系统由数百万个处理器组成,能够每秒处理1万亿次计算(这些计算机尚不存在,但预计在未来10年内)

“故障率非常高,实际上处于恒定的衰减状态。 我们目前对功能良好的可扩展系统的感觉“所有节点都已启动并正在运行”将是不可行的。 取而代之的是,我们将永远有一部分机器死机,一部分正在死机,甚至可能产生错误的结果,另一部分又恢复了生命,还有最后的很大一部分正在计算快速而准确的结果。”

当然,对于企业系统,组件或组合的故障率会低得多,但是存在相同的风险,并且原理仍然成立。 认识到可能发生并将会发生故障,重要的是:

  • 尽快发现故障。
  • 最小化并控制故障的影响。
  • 尽快恢复。

在QCON SF 2009上, 杰森·麦克休 ( Jason McHugh)描述了面对如此多的故障情况,亚马逊S3大规模云计算服务是如何设计以实现弹性的。 他列出了系统大规模生存的7个关键原则:

  1. 解耦上游和下游流程,并在出现问题时保护自己免受上游和下游的依赖关系:上游的过载和峰值,下游的故障和减速。
  2. 大故障设计。
  3. 不要信任在线或磁盘上的数据。
  4. 弹性–资源可以随时在线。
  5. 监视,推断和React:检测并创建反馈循环。
  6. 针对频繁的单个系统故障进行设计。
  7. 举行“游戏日”:关闭生产中的一组服务器或数据中心,并证明您的恢复策略在现实世界中可行。

故障管理需要在实现级别上进行架构和处理:您必须期望并处理每个API调用的故障。 这是Michael Nygard的Release It!中的关键思想之一。 ,即支持数据中心的大型系统的开发人员不能满足于处理抽象,他们必须了解系统所运行的环境,并且必须学会不信任它。 本书提供了一些有效的建议和想法(“稳定性模式”),以防止发生水平故障(链式React)和垂直故障(级联故障)。

对于层之间的垂直故障,请使用超时和延迟的重试机制来防止挂起和超时–保护所有远程调用(和资源池签出)上的请求处理线程,并且永远不要永远等待。 释放它! 引入了一种断路器模式来管理此问题:重试次数过多后,关闭连接,先退出,然后再试一次–如果问题仍未解决,请关闭并再次退出。 并记住要快速失败–如果资源不可用或无法完成远程调用,请不要卡住阻塞或死锁。

在层中的水平连锁React中,一个组件的故障增加了其对等组件出现故障的可能性,因为工作负载重新平衡以淹没其余服务。 通过分区和隔板来保护系统免受连锁React–构建内部防火墙以隔离不同服务器或服务或资源池上的工作负载。 虚拟服务器是一种分区和隔离工作负载的方法,尽管由于管理方面的额外复杂性,我们不选择在生产中使用虚拟服务器–我们在虚拟化方面已经取得了很多成功,其中虚拟化用于提供测试环境和管理服务,但是对于大量,低延迟的事务处理,我们发现单独的物理服务器和应用程序分区更快,更可靠。

应用程序和数据分区是许多系统(例如交易所交易引擎)中的基本设计思想,在该系统中,市场被细分为许多不同的交易产品或产品组,并出于可伸缩性和工作负载平衡的目的而隔离在不同的分区中。 James Hamilton,以前曾在Microsoft工作,现在是Amazon Web Services团队的杰出工程师,他在“设计和部署Internet规模服务” (对关键问题的分析)中强调了分区对于应用程序扩展以及故障隔离和多租户的重要性。大规模地进行运营管理和系统体系结构方面的研究,重点是效率和弹性。 他谈到了最小化跨分区操作以及以细粒度级别智能管理分区的重要性。 这里的其他一些有价值的想法包括:

  • 失败设计
  • 基础组件零信任
  • 从规模上讲,即使不大可能,异常组合也会变得司空见惯
  • 版本一切
  • 最小化依赖
  • 在生产中定期练习故障转移操作
  • 阅读本文。

所有这些想法都建立在伯克利和斯坦福大学面向恢复计算的研究工作之上,这些工作旨在解决互联网泡沫时期互联网时代交付的系统中的可靠性问题。 面向恢复的计算的基础是:

失败会发生,您无法预测或避免失败。 面对这个事实并接受它 。

通过在体系结构,工程和维护中采取谨慎的步骤来避免故障并最大程度地缩短平均故障时间,并通过培训,程序和工具来最大限度地减少人为操作失误的机会-所有这些都是必要的,但这还不够。 为了“始终在线”可用性,您还需要最小化平均恢复时间(MTTR)。

恢复包括3个步骤:

  1. 发现问题
  2. 诊断问题的原因
  3. 修复问题并恢复服务。

尽快发现故障。 最小化并控制故障的影响。 为系统管理员提供经过测试的可靠工具,以快速安全地恢复系统。

面向恢复的计算的主要推动力之一是分区:隔离故障并控制损坏。 简化诊断; 在组件级别实现快速的在线修复,恢复和重新启动; 并支持动态配置–弹性或“按需”容量升级。

正如有关云计算故障和其他大规模SaaS问题的持续报道所显示的那样,这些问题尚未解决,并且随着这些系统的规模不断增加,它们可能永远也无法解决。 但是,到目前为止,我们仍然可以从中学到很多东西。

参考: 故障隔离和恢复:从我们的JCG合作伙伴Jim Bird的“ 大规模和超大规模计算”中学习,形式为“ Build Real Real Software ”博客。
相关文章:
  • 为什么自动化测试可以提高您的开发速度
  • 代码质量对客户很重要。 很多
  • 使用FindBugs产生更少的错误代码
  • 生存在荒野西部开发过程中的9条提示
  • 每个程序员都应该知道的事情
  • 不执行代码审查? 你的借口是什么
  • 软件可靠性的教训

翻译自: https://www.javacodegeeks.com/2011/07/failure-isolation-recovery-high-scale.html

阿里云大规模故障



推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
author-avatar
波猫小丝992
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有