l14107cb 发表于 2024-8-25 13:26:17

依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验

<img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXbicGiafP1pjwOSDDwjSF3Cg1rswMiaGXWokmRbhYhRNXWRW0KxhGaQxdg/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;">作者|中亭
    编辑|小智
    2016 年,阿里巴巴<span style="color: black;">开发</span>了故障演练系统,把故障以场景化的方式沉淀到系统中,在线上主动回放故障,验证监控报警、限流降级、故障迁移、容灾策略、故障处理的有效性。本文将探讨经典的故障类型,剖析故障成因,提出<span style="color: black;">处理</span><span style="color: black;">方法</span>,介绍故障演练系统的设计和演进,提出故障演练的原则和经验。<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">注:本文整理自阿里技术专家中亭在 QCon 北京 2017 上的演讲,由阿里技术公众号授权转载。</span></p>
    <span style="color: black;">写在前面</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本文分享的内容<span style="color: black;">重点</span>还是围绕故障治理<span style="color: black;">相关</span>。众所周知,故障治理本身<span style="color: black;">便是</span>一个比<span style="color: black;">很强</span>的<span style="color: black;">专题</span>,几乎<span style="color: black;">触及</span>到运维、<span style="color: black;">开发</span>、故障运行管理的<span style="color: black;">所有</span>岗位,奇葩一点的故障还可能<span style="color: black;">触及</span>到运营和<span style="color: black;">制品</span>经理。聊到故障的苦与泪,相信 45 分钟绝对连开头都没讲完。今天的分享,<span style="color: black;">重点</span>还是回归故障<span style="color: black;">出现</span>的本质,故障<span style="color: black;">原由</span><span style="color: black;">方向</span>切入。看<span style="color: black;">是不是</span>有<span style="color: black;">有些</span><span style="color: black;">办法</span>论和通用性的手段<span style="color: black;">能够</span>沉淀出来。<span style="color: black;">期盼</span><span style="color: black;">能够</span>对<span style="color: black;">大众</span>有所<span style="color: black;">帮忙</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXf4peMqX5w98tXUMxmKXDTJMoz88JSyKgD3ltE6JGOJ426rbLicDR6BQ/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">首要</span>介绍一下我自己,姓名周洋,花名中亭。2011 年加入阿里接触稳定性技术<span style="color: black;">行业</span>,<span style="color: black;">起始</span>做<span style="color: black;">有些</span>稳定性<span style="color: black;">制品</span>的<span style="color: black;">开发</span>,<span style="color: black;">同期</span><span style="color: black;">亦</span>会承担<span style="color: black;">有些</span>架构演进的推进工作,<span style="color: black;">例如</span> HTTPS 改造,电商交易链路升配等。2015 年<span style="color: black;">起始</span>搞双 11 大促,做为共享事业部的大促负责人,<span style="color: black;">保证</span>了双 11 的稳定。<span style="color: black;">亦</span><span style="color: black;">得到</span>双 11 老 A <span style="color: black;">亦</span><span style="color: black;">便是</span>双 11 特种兵的<span style="color: black;">叫作</span>号。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">共享事业部<span style="color: black;">针对</span>在座各位可能比较陌生。<span style="color: black;">倘若</span>我换一个说法,商品、交易、会员、优惠、<span style="color: black;">评估</span>、中间件,<span style="color: black;">大众</span>应该就都知道了,这是双 11 当天最具挑战的链条之一。右边是中间件核心作战室成员,在过了双 11 业务高峰后的一张合影。2016 年<span style="color: black;">迄今</span>,工作的重点在常态稳定性的确定性方面,今天的分享<span style="color: black;">亦</span>是<span style="color: black;">重点</span>围绕这部分内容。</p>
    <span style="color: black;">分布式系统<span style="color: black;">平常</span>依赖故障治理及技术演进</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">首要</span>抛一个问题,什么<span style="color: black;">状况</span>下你会认为淘宝网挂了? 我相信关注这个问题的人<span style="color: black;">非常多</span>,<span style="color: black;">不外</span>能给出确切答案的人并不多。<span style="color: black;">由于</span>这个看似简单的问题,真要回答起来<span style="color: black;">好似</span><span style="color: black;">亦</span>不是<span style="color: black;">那样</span>容易。今天的分享,我先试着给<span style="color: black;">大众</span>回答一下这个问题。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXicY7DUL70z9CGldJFm0CBCMxmFr3js3sHf0eZ2dWyDFjco4cKVrb0bA/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">让<span style="color: black;">咱们</span>从一张“简单”的页面说起。这张页面叫做商品详情页,<span style="color: black;">针对</span>大部分人来讲,这张页面是<span style="color: black;">她们</span>在淘宝完成一笔订单的<span style="color: black;">第1</span>步。而商品详情页的使命<span style="color: black;">便是</span>把商品的信息<span style="color: black;">无</span><span style="color: black;">保存</span>的展示给<span style="color: black;">大众</span>,<span style="color: black;">导致</span><span style="color: black;">大众</span>的兴趣,引导<span style="color: black;">大众</span>完成购买或是<span style="color: black;">保藏</span>。从信息展示的<span style="color: black;">方向</span>来讲,商品详情页确实是一张非常简单的页面。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXvgXrxRIwH3oOC78YjvYAYU9lvrCVQpgvVs30QMep7lNPbtSLXyl0mg/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">咱们</span>再来看一下商品详情页应用的后台架构。商品详情页是阿里最早实现静态化应用之一。<span style="color: black;">哪些</span>与浏览者无关信息,<span style="color: black;">例如</span>商品标题、<span style="color: black;">照片</span>信息、<span style="color: black;">营销</span>属性组合等信息均直接进入缓存,其他和用户<span style="color: black;">关联</span>的,如优惠、库存、物流、服务等动态信息则<span style="color: black;">经过</span>异<span style="color: black;">步骤</span>用方式填充至静态化后的页面框架内。为了在一张页面展示足够多可供决策信息,撩起用户的购买欲望,详情后台必须去依赖非常多的服务应用,聚合足够多的信息。少则几十,多则成百。从这个<span style="color: black;">方向</span>来讲,商品详情页面又是阿里依赖最<span style="color: black;">繁杂</span>的应用之一。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">互联网业务的一个<span style="color: black;">重点</span>特点是,业务迭代非常快,<span style="color: black;">每日</span>有新<span style="color: black;">需要</span>,每周都有新发布,每年都有大重构,每一次变化都有可能<span style="color: black;">引起</span><span style="color: black;">情况</span>的<span style="color: black;">出现</span>。越是贴近用户的系统,受下游服务影响越大。<span style="color: black;">那样</span><span style="color: black;">咱们</span>不仅好奇,<span style="color: black;">针对</span>详情这个阿里最<span style="color: black;">繁杂</span>的应用,下游<span style="color: black;">出现</span><span style="color: black;">有些</span><span style="color: black;">情况</span>时,系统会变成<span style="color: black;">怎么样</span>?<span style="color: black;">咱们</span><span style="color: black;">经过</span>两个实验来观察一下:</p>实验一:假设后端的优惠、库存、物流<span style="color: black;">出现</span>故障,<span style="color: black;">咱们</span>来观察一下商品详情页的表现。<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXShIh7kr2Prq4OCWlwia6PtsWr1QBDreZGzmZweatM45dadgdU3JI0lw/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">乍一看,<span style="color: black;">好似</span>没什么问题。只是觉得页面清爽了<span style="color: black;">有些</span>。或许在这个信息过暴的时代,看着这么清新脱俗的页面,还有一点点暗爽。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在现场做了两个调查,观察<span style="color: black;">大众</span>对实验一的反映。调查 1 是请认为详情页故障了的<span style="color: black;">朋友</span>请举手。结果是现场<span style="color: black;">无</span>人举手(<span style="color: black;">亦</span>可能是现场氛围还比较冷);调查 2 是请<span style="color: black;">大众</span>来找茬,前后两个详情页有多少处<span style="color: black;">区别</span>?这次有一个妹子说出了正确的答案(<span style="color: black;">同期</span><span style="color: black;">亦</span>向妹子赠送了电子工业出版社出版的讲述阿里双 11 技术演进的《<span style="color: black;">都在</span>双 11》书籍)。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVX8Xx7Yq4C5wQFl7iciaMpqcFYIzvlCOjpzcvWu42BaCN1BoFGmeH3o7oQ/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">无</span>对比就<span style="color: black;">无</span><span style="color: black;">损伤</span>,一共有 6 处<span style="color: black;">区别</span>。从功能<span style="color: black;">方向</span>,这铁定是一个故障页面。<span style="color: black;">不外</span>从用户体验和业务<span style="color: black;">方向</span>讲,少了这些信息<span style="color: black;">亦</span>不影响商品购买,不影响核心用户体验。<span style="color: black;">好似</span>又是没故障?有点纠结,对吧? 您先纠结一会儿,<span style="color: black;">咱们</span>来进行第二个实验。</p>
    实验二:当商品详情的"商品"出了问题,商品详情会<span style="color: black;">怎么样</span>? <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXJaibCk7TY0QZ3QL7qmtGyKicF66KQwBCTwxia3V3HkAPmRia7S4JKdFoVA/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">详情还是那个详情,只<span style="color: black;">不外</span>是商品详情变<span style="color: black;">成为了</span>错误详情。<span style="color: black;">第1</span>张页面:很抱歉,你查看的商品找不到了。有可能是你<span style="color: black;">拜访</span>的方式不对,<span style="color: black;">例如</span> URL 上面少了<span style="color: black;">有些</span>参数,<span style="color: black;">亦</span>可能是后台真的出问题,<span style="color: black;">针对</span>用户还算是比较温柔的一种方式。第二张页面:很可能<span style="color: black;">便是</span>网站真的出问题了。比较可能的<span style="color: black;">原由</span>是后台<span style="color: black;">无</span><span style="color: black;">恰当</span>的处理超时<span style="color: black;">引起</span>前端<span style="color: black;">反常</span>。<span style="color: black;">不外</span>说实话,这个页面我<span style="color: black;">亦</span>非常少的见到。<span style="color: black;">倘若</span>真的<span style="color: black;">显现</span>了,那基本<span style="color: black;">便是</span>一次非常严重的事故。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXjE3HuLqyXHQTVZRdI5d00alppMc4S7NpnX9mQhJ2lK8RpKxGxJFS8g/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">经过</span>上面的两个实验,相信<span style="color: black;">大众</span>应该<span style="color: black;">针对</span><span style="color: black;">咱们</span>今天要介绍的一个概念"强弱依赖"有<span style="color: black;">有些</span>模糊的感觉了。 从感性的<span style="color: black;">方向</span>来讲,<span style="color: black;">便是</span>当下游依赖服务<span style="color: black;">显现</span>问题时,当前系统会受到<span style="color: black;">有些</span>影响,让用户有感觉的是强依赖,没感觉的是弱依赖。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">不外</span>这种定义<span style="color: black;">不足</span>严谨,<span style="color: black;">由于</span>总<span style="color: black;">不可</span>说<span style="color: black;">无</span>用户<span style="color: black;">拜访</span>时,就不算故障吧。<span style="color: black;">因此</span><span style="color: black;">亦</span>需要从理性<span style="color: black;">方向</span>定义一下:<span style="color: black;">首要</span>应该<span style="color: black;">出现</span><span style="color: black;">情况</span>,其次应该是核心业务,最后<span style="color: black;">是不是</span>带来损失。不影响核心业务流程,不影响系统可用性的依赖都<span style="color: black;">能够</span>叫做弱依赖,反之<span style="color: black;">便是</span>强依赖。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXiapSP1we51j0kMv5akBZfWw6sPibtfm3IdNSqY8IwrKJGsBtHIMibCTIQ/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">最终</span>解释清楚什么是强弱依赖,<span style="color: black;">那样</span>做好强弱依赖治理到底有什么<span style="color: black;">道理</span>?抛开依赖模型来看强弱,<span style="color: black;">道理</span>不大。严谨的依赖模型应该<span style="color: black;">包含</span>关系、流量、强弱三个<span style="color: black;">构成</span>部分。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">依赖关系定义依赖的方向,我依赖谁,谁依赖我。流量定义着<span style="color: black;">每一个</span>应用、服务、<span style="color: black;">办法</span>调用的次数,强弱则定义着依赖的松紧程度。依赖治理<span style="color: black;">便是</span><span style="color: black;">经过</span>科学的手段<span style="color: black;">连续</span>稳定地拿到关系、流量、强弱的数据。强弱依赖<span style="color: black;">重点</span><span style="color: black;">能够</span>被应用到下面的场景:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">系统改造验收:<span style="color: black;">针对</span>分布式系统,<span style="color: black;">最少</span>应该做到运行态中不会<span style="color: black;">由于</span>我依赖的系统<span style="color: black;">显现</span>故障,而<span style="color: black;">导致</span>当前应用<span style="color: black;">显现</span>可用性的问题,<span style="color: black;">例如</span>进程挂掉,频繁 FullGC,负载飙高等,何时何地都具备快速止血的能力。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">限流降级参考:<span style="color: black;">针对</span>弱依赖,<span style="color: black;">通常</span>都要配置限流或是自动降级策略,比起<span style="color: black;">经过</span>拍脑袋或是经验值来设定,倒不如<span style="color: black;">经过</span><span style="color: black;">实质</span>的故障测试来进行微调,<span style="color: black;">例如</span><span style="color: black;">针对</span>下游<span style="color: black;">显现</span>超时<span style="color: black;">状况</span>,就<span style="color: black;">能够</span><span style="color: black;">经过</span>实验得出基于线程池限流到底要填写多<span style="color: black;">少许</span>值。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">应用<span style="color: black;">起步</span><span style="color: black;">次序</span>:理想<span style="color: black;">状况</span>下,应用<span style="color: black;">起步</span>更应该做到 0 强依赖<span style="color: black;">起步</span>。<span style="color: black;">不外</span>有<span style="color: black;">有些</span><span style="color: black;">状况</span><span style="color: black;">没法</span>做到。<span style="color: black;">因此呢</span>应用<span style="color: black;">起步</span>的依赖<span style="color: black;">次序</span><span style="color: black;">亦</span>需要实时关注。<span style="color: black;">尤其</span>是新 IDC、机房建站时,那个蜘蛛网<span style="color: black;">同样</span>的依赖关系,最好是<span style="color: black;">经过</span>系统方式<span style="color: black;">得到</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障根源定位:后台系统的故障,<span style="color: black;">常常</span><span style="color: black;">经过</span>上一层的业务故障表现出来。故障处理讲究的是争分多秒,良好的强弱依赖,<span style="color: black;">针对</span>系统自动化诊断有非常大的助力<span style="color: black;">功效</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">依赖容量<span style="color: black;">评定</span>:正常调用链路下系统容量需要<span style="color: black;">评定</span>,当某个弱依赖挂掉时,整体的容量<span style="color: black;">是不是</span>有变化。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">说完背景,<span style="color: black;">最终</span><span style="color: black;">能够</span>聊一下强弱依赖的技术实现。在阿里,强弱依赖的技术演进整体上分了 3 个<span style="color: black;">周期</span>,<span style="color: black;">每一个</span><span style="color: black;">周期</span>的<span style="color: black;">方法</span>的诞生都有其独特的时代背景和业务难点。<span style="color: black;">此刻</span>回头看来,<span style="color: black;">亦</span><span style="color: black;">能够</span>看到当时技术的局限性和突破。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVX1HlANIE31HNwlrUu2ZIjKo32LjGsre2ib3VmZWGABRjPD7P2AkgpAOw/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">熟练</span>淘宝技术发展史的<span style="color: black;">朋友</span>都<span style="color: black;">晓得</span>,2008 年阿里<span style="color: black;">刚才</span>完成一个代号为五彩石的项目,完成从巨石系统向服务化系统的改造。业务和<span style="color: black;">研发</span>模式上有了<span style="color: black;">很强</span>的发展,<span style="color: black;">不外</span>网状的依赖关系<span style="color: black;">亦</span>带来了非常多的问题。这个纪元的<span style="color: black;">重点</span>特点是:故障频发,技术思路和<span style="color: black;">办法</span>都是以结果为导向,糙一点、结果精度差一点<span style="color: black;">能够</span>忍受。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">模拟依赖故障技术上有三招,改代码 + 发布,远程 Debug+ 重启,登陆<span style="color: black;">设备</span>去执行<span style="color: black;">有些</span> shell 命令操作。 好处是灵活随意,<span style="color: black;">能够</span><span style="color: black;">必定</span>程度达到效果;坏处是成本高,影响环境稳定,你测试的时候其他人<span style="color: black;">处在</span><span style="color: black;">没法</span>工作状态,影响效率。<span style="color: black;">另外</span>,这个<span style="color: black;">周期</span>,<span style="color: black;">由于</span>分布式链路<span style="color: black;">跟踪</span>技术还没起步,<span style="color: black;">因此</span>模拟依赖故障时,经常会漏掉<span style="color: black;">有些</span>主机或某些服务。故障的粒度<span style="color: black;">亦</span>比较粗,<span style="color: black;">针对</span><span style="color: black;">有些</span> Linux 的命令,都是主机级别的。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">阿里内部有一套<span style="color: black;">平常</span>环境,<span style="color: black;">重点</span>做上线前的集成测试。为了<span style="color: black;">尽可能</span>减少对环境的影响。<span style="color: black;">咱们</span><span style="color: black;">经过</span>修改服务版本的方式,形成一个独立的测试环境。记得 11 年下半年,我<span style="color: black;">起始</span>做<span style="color: black;">第1</span>版的时候,我搭了淘宝 12 个核心应用的<span style="color: black;">平常</span>环境,踩坑无数,纯体力活,<span style="color: black;">亦</span>算前无古人,后无来者了。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">经过</span>这套环境跑了几次结果,发给核心的业务 TL,大家很兴奋,貌似找到一条治理的路子。<span style="color: black;">不外</span><span style="color: black;">火速</span>暴露了新问题,<span style="color: black;">例如</span>环境的运维归属问题,<span style="color: black;">研发</span><span style="color: black;">设备</span>的干扰问题,以及<span style="color: black;">针对</span>业务的<span style="color: black;">认识</span>程度和测试粒度问题,<span style="color: black;">因此</span>在很长一段时间测试的范围都局限在交易核心链路。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXtk6Bwv0RsRnFibLHBBsmdGpveMgiat5hsNDl77m7WuJA2kcyQftdP3rw/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">第二个<span style="color: black;">周期</span>的核心<span style="color: black;">便是</span>提效,从<span style="color: black;">第1</span>个<span style="color: black;">周期</span>的痛点入手,<span style="color: black;">处理</span>人的成本和环境的问题。这个<span style="color: black;">周期</span>之后,基本<span style="color: black;">能够</span>摆脱手工方式,效率上有大幅度<span style="color: black;">提高</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">这个<span style="color: black;">周期</span><span style="color: black;">亦</span>引入了<span style="color: black;">有些</span>测试技术,其中用的比较多的是 Selenium,<span style="color: black;">经过</span>这种技术<span style="color: black;">能够</span>提前录制用户<span style="color: black;">行径</span>并转化为测试脚本,并且每一个<span style="color: black;">过程</span>都<span style="color: black;">能够</span>截图记录,方便问题复查。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在这个时期,阿里中间件的技术有<span style="color: black;">必定</span>发展,分布式<span style="color: black;">跟踪</span>技术<span style="color: black;">显现</span>,<span style="color: black;">能够</span>把用户<span style="color: black;">拜访</span>的链条串联起来,排查问题的效率有了<span style="color: black;">必定</span><span style="color: black;">提高</span>。<span style="color: black;">同期</span>所有的中间件,如 Nginx、<span style="color: black;">信息</span>、分布式服务调用、分布式数据库、软负载和配置中心等都做了改造,支持用户流量的标记、<span style="color: black;">跟踪</span>和路由<span style="color: black;">掌控</span>。基于<span style="color: black;">以上</span>这些技术<span style="color: black;">发展</span>,环境的问题就有非常大的突破。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在内部<span style="color: black;">咱们</span><span style="color: black;">叫作</span>为叫二套环境。它的核心原理是在<span style="color: black;">基本</span>环境之上,动态区分出<span style="color: black;">有些</span>小环境,<span style="color: black;">她们</span>分别是某个业务的子集。项目之间彼此独立,不会互相调用,<span style="color: black;">仅有</span>当依赖的服务不在时,才会去<span style="color: black;">拜访</span><span style="color: black;">基本</span>环境的服务。数据库和缓存是公用的。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在这个<span style="color: black;">周期</span>,<span style="color: black;">咱们</span>不必再去修改代码的服务版本,每次发布后,代码的版本等能够自动化的保持一致,运维成本有所降低,野服务干扰的<span style="color: black;">状况</span><span style="color: black;">亦</span>有所缓解,人的介入非常的少。<span style="color: black;">不外</span>还是有<span style="color: black;">有些</span>问题亟待<span style="color: black;">处理</span>:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">首要</span>,二套环境的路由策略是和用户绑定的,<span style="color: black;">亦</span><span style="color: black;">便是</span>说需要提前去做<span style="color: black;">有些</span>配置;其次,域名上<span style="color: black;">亦</span>有<span style="color: black;">有些</span>限制,加了 second 等前缀,测试路径中 URL 等复用率低的问题<span style="color: black;">无</span>完全<span style="color: black;">处理</span>;第三,测试的粒度仍然很粗,<span style="color: black;">独霸</span><span style="color: black;">设备</span>,规模化推广时,<span style="color: black;">设备</span>成本和用例运行的成本还是很高;第四,故障场景缺失,只存在于<span style="color: black;">基本</span>环境的服务没法模拟的故障,如:数据库故障,缓存故障等。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXuqe3EsxcefPdSiaCBjCLO2f0PM4oficKVYzoT7Ep8bGF6obaQBA0Vovg/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2014 年的时候,<span style="color: black;">咱们</span>的思维方式有了比<span style="color: black;">很强</span>的突破。<span style="color: black;">咱们</span><span style="color: black;">再也不</span>纠结于环境和<span style="color: black;">外边</span>手段的改进,而是回归到强弱依赖关注最核心的部分。那<span style="color: black;">便是</span>业务影响和系统设计。能否实现一种只与代码设计和业务<span style="color: black;">关联</span>,而与<span style="color: black;">外边</span>环境无关的<span style="color: black;">方法</span>呢?</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">这<span style="color: black;">时期</span>有两个关键思路或是推论:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">推论 1:<span style="color: black;">咱们</span>要的是下游依赖<span style="color: black;">显现</span>故障现象,不必真的是下游服务<span style="color: black;">供给</span>方<span style="color: black;">显现</span>故障。只要消费方感觉下游<span style="color: black;">显现</span>故障<span style="color: black;">就可</span>。从这个思路来讲,商品详情<span style="color: black;">倘若</span>要做强弱依赖测试,只要自己玩就 OK,不需要去折腾下游依赖的几十个应用。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">推论 2:<span style="color: black;">咱们</span>之<span style="color: black;">因此</span>需要单独搭建环境,为的<span style="color: black;">便是</span><span style="color: black;">掌控</span>故障的影响范围。<span style="color: black;">那样</span><span style="color: black;">咱们</span><span style="color: black;">能够</span>换一下思路,<span style="color: black;">便是</span><span style="color: black;">咱们</span>只影响要<span style="color: black;">出现</span>故障的请求,其他的业务流量都放过。是不是就<span style="color: black;">能够</span>达到目的。本质上是一种对业务流量的筛查能力。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">有了上面的思路,<span style="color: black;">第1</span>问题<span style="color: black;">便是</span><span style="color: black;">怎样</span>拦截用户的请求?拦截用户请求,让用户改<span style="color: black;">导致</span>本最低,<span style="color: black;">无</span>什么<span style="color: black;">地区</span>比中间件更适合了。<span style="color: black;">每一个</span>通用的远程调用接口,都是<span style="color: black;">能够</span>做<span style="color: black;">文案</span>的点,并且中间件之上的业务系统<span style="color: black;">不消</span>做任何改造。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下一个问题<span style="color: black;">便是</span>故障规则和业务识别,<span style="color: black;">咱们</span>曾<span style="color: black;">思虑</span>在用户请求的入口就打上标记,置入故障规则,<span style="color: black;">不外</span><span style="color: black;">发掘</span><span style="color: black;">针对</span> post 请求,异步 js 请求,<span style="color: black;">按时</span>任务等都有比<span style="color: black;">很强</span>的改<span style="color: black;">导致</span>本,且有安全隐患。 <span style="color: black;">因此</span>就<span style="color: black;">增多</span>了一个服务端,直接下发故障规则到依赖插件上。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障插件<span style="color: black;">经过</span>对流量的调用拦截 + 业务识别,<span style="color: black;">独一</span>确定影响哪一个请求,<span style="color: black;">而后</span><span style="color: black;">经过</span>故障规则判断是注入<span style="color: black;">反常</span>还是超时,从而达到模拟故障的效果。 <span style="color: black;">由于</span>插件可扩展的设计,<span style="color: black;">因此</span><span style="color: black;">咱们</span>默认是<span style="color: black;">能够</span><span style="color: black;">同期</span>注入多种故障场景的,<span style="color: black;">同期</span>插件<span style="color: black;">亦</span>会把影响到请求的<span style="color: black;">仔细</span>信息异步上报给服务端做分析。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">理论上<span style="color: black;">经过</span><span style="color: black;">以上</span>的<span style="color: black;">方法</span>,在业务流量输入方面,<span style="color: black;">咱们</span><span style="color: black;">无</span>任何<span style="color: black;">需求</span>。无论是人的自发测试<span style="color: black;">行径</span>,还是<span style="color: black;">设备</span>的测试<span style="color: black;">行径</span>,都<span style="color: black;">无</span>任何限制。只<span style="color: black;">不外</span>为最大限度复用已有的测试用例<span style="color: black;">累积</span>,<span style="color: black;">加强</span>自动化程度,<span style="color: black;">咱们</span>设计了一套用例注解,封装了和强弱依赖服务端的通信。利用 Junit 生命周期的特点,完成故障规则的下发和清除。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">任何一个测试用例,20 秒之内改<span style="color: black;">导致</span>一个强弱依赖的测试用例。在结果输出方面,会<span style="color: black;">仔细</span>的展示一次强弱依赖检测的过程,以及测试用例<span style="color: black;">触及</span>到的链路的依赖变化。到此<span style="color: black;">周期</span>,强弱依赖真正达到了一个相对里程碑的版本,2014 年<span style="color: black;">起始</span>,强弱依赖<span style="color: black;">亦</span><span style="color: black;">做为</span>双 11 必做的一个横向项目。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下面是强弱依赖注解和依赖系统的示例:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXTAtgCRibHJyXSzZl2vve8KN3e54KWaf5KqmY86sDIc5yRVkLZ5iaQXhA/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXD4vKQK6EVHEibB95TxwuRu7fniaBh8EDXnF3V0AjsK7PiblRQzfMYDj3A/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">总的<span style="color: black;">来讲</span>,<span style="color: black;">全部</span>强弱依赖技术演进历史,<span style="color: black;">便是</span>对数据准确性,稳定性,成本、效率的不懈追求,并在这几者之间达成一个动态平衡。</p>
    <span style="color: black;">故障演练的基本原则和最佳系统设计实践</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">众所周知,2017 年不大太平,业界<span style="color: black;">显现</span>了<span style="color: black;">非常多</span>大故障。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="http://mmbiz.qpic.cn/mmbiz_jpg/YriaiaJPb26VOJGW9lXJrl7hwTbPXazfVXrBd6Wzu0JHxtnFkxnjkRm2b49MP6y5M5pic6JRc8Fd3RLqmAOeaEUEg/640?wx_fmt=jpeg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2017 年 3 月 1 日,弗吉尼亚州数据中心<span style="color: black;">显现</span>故障,亚马逊 S3 服务<span style="color: black;">显现</span>了较高的错误率,直接影响到成千上万个在线服务;2017 年 1 月 31 日, GibLab <span style="color: black;">朋友</span>线上数据库变更时,遇到突发了一个<span style="color: black;">状况</span>。<span style="color: black;">由于</span>操作失误,<span style="color: black;">引起</span><span style="color: black;">全部</span>生产数据库被误删除,丢失 6 个小时的数据;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2017 年 2 月份国内的一家经常被用来测试网络连通性的友商<span style="color: black;">亦</span><span style="color: black;">显现</span>了故障,工信部<span style="color: black;">快速</span>关注,并紧急约谈了<span style="color: black;">关联</span><span style="color: black;">机构</span>。<span style="color: black;">同期</span>下发紧急<span style="color: black;">通告</span><span style="color: black;">需求</span> BAT 等各重点互联网企业吸取教训,业界一片哗然。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">此时</span>候,有一家<span style="color: black;">机构</span><span style="color: black;">显出</span><span style="color: black;">尤其</span>淡定,那<span style="color: black;">便是</span> Netflix。 Netflix 是一家服务<span style="color: black;">全世界</span>的在线影片租赁<span style="color: black;">供给</span>商,他的核心业务完全架设在 AWS 上面。据<span style="color: black;">资讯</span>揭露,Netflix 在亚马逊故障时<span style="color: black;">能够</span><span style="color: black;">火速</span>的恢复正常,<span style="color: black;">由于</span><span style="color: black;">她们</span>内部有一个"防故障"的<span style="color: black;">基本</span><span style="color: black;">设备</span>。听起来,<span style="color: black;">好似</span>是<span style="color: black;">咱们</span>需要的东西。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">深入调查之后,<span style="color: black;">发掘</span>防故障<span style="color: black;">基本</span><span style="color: black;">设备</span><span style="color: black;">背面</span>是一个猴子军团。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">早在 2012 年,Netflix 就发布了 Chaos Monkey。用来在随机杀死实例,据官方数据指出,到<span style="color: black;">日前</span>累计杀死 65,000 个节点。<span style="color: black;">她们</span>的测试策略<span style="color: black;">亦</span>比较有趣:在工作时间在生产和测试环境运行,<span style="color: black;">目的</span>测试系统的健壮性,训练后备人员,让恢复更简洁、快速、自动;Latency Monkey 的<span style="color: black;">功效</span><span style="color: black;">便是</span>让某台<span style="color: black;">设备</span>的请求或返回变慢,观察系统的表现; Chaos Gorilla 的能力是搞挂一个机房,宏观验证业务容灾和恢复的能力。Netflix 发布猴子军团的<span style="color: black;">原由</span>是<span style="color: black;">由于</span>,<span style="color: black;">她们</span>很早就吃过云故障的亏,<span style="color: black;">因此</span>本能是认为云<span style="color: black;">设备</span>是不<span style="color: black;">靠谱</span>的,必须在<span style="color: black;">经过</span>演练来验证软件层面的容灾。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">古代有个哲学家说过"<span style="color: black;">无</span>人曾经两次踏进同一条河流",<span style="color: black;">由于</span>无论是这条河还是这个人都已<span style="color: black;">区别</span>。故障<span style="color: black;">亦</span>是类似的,故障<span style="color: black;">出现</span>的时间地点,影响流量,与故障打交道的人都没法完全相同。从这个<span style="color: black;">方向</span>看,故障治理本身是一个伪命题,都是在<span style="color: black;">处理</span>过去某一个时刻的问题。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">不外</span>从程序员视角(我习惯叫上帝视角),任何故障的<span style="color: black;">原由</span>都是可被定位的,避免相同<span style="color: black;">原由</span>重复<span style="color: black;">诱发</span>故障,是<span style="color: black;">每一个</span>程序员应该执着追求的<span style="color: black;">目的</span>。电商历史上遇到了非常多有<span style="color: black;">表率</span>性的故障,为了不让故障重复<span style="color: black;">出现</span>,阿里内部<span style="color: black;">亦</span>打造了一套"防故障"的<span style="color: black;">基本</span><span style="color: black;">设备</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2015 年 5 月 27 日,<span style="color: black;">由于</span>光纤中断的问题,支付宝大规模宕机事故,<span style="color: black;">机构</span>内部得出一个结论:任何<span style="color: black;">基本</span><span style="color: black;">设备</span>、生产系统、任何流程都可能<span style="color: black;">显现</span>问题,<span style="color: black;">无</span>经过重大<span style="color: black;">劫难</span>验证的容灾<span style="color: black;">设备</span>都是耍流氓。 <span style="color: black;">起步</span>了代号为虎虎虎的生产突袭项目,用来验证异地多活的质量。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2012 年,完成交易的同城双活后,就<span style="color: black;">起步</span>了同城容灾演练,<span style="color: black;">亦</span>叫断网演练。验证核心系统的同城一个机房挂掉的<span style="color: black;">状况</span>下,<span style="color: black;">是不是</span>还<span style="color: black;">能够</span>正常工作。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2011 年,<span style="color: black;">起始</span>做强弱依赖的治理和建设,<span style="color: black;">期盼</span>提前<span style="color: black;">发掘</span><span style="color: black;">由于</span>依赖问题<span style="color: black;">引起</span>的系统故障,系统的代号是 EOS(出处是古希腊神话中的黎明女神,语意是能够把纷乱的依赖关系梳理清楚)。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">能够</span>看到,这三大件和 Netflix 的猴子军团从功能上基本上是对标的。那是不是就应该<span style="color: black;">无</span>故障,安枕无忧了呢? 答案铁定不是。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">理想很<span style="color: black;">饱满</span>,现实很骨感。阿里巴巴<span style="color: black;">由于</span>其多元化的业务场景和日益<span style="color: black;">繁杂</span>的技术架构,会遇到各式各样的故障,故障治理的难度相比流<span style="color: black;">媒介</span>服务故障治理,难度是<span style="color: black;">亦</span>增量了几个台阶。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">前面介绍过的强弱依赖和容灾演练只能覆盖到部分故障。<span style="color: black;">倘若</span>对故障整体做初步画像,故障整体<span style="color: black;">能够</span>分为 IaaS 层、PaaS 层、SaaS 层的故障,每一层都可能有<span style="color: black;">非常多</span>故障触发<span style="color: black;">原由</span>和表现。<span style="color: black;">那样</span><span style="color: black;">针对</span>这么多种类繁杂的故障,内心<span style="color: black;">必定</span>是懵逼的。<span style="color: black;">咱们</span>要<span style="color: black;">怎样</span>重现,<span style="color: black;">从而</span>避免这么多繁杂的故障呢?</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">熟练</span>三体的<span style="color: black;">朋友</span>应该听说过"降维攻击"这个词,不妨让<span style="color: black;">咱们</span>把维度降低一下,换一个视角看故障:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">任何故障,<span style="color: black;">必定</span>是硬件如 IaaS 层,软件如 PaaS 或 SaaS 的故障。 并且有个规律,硬件故障的现象,<span style="color: black;">必定</span><span style="color: black;">能够</span>在软件故障现象上有所<span style="color: black;">表现</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障<span style="color: black;">必定</span>隶属于单机或是分布式系统之一,分布式故障<span style="color: black;">包括</span>单机故障。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">针对</span>单机或同机型的故障,以系统为视角,故障可能是当前进程内的故障,<span style="color: black;">例如</span>:如 FullGC,CPU 飙高; 进程外的故障,<span style="color: black;">例如</span>其他进程<span style="color: black;">忽然</span>抢占了内存,<span style="color: black;">引起</span>当前系统<span style="color: black;">反常</span>等。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">同期</span>,还可能有一类故障,可能是人为失误,或流程失当<span style="color: black;">引起</span>,这部分<span style="color: black;">咱们</span>今天不做重点讨论。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">任何故障都<span style="color: black;">能够</span>套入到这个故障模型中。有了这个模型,<span style="color: black;">咱们</span>就<span style="color: black;">能够</span>开始来设计模拟故障的演练系统。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">因此</span>在内部,<span style="color: black;">咱们</span>起了一个代号叫做"大圣归来"的项目,项目名叫做"故障演练",承载的<span style="color: black;">制品</span>叫做 MonkeyKing。MonkeyKing 是中国美猴王的意思,看重的是孙悟空高强的本领(火眼精金、七十二变)和极具反叛的精神来,<span style="color: black;">期盼</span>用一种创新的思路来<span style="color: black;">保准</span>稳定性。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">咱们</span>的系统实现,<span style="color: black;">亦</span>是围绕前文讨论的故障模型来设计的:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在客户<span style="color: black;">设备</span><span style="color: black;">安排</span> OS 层的故障插件,用来模拟硬件层的故障和单机进程外的故障。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">针对</span>应用进程内的故障,<span style="color: black;">供给</span>插拔式的故障插件,<span style="color: black;">亦</span><span style="color: black;">能够</span>用户<span style="color: black;">根据</span><span style="color: black;">咱们</span>的故障 API 做自己的实现。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">针对</span>分布式故障,则<span style="color: black;">经过</span>服务端<span style="color: black;">根据</span> IP 来<span style="color: black;">掌控</span>故障的范围。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">针对</span><span style="color: black;">有些</span><span style="color: black;">由于</span><span style="color: black;">各样</span><span style="color: black;">原由</span><span style="color: black;">没法</span>触及的应用,比如数据库。<span style="color: black;">咱们</span><span style="color: black;">供给</span>了一个故障三方实现的标准,供故障服务接入。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">经过</span>上面的方式,基本上就把技术型故障的模型就 cover 全了。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在去年的双 11 中,故障演练的应用场景<span style="color: black;">重点</span>应用在图中的几个场景。 <span style="color: black;">根据</span>业务流量、压测流量的峰值<span style="color: black;">能够</span>划为 4 个象限。<span style="color: black;">详细</span>案例如下:</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">预案有效性:过去的预案测试的时候,线上<span style="color: black;">无</span>问题,<span style="color: black;">因此</span>就算测试结果符合预期,<span style="color: black;">亦</span>有可能是有意外<span style="color: black;">然则</span>现象被掩藏了。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">监控报警:报警的<span style="color: black;">有没有</span>、提示<span style="color: black;">信息</span><span style="color: black;">是不是</span>准确、报警实效是 5 分钟还是半小时、收报警的人<span style="color: black;">是不是</span>转岗、手机<span style="color: black;">是不是</span>欠费等,都是<span style="color: black;">能够</span> check 的点。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障复现:故障的后续 Action <span style="color: black;">是不是</span>真的有效,完成质量<span style="color: black;">怎样</span>,<span style="color: black;">仅有</span>真实重现和验证,<span style="color: black;">才可</span>完成闭环。发生过的故障<span style="color: black;">亦</span>应该时常拉出来练练,看<span style="color: black;">是不是</span>有劣化趋势。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">架构容灾测试:主备切换、负载<span style="color: black;">平衡</span>,流量调度等为了容灾而存在的手段的时效和效果,容灾手段本身健壮性<span style="color: black;">怎样</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">参数调优:限流的策略调优、报警的阈值、超时值设置等。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障模型训练:有针对性的制造<span style="color: black;">有些</span>故障,给做故障定位的系统制造数据。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障突袭、联合演练:<span style="color: black;">经过</span>蓝军、红军的方式<span style="color: black;">熬炼</span>队伍,以战养兵,<span style="color: black;">提高</span> DevOps 能力。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障演练宣言:把故障以场景化的方式沉淀,以可控成本在线上模拟故障,让系统和工程师平时有<span style="color: black;">更加多</span>实战机会 ,加速系统、工具、流程、人员的进步。</p>
    <span style="color: black;">关于<span style="color: black;">将来</span>:</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">故障演练的后续工作<span style="color: black;">重点</span>会关注在以下方向:演练常态化、故障标类化、演练智能化。用常态化的演练驱动稳定性进步,而不是大促前进行补习;丰富<span style="color: black;">更加多</span>的故障场景,定义好最小故障场景和处理手段;基于架构和业务分析的智能化演练,沉淀行业故障演练<span style="color: black;">处理</span><span style="color: black;">方法</span>。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在 QCon 北京 2017 <span style="color: black;">全世界</span>软件大会做的分享,<span style="color: black;">亦</span>是<span style="color: black;">第1</span>次揭秘阿里故障预防的技术细节,欢迎<span style="color: black;">大众</span>转发和交流。<span style="color: black;">倘若</span>你对构建高可用<span style="color: black;">行业</span>感兴趣或有云端<span style="color: black;">制品</span>的<span style="color: black;">研发</span>经验,有做普惠技术、创造<span style="color: black;">商场</span>价值的志向,欢迎邮件 zhongting.zy@taobao.com</p>
    作者介绍

    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">周洋</span>,花名中亭,阿里巴巴技术专家。2011 年加入阿里巴巴中间件 &amp; 高可用架构团队,<span style="color: black;">始终</span>从事稳定性<span style="color: black;">制品</span><span style="color: black;">开发</span>和架构升级的<span style="color: black;">关联</span>的工作,主导了强弱依赖、灰度发布、线上故障演练等多款高可用<span style="color: black;">制品</span>的<span style="color: black;">开发</span>和建设,见证了阿里高可用<span style="color: black;">制品</span>体系从 1.0 到 3.0 的发展历程,<span style="color: black;">累积</span>了丰富的架构和稳定性经验。2015 年<span style="color: black;">做为</span>共享事业部的大促 PM,负责大促和常态稳定性的<span style="color: black;">保证</span>工作。</p>

    今日荐文
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">点击下方<span style="color: black;">照片</span><span style="color: black;">就可</span>阅读</p>
    <a style="color: black;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></a>


    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">
      技术漫谈:<span style="color: black;">为么</span> KPI 毁了索尼,而 OKR 却成就了谷歌? </p>



    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><img src="data:image/svg+xml,%3C%3Fxml version=1.0 encoding=UTF-8%3F%3E%3Csvg width=1px height=1px viewBox=0 0 1 1 version=1.1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=none stroke-width=1 fill=none fill-rule=evenodd fill-opacity=0%3E%3Cg transform=translate(-249.000000, -126.000000) fill=%23FFFFFF%3E%3Crect x=249 y=126 width=1 height=1%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E" style="width: 50%; margin-bottom: 20px;"></p>




4lqedz 发表于 2024-8-25 19:27:17

说得好啊!我在外链论坛打滚这么多年,所谓阅人无数,就算没有见过猪走路,也总明白猪肉是啥味道的。

星☆雨 发表于 2024-8-26 07:13:48

论坛的成果是显著的,但我们不能因为成绩而沾沾自喜。

j8typz 发表于 2024-10-29 09:14:07

这篇文章真的让我受益匪浅,外链发布感谢分享!
页: [1]
查看完整版本: 依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验