高可用的本质
所有事物都是变化的(唯一不变的是变化)。
所有变化的都不是100%可靠的。
结论:所有事物都不是100%可靠的。
从人的层面:人都是有可能犯错的。
从软件层面:软件都是有可能有BUG的。
从硬件层面:硬件都是有可能会坏的。
从客户角度:无高可用,客户服务可能会中断。
从股东层面:无高可用,股价可能会下跌。
从社会角度:无高可用,社会秩序可能受影响。
风险:指未来会发生危害的一种可能性,但实际未发生,记为r。
故障:指已发生或正在发生危害的一种事实,是风险变现实的结果。
风险概率:指一个风险变故障的概率。用它来表示风险触发为故障的难易程度,记为P(r)。
故障影响范围:指在单位时间内,一个故障造成的危害影响,记为R(r)。
故障影响时长:指一个故障持续的时间,记为T(r)。
故障影响面:指一个故障影响范围乘以故障影响时长的总和。这里用故障影响面来表示故障总的危害程度,记为F(r)。
风险期望:指每个风险变故障的概率乘以每个风险变故障后的故障影响面的总和。这里用风险期望来表示风险的潜在危害程度,记为E(r)。
注:如果要引用该公式请注明出处。
例如:重大节日活动,施行全站封网,变更的数量就会得到一个明显的下降,就是典型的减少风险数量。
例如:系统A完全不依赖Oracle,那系统A就不用关心Oracle的任何风险,哪怕美国总统突然紧急宣布Oracle立即立刻禁止在中国使用,系统A也无所谓。
例如:最近新冠大流行,人传人很可怕,如果你今天选择不上班不出门,那你今天就不用担心被外面的行人和同事传染。
例如:人员B要对系统C进行变更,可以对人员B增加变更认证考试,对变更内容要求线下(或仿真)测试,对变更内容进行CR,系统C提供变更效果预览能力(类似监控模式或试运行),万一人员B想恶意变更搞破坏,还可以增加非同人复核,系统C可以增加防错设计进行保护等等。
例如:以新冠为例,带口罩,勤洗手,多通风等就可以降低染上新冠的概率。
例如:分布式架构就是这个的典范,集中式一损俱损,分布式一损即N分之一损。
例如:以新冠为例,网格化管理,各省或市间的流动进行限制,跨省必须核酸+隔离14天,有效控制新冠的传播范围。
例如:对于容量水位,可以在警戒线之前划一条预警线,提前预警,从容应对。
例如:分布式应用集群,任何一台应用服务器有问题时,负载均衡会通过心跳检查自动把有问题的应用服务器剔除,将请求转发给其他(热)备份冗余的服务器上。
例如:以新冠为例,但由于每个生命都是独一无二的,没有办法切换,也没有办法回滚,也不能降级(涉及人道主义),只能对症下药慢慢治疗。
例如:一个系统同时依赖Oracle,Mysql,OB三种关系型数据库,少依赖原则是改成仅依赖最成熟稳定的OB,不依赖Oracle和Mysql。
例如:为解决DB风险,引入分布式缓存,只要2者不同时挂的时候依然可用。
例如:交易核心链路在交易成功后要要给用户发放积分权益;交易核心系统需要依赖积分权益系统,好的方式是采用弱依赖,使用异步化的方式,这样积分权益系统不可用时,大概率不会影响交易核心链路。
例如:所有交易数据都放在同一个库同一张表里面,万一这个库挂了,此时影响所有交易。
例如:将自己所有的钱买了同一只股票,万一这只股票是乐视就惨了。
例如:xx应用集群有1000台,但由于引流组件BUG,导致所有流量引到了其中100台上面,导致负载严重不均衡,最后因负载无法扛着全面崩溃。类似重大故障已经发生了多次。
例如:将自己所有的钱买了10只股票,其中一只占比99%,万一这只股票是乐视就惨了。
例如:交易数据拆分成10库100表,但是部署在同一台物理机上;万一某张表有一条大SQL把网卡打满了,那10库100表都会受影响。
例如:将自己所有的钱均分买了10只股票,每只都占10%,但10只都是乐视系的。
例如:古代赤壁之战就是一个典型的反面例子,铁锁连船导致隔离性被破坏,一把大火烧了80w大军。
例如:一个应用集群由N台服务器组成,部署在同一台物理机上,或同一个机房的不同物理机上,或同一个城市的不同机房里,或不同城市里,不同的部署代表不同的容灾能力。
例如:人类由无数人组成,生活在同一个地球的不同洲上,这意味着人类不具备星球级别的隔离能力,当地球出现毁灭性影响时,人类是不具备容灾的。
例如:一个商户仅支持一个支付渠道,就是典型的单点,万一这个支付渠道挂了就不能支付了。
例如:一个家庭的所有收入仅依赖父亲一个的薪资收入,万一这个父亲病了,就没有收入了。
当节点无状态的情况下,打散拆分成N份,每份都是相同的功能,互为冗余,即:节点无状态情况下,分散原则和无单点原则等价,满足一个即可。
当节点有状态的情况下,打散拆分成N份,每份都是不相同的,每份都没有冗余,需要针对每份再做冗余,即:节点有状态情况下,既要满足分散原则又要满足单点原则。
例如:大促峰值期间,一般会提前降级掉很多功能,同时限流,主要是为了保护峰值绝大部分人的交易支付体验。
例如:人体在失血过多或疼痛过度时就会触发休克现象,这也是一种典型的自我保护机制。
思考:如果变更三板斧让你再加一板斧,你觉得应该是什么?
网络流量过大会造成网络堵塞,影响网络通道中的所有网络流量请求。
API请求过大会造成对应服务集群过载,影响整个服务机器上的所有API请求,甚至往外传播。
KEY请求过大(俗称“热点KEY”)会造成单机过载,影响单机上所有KEY请求,甚至往外传播。
例如:2019年日本运营商软银因证书到期引发3000w用户长达4小时通信中断。
以上每一大类风险都可以基于nPRT公式进行逐一分析处理。
我们对世界的认知是有限的,这也让我们少了许多恐惧,同时也让我们少了一些敬畏之心。
我们真正要敬畏的不是处罚条例,而是我们不知道的,以及我们不知道我们不知道。
所有事物都是变化的。
所有事物都不是100%可靠的。
因此才有了风险,风险是不可见的,可见的是故障。
风险是不能消灭光的,但是可以远离,可以减少。
故障是不可避免的,但是可以推迟,可以缩小影响范围,缩短影响时间。
直播回放
Sentinel:保障微服务高可用的利器
微服务的稳定性一直是开发者最为关注的一个话题,而流控降级是保障微服务稳定性重要的一环。Sentinel是阿里巴巴开源的高可用流控降级组件,Sentinel开源负责人结合一些高可用场景,介绍如何利用Sentinel来帮助开发者保障微服务的稳定性,以及其背后的原理。
点击“阅读原文”,立即观看吧~