关于系统:从反脆弱角度说一说技术系统高可用性策略

3次阅读

共计 2577 个字符,预计需要花费 7 分钟才能阅读完成。

1 非线性

咱们先来介绍一个概念:非线性。这个概念在咱们的生存中无处不在。

你要赶早上 8 点钟的火车,如果 6:30 登程能够在 7:00 达到车站,于是你失去一个论断:只有 30 分钟就能够达到车站。

你早上想睡晚一点预计 7:10 登程,想着 7:40 能够达到车站。然而最可能的后果是你将错过这趟火车。因为正好遇上早顶峰,堵车导致你至多须要破费 1 个小时能力达到车站。

一个小雪球的分量是 100 克,打雪仗时你被砸中 100 次,这对你不会造成任何影响。

然而如果你被 10 公斤的雪球砸中 1 次,这可能会对你造成重大的挫伤。

这就是非线性。事物不是简略的叠加关系,当达到某个临界值时,会造成一种齐全截然不同的后果。

2 秒杀零碎

咱们来剖析一个互联网的秒杀场景。假如你设计的秒杀零碎当每秒 30 集体拜访时,响应工夫是 10 毫秒。即从用户点击按钮至失去后果这个过程,只破费了 10 毫秒。这个工夫的流逝基本上觉察不到,性能是不错的。你感觉很好,持续设计:

 每秒 30 个访问量,响应工夫 10 毫秒

每秒 300 个访问量,响应工夫 100 毫秒

每秒 3000 个访问量,响应工夫 1000 毫秒 

如果你依照这个思路去做零碎设计,将会产生重大的谬误。因为当每秒 3000 个访问量产生时,零碎的响应工夫可能不是 1000 毫秒,而可能间接导致系统解体,无奈再解决任何的申请。最常见的场景就是当缓存零碎生效时,导致的零碎雪崩:

  • 当耗时低的缓存层呈现故障时,流量间接打在了耗时高的数据库层,用户的期待时长就会减少
  • 期待时长的减少导致用户更加频繁去拜访,更多的流量会打在数据库层
  • 这导致用户的期待时长进一步减少,再次导致更频繁拜访
  • 当访问量达到一个极限值时,造成零碎解体,无奈再解决任何申请
  • 流量和响应工夫绝不是简略的叠加关系,当达到某个临界值时,零碎将间接解体。

3 黑天鹅与三体

欧洲人素来都认为只有白天鹅,因为他们素来只看到过红色的天鹅。

他们的这种想法有多动摇,那他们在澳大利亚发现彩色天鹅时,震撼就有如许大。

这就是驰名的黑天鹅事件的由来。黑天鹅事件指事先无奈预知,一旦产生将具备微小影响的不确定事件。

咱们来剖析一下欧洲人的白天鹅实践。他们采纳的是归纳推理的办法,这也是科学实验中罕用的一种办法。

当他们没有见到黑天鹅之前,认为只存在红色天鹅是成立的。但当黑天鹅呈现时,整个认知霎时分崩离析。

一个更加值得关注的零碎是混沌零碎。这个零碎最大的特点是,当一个渺小的扰动产生时,会给整个零碎带来微小的影响。典型混沌零碎的体现就是蝴蝶效应和三体问题。

一只蝴蝶挥动翅膀能够带来一场飓风。

三个天体在互相的万有引力作用下,静止轨迹无奈预测,这也是刘慈欣《三体》三部曲的根底设定。

处于混沌零碎,不晓得黑天鹅事件将在什么工夫,什么中央,以什么模式产生。

咱们不晓得 7 点钟登程会被堵多久,不晓得秒杀零碎在开抢的霎时会有多大的访问量,不晓得某大 V 在微博上颁布的音讯会带来多少激增的流量。

4 工程零碎稳定性

咱们来思考一个问题:怎么保障一个工程零碎的稳定性?有以下两种做法:

  • 思路 1:思考到所有意外状况,针对每一个意外的异常情况别离解决
  • 思路 2:承受无奈预料到所有意外状况的事实,把兜底计划做好,保障即便呈现极其状况,零碎也不会解体

咱们仔细分析思路 1 会发现这其实是一个悖论。

所谓意外状况就是意料之外的状况,无奈意料的状况。如果被思考到了,那么也就不能称之为意外状况了。

塔勒布在经典著作《反软弱》始终想通知咱们:黑天鹅事件是无奈预测的,极其意外状况是无奈预测的,尾部危险尽管概率小,但破坏力却极大。

咱们无奈预测会产生什么故障,以及什么时候产生。但面对不确定性,咱们不会束手就擒,至多能够把零碎爱护好。

5 高可用策略

为了保证系统的稳定性和高可用性,咱们须要采取一些策略。我认为高可用外围策略个别蕴含:冗余 + 主动故障转移策略,降级策略,延时策略,隔离策略。高可用理论利用计划多种多样,但个别都在施行上述策略,从而构建一个稳固的高可用工程零碎。

5.1 冗余 + 主动故障转移策略

最根本的冗余策略就是主从模式。原理是筹备两台机器,部署了同一份代码,在性能层面是雷同的,都能够对外提供雷同的服务。

一台机器启动提供服务,这就是主服务器。另一台机器启动在一旁待命,不提供服务,随时监听主服务器的状态,这就是从服务器。当发现主服务器呈现故障时,从服务器立即替换主服务器,持续为用户提供服务。
主动故障转移策略是指当主零碎产生异样时,应该能够主动探测到异样,并主动切换为备用系统。不应该只依附人工去切换成,否则故障解决工夫会显著减少。

5.2 降级策略

所谓降级策略,就是当零碎遇到无奈接受的压力时,抉择临时敞开一些非关键的性能,或者延时提供一些性能,把此刻所有的资源都提供给当初最要害的服务。

在秒杀场景中,下订单就是最外围最要害的性能。

当零碎压力将要达到临界值时,能够临时先敞开一些非核心性能如查问性能。

当秒杀流动完结后,再将临时敞开的性能开启。这样既保证了秒杀流动的顺利进行,也爱护了零碎没有解体。

还有一种降级策略,当零碎依赖的上游服务呈现谬误,甚至曾经齐全不可用了,那么此时就不能再调用这个上游服务了,否则可能导致雪崩。所以间接返回兜底计划,把上游服务间接降级。

5.3 延时策略

用户下订单胜利后就须要进行领取。

假如秒杀零碎下订单每秒访问量是 3000,咱们来思考一个问题,有没有必要将每秒 3000 次访问量的压力传递给领取服务器?

答案是没有必要。

因为用户秒杀胜利后能够稍晚付款,比方能够跳转到一个领取页面,提醒用户只有在 10 分钟内领取实现即可。

这样每秒 3000 次的访问量就被摊派至几分钟,无效爱护了零碎。技术架构还能够应用音讯队列做一个缓冲,让领取服务依照本人的能力去解决业务。

5.4 隔离策略

物理隔离:利用别离部署在不同物理机、不同机房,资源不会相互影响。

线程隔离:不同的申请进行分类,交给不同线程池解决,当一类申请呈现高耗时和异样,不影响另一类申请拜访。

6 无所不备则无所不寡

《孙子兵法》虚实篇通知咱们一个情理:备前则后寡,备后则前寡,备左则右寡,备右则左寡,无所不备,则无所不寡。

力量集中在前,前面就充实。力量集中在后,后面就充实。力量集中在左,右面就充实。力量集中在右,右面就充实。如果力量扩散在前后左右,那么前后左右就都充实。

不确定性扩散在前后左右无奈预测。咱们不可能将精力扩散在前后左右,然而技术人员至多能够做好一点:爱护好零碎。

正文完
 0