草庐IT

AWS 再次发生宕机事件,云时代下的我们该如何补救?

苏小宓 2023-04-18 原文

屋漏偏逢连夜雨。据外媒 ZDnet 报道,美国东部时间上午 10:26 左右,AWS 网络再次开始出现严重的问题。根据 Outages 邮件列表(供 ISP 和网络运营商报告和跟踪重大互联网问题的中央邮件列表)上的报告显示,AWS 托管服务于早晨开始变得“不稳定”。

许多基于 AWS 的业务服务,如双因素身份验证端点安全服务 Duo、视频会议平台 Zoom、消息传递服务 Slack,以及 Hulu、Xbox Live 和 Halo 在内的娱乐服务均受到了不同程度影响。

一周前 AWS 的宕机事件

之所以用“再次”,是因为在本月的 7 号,AWS 已经发生了一次大规模的宕机事件,此次宕机事件对亚马逊配送业务造成了严重破坏,以及 Facebook、Coinbase、Robinhood、迪士尼+、Netflix、任天堂等网站纷纷“躺枪”,彼时亚马逊在筛查问题后给出解释称:

绝大部分 AWS 服务和所有客户应用都在其主网络内运行,但它还用一个内部网络托管了基础性的服务,包括监视、内部 DNS 服务等。鉴于其重要性,AWS 用了多个地理位置上隔离的网络设备连接到这个内部网络,大幅扩展网络容量,确保其高可用性。12 月 7 日 7:30 AM PST,主网络的一个自动容量扩展活动意外引发了内部网络客户端的活动,导致了连接激增,连接内部网络和主网络的网络设备出现拥堵,通信延迟,引发了持续的拥堵和性能问题,影响到了团队实时监控的能力,使得他们难以快速识别问题的根源,只能依靠日志判断发生了什么。

亚马逊回应其已采取了行动确保相同的问题不会再次发生。但如今 AWS US-West-1、2 再次发生问题,AWS 虽然迅速发布报告,排查出问题出在美国西部 1 区和 2 区两个区域的互联网连接上,并表示“我们已经解决了影响与 US-WEST-1 区域的互联网连接的问题。区域内的连接不受此事件的影响。问题已得到解决,服务运行正常。”但仍有不少用户反驳道,“它看起来已经稳定了一些,但仍然存在一些 Bug。”

宕机原因

如今上云时代,云计算为数字化建设带来的功能性、效率与稳定性不容置喙,不过宕机事件也时有发生,且全球领先的云计算平台也未能幸免。在探究宕机的主要原因时,我们发现主要有以下几种:

  • 人为错误。这是唯一一种可归类于物理、软件层面的因素。人存在很大的“不确定性”,也正因此,很多云服务提供商会在产品中借助 AI 等技术来提高系统的智能与自动化功能,尽量减少人为错误带来的影响。
  • 网络问题。在这一层面上,云服务商通常会与电信提供商合作,其中关于网络问题,尤其是连接问题会超出云提供商的控制范围,他们必须要依赖本地的通信服务商们。不过,现在比较好的一点是,如果云服务商在全球范围内都有运营政策,且在不同地理位置的数据中心之间平衡工作负载,这样当网络出现中断时,他们会在合作伙伴解决网络中断的同时也能够继续为终端用户提供服务。
  • 停电。它是一种常见的物理原因,这对不同国家的电网或独立发电厂的电源提出了很高的要求。幸运的是,很多云服务供应商的数据中心会有备用发电机,如果发生断电等情况,数据中心的备用发电机可以支撑一段时间。
  • 网络安全。与很多人常规想象中的有所不同,其实网络攻击是云服务商无法使用云服务中极其罕见的原因之一。因为通过分布式基础设施,云服务已经具备很强的抵御能力,网络攻击事件虽有不少,但真正能够成功的并不多见。
  • 环境原因。云服务厂商无法控制的一件事就是自然灾害或与天气相关的事情,如飓风、雷暴、海啸和地震等等。
  • 维护问题。虽然最终用户只需为他们使用的服务付费,但云提供商需要维护、管理和运营他们整个复杂的 IT 基础设施。在这个过程中,云提供商也许按计划改进和升级系统,但也有可能会导致计划内的服务中断或系统完全重启。

宕机无法 100% 避免,我们所能做的就是在日常的操作、开发、使用过程中去降低出错率的同时,也正如微软顾问咨询服务大中华区 Cybersecurity 首席架构师张美波曾建议道:

“虽然云计算技术带来了按需服务、高扩展性、超大规模资源支持等优点,但是同样的,由于云计算平台的用户、应用和数据资源的高度集中,从而在云计算平台出现故障时,会导致更为严重的破坏和影响。
因此强烈建议大家在选择云计算服务平台时,尽量选择更安全的、更具有领先技术的全球领先云计算平台。”

此外,我们也不妨通过数据周期性备份、异地多活部署等方案来为云上数据加一份保险。

有关AWS 再次发生宕机事件,云时代下的我们该如何补救?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐