📣📣📣📣📣📣📣
🎍大家好,我是慕枫
🎍前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识
🎍在这里和大家分享一线互联网大厂面试经验、技术人成长路线以及Java技术、分布式、高并发、架构设计方面的经验总结
🎍感恩遇见,希望我们都能成为更好的自己
📣📣📣📣📣📣📣
2022年12月18日大概是阿里云最黑暗的日子,阿里云香港Region可用区C因为机房水冷装置出现故障导致大规模服务中断,对很多客户业务产生重大影响,包括澳门多家网站及App自当日午时起无法访问使用。云服务器宕机后一般几个小时左右便能恢复,可是阿里云这次宕机于12月18日早上8点56分首次检测到故障警告,直到次日凌晨0点30分所有服务才恢复正常,整个故障持续时间超过15个半小时。号称世界第三的云计算服务商在机房出现异常的时候要耗费如此多的时间才能恢复简直不敢想象,实在和其宣扬的各种黑科技高可用大相径庭。
这次的宕机事件对阿里云的技术品牌力损伤非常大,可能后期你再宣扬自己技术有多牛,客户可能都不会相信了,一旦失去了客户的信任,那离失去市场也就不远了。毕竟现在云计算市场竞争还是比较激烈的,像华为云、腾讯云以及百度云等都在摩拳擦掌抢占市场份额。

在机房出现故障的时候,首先检测到的是机房温度异常升高而后才排查到是机房制冷设备问题,很明显机房监控系统没有对制冷机组进行监控。原因机房主备水冷机组共用了同一个水路循环系统,因此存在单点故障问题,一旦水路循环系统出问题,主备水冷机组都会受影响。后期对制冷设备进行手动操作仍然不能恢复其正常运行,很明显没有对水冷设备进行过设备故障演练,导致出现问题后恢复操作时间过长。
大家都知道机房中的服务器都是电子设备,而电子设备最怕水了,如果服务器进水了那就很有可能导致服务器短路损坏,进而导致服务器数据丢失,更加延长了故障恢复的时间。所以为什么不是喷洒七氟丙烷气体灭火,最起码泡沫、粉末也行啊,但是实际上直接触发了喷淋操作,这也是非常诡异的地方。
企业使用阿里云的一个重要原因就是看中了其高可用能力,希望哪天在发生故障的时候用户可以无感地快速进行切换,尽可能的减少故障导致的业务中断时间。而在此次的阿里云宕机故障中,虽然采用了B、C可用区双机房进行了容灾,在C可用区故障之后通过B可用区对外提供服务,但是可惜的是B可用区服务实例资源不够,同时ECS启动时依赖的中间件服务没有进行双机房容灾,只部署在了可用区C机房当中,而此时的可用区C机房已经出现故障,导致B区无法实现扩容。这也暴露了阿里云对重要的基础中间件以及oss基础服务并没有真正做到全部双机房容灾,出现了单点故障问题。
2022年12月29日,阿里云宕机事件不到两周的时间,阿里巴巴董事会主席兼CEO张勇向阿里全员信公布人事变动信息,张勇将亲自兼任阿里云智能总裁,张建锋不再担任阿里云智能总裁。在这封信中提到:只有在一点一滴的行动上保障好客户利益,创造好客户价值,才能承担好引领发展、创造就业、参与国际竞争的大使命。
在这封全员信发出后,张勇作为阿里云智能总裁单独面向阿里云全体小二发了内部信,信中措辞更为严厉,在800多字的内容中,提到了超过20次“客户”,可见张勇这次是真的急了。以下截取了信中部分内容。

无论是像阿里这样体量的公司还是正在创业的公司,都要始终把客户的利益放在第一位,把客户的信任放在第一位才能赢得客户,赢得市场。否则一旦失去客户的信任,也就慢慢失去了市场,那么在激烈的市场竞争中就会被淘汰。希望在新的一年里阿里云真的可以吸取这次宕机事件的教训,真正为客户创造价值。
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or