写点什么

不可用与高可用

用户头像
dongge
关注
发布于: 2020 年 08 月 26 日
不可用与高可用

不可用的原因

造成不可用的原因有:系统服务器硬件故障;发布新应用的过程;应用程序本身的问题;安全攻击。

网站物理架构中,随机的硬件服务器的故障,比如某台服务器由于硬件故障宕机,可以说不是偶然,而是必然会发生的。尤其是目前互联网企业普遍采用的“牲口”模式集群方案。而且随着网站规模不断扩大,网站后台的服务器数量也越来越多,所以由硬件故障引起问题的概率也是不断飙升。

网站的新版本发布过程中,往往会出现需要重新部署新的应用程序版本,然后再重启服务的情况。如果这个更新过程中不采用特殊技术手段的话,也会造成短暂的服务不可用。而且这种形式的不可用,相比服务器硬件故障的不可用更为常见。原因很简单,互联网网站的功能更新迭代非常快,基本都是以“天”为单位来发布上线的,也就是说几乎每天都有需要中断服务来完成服务升级的可能。

造成网站不可用的最后一个原因是,应用程序本身的问题。比如,发布的应用程序版本身存在潜在的内存泄露,那么经过较长时间的运行积累后,最终会造成服务器的内存被占满,之后必须要靠重启服务来恢复。那么,这个时候就会引入短暂的服务不可用时间。再比如,应用程序在测试环境没有经过充分的测试验证,或者说由于测试环境的配置和实际生产环境之间存在差异,有可能造成应用程序在生产环境部署完后无法使用的情况,从而造成服务不可用。

针对安全攻击需要针对各种攻击手段使用合理的手段防止攻击。对第三方应用的技术及时打补丁,及时改进应用中出现的安全问题。

高可用方案

高可用的度量首先我们看下,什么叫做应用的高可用,以及可用性如何度量。业界通常用多少个 9 来说明互联网应用的可用性。比如说可用性是 4 个 9,就是说服务 99.99% 可用。这句话的意思是,服务要保证在所有的运行时间里只有 0.01% 不可用,也就是说一年大概有 53 分钟不可用。这个 99.99% 就叫做系统的可用性指标,这个值的计算公式是:



一般说来,两个 9 表示系统基本可用,年度不可用时间小于 88 小时;3 个 9 是较高可用,年度不可用时间小于 9 个小时;4 个 9 是具有自动恢复能力的高可用,年度不可用时间小于 53 分钟;5 个 9 指极高的可用性,年度不可用时间小于 5 分钟。一般的数据中心的可用性大多是 4 个 9。




要想让系统能够稳定可用,我们首先要考虑如何避免问题的发生。比如说,我们可以通过 UPS(Uninterruptible Power System,不间断电源)来避免服务器断电,可以通过事先增加机器来解决硬件资源不足的问题。

如果问题真的发生了,我们就要考虑怎么转移故障(Failover)。比如说,我们可以通过冗余部署,当一个节点发生故障时,用其它正常的节点来代替问题节点。

如果故障无法以正面的方式解决,我们就要努力降低故障带来的影响。比如说流量太大,我们可以通过限流,来保证部分用户可以正常使用,或者通过业务降级的手段,关闭一些次要功能,保证核心功能仍旧可用。

最后是要快速恢复系统。我们要尽快找到问题的原因,然后修复故障节点,使系统恢复到正常状态。


第一个设计原则是冗余无单点。

我们要保证系统的各个节点在部署时是冗余的,没有单点。比如在接入层中,我们可以实现负载均衡的双节点部署,这样在一个节点出现问题时,另一个节点可以快速接管,继续提供服务。

第二个设计原则是水平扩展。

对于无状态的计算节点,比如应用层和服务层来说,水平扩展相对容易,我们直接增加机器就可以了;而对于有状态的节点,比如数据库,我们可以通过水平分库做水平扩展,不过这个需要应用一起配合,做比较大的改造。

第三个原则是柔性事务。

在很多业务场景中,系统的可用性比数据的实时一致性更重要,所以在实践中,我们更多地使用 BASE 理论来指导系统设计。在这里,我们努力实现系统的基本可用和数据的最终一致。

第四个原则是系统可降级。

当系统问题无法在短时间内解决时,我们就要考虑尽快止损,为故障支付尽可能小的代价。具体的解决手段主要有以下这几种。

  • 限流:让部分用户流量进入系统处理,其它流量直接抛弃。

  • 降级:系统抛弃部分不重要的功能,比如不发送短信通知,以此确保核心功能不受影响。

  • 熔断:我们不去调用出问题的服务,让系统绕开故障点,就像电路的保险丝一样,自己熔断,切断通路,避免系统资源大量被占用。比如,用户下单时,如果积分服务出现问题,我们就先不送积分,后续再补偿。

  • 功能禁用:针对具体的功能,我们设置好功能开关,让代码根据开关设置,灵活决定是否执行这部分逻辑。比如商品搜索,在系统繁忙时,我们可以选择不进行复杂的深度搜索。


最后一个设计原则,是系统可监控。


在实践中,系统的故障防不胜防,问题的定位和解决也非常的困难,所以,要想全面保障系统的可用性,最重要的手段就是监控。


总结

了解了系统不可用的原因,再想怎么解决不可用的问题。这也是系统从不可用到高可用的进化。

发布于: 2020 年 08 月 26 日阅读数: 93
用户头像

dongge

关注

还未添加个人签名 2017.10.19 加入

还未添加个人简介

评论

发布
暂无评论
不可用与高可用