系统故障的解决方法?
要知道,每一个程序系统都不是单独存在的,而是由众多小系统组成的。而今天我们就一起来了解一下,关于系统故障的问题应该如何发现和解决。
故障发现
所谓“故障发现”,就是通过技术手段实时采集系统中每个节点的健康状态,以及每2个节点之间链路的健康状态,包括但不限于调用成功率、响应时间等等。借此代替我们的眼睛去盯着整个系统,一旦低于某个设定的阈值,就触发报警给我们一个提醒。因为当你的系统中存在成百上千的程序时,靠肉眼去找到发生故障的位置,简直是天方夜谭。哪怕找到了,也可能已经产生了巨大的损失。
负责故障发现的解决方案都属于应用性能管理(APM)范畴。我们在部署这个“眼睛”的时候,需要考虑到全方位的覆盖,要包含所有的节点。比如:
在Web方面可以直接利用浏览器提供的导航计时(NavigationTiming)和资源计时(ResourceTiming)接口来采集性能数据,非常方便。
在iOS、Android这种App方面通过源代码插桩的方式进行。比如直接引入采集SDK然后硬编码在源代码中,或者通过AOP框架来进行动态代码注入。代码的注入位置就在每个方法的执行前和执行后。
故障消除
现在已经能够很容易的发现故障了,我们就可以通过综合运用隔离性、横向扩展、代理、负载均衡、熔断、限流、降级等等机制来快速的“掐灭故障”。
分布式系统的规模越大,耦合越严重,各个子系统之间通过网络连接在一起,就如赤壁之战中的曹军连在一起的船舶一样,只要其中一个着火了就会就近蔓延。所以,北京IT培训建议一旦发现某个子系统挂了,就需要尽快切断与它的联系,保证自己能够不受连累,防止雪崩的发生。
我们可以先运用docker之类的技术将每个应用在运行时的环境层面隔离开来。然后,通过横向扩展让每个应用允许被“Copy”,以此来部署多个副本。接着,结合代理和负载均衡让这些副本可以共同对外提供服务,使得每个应用程序本身先具备“高可用”。后的三大防御措施,熔断、限流、降级来快速“掐灭故障”,避免故障在不同的应用程序间扩散。