03. 容灾与隔离
服务容灾与隔离
从一个计算机系统的角度讲,一切引起系统非正常停机的事件都可以称为灾难。大致可以分成以下三个类型:
- 自然灾害,包括地震、火灾、洪水、雷电等,这种灾难破坏性大,影响面广;
- 设备故障,包括主机的
CPU 、硬盘等损坏,电源中断以及网络故障等,这类灾难影响范围比较小,破坏性小; - 人为操作破坏,包括误操作、人为蓄意破坏等等;
容灾(Disaster Tolerance
- 假设你的硬件会失败…
- 假设电力停机…
- 假设会遭遇自然灾难…
- 假设伴随着时间,你的应用软件会失败…
- 假设人员会错误操作…
以
- 容错:当系统中出现了各种故障时,系统能够自动隔离故障而不影响系统对外的服务质量;
- 冗余:提供系统冗余配置,当系统发生故障时,冗余的快速介入并承担已发生故障的工作;
单点故障
单点故障(single point of failure,缩写
单点故障不仅仅出现在计算机领域,所有领域都有这个问题。根据航空行业标准
首先,单点故障会带来系统可靠性的下降,单点故障可能会引发整体故障。另外一点,就是单点会带来性能问题,影响系统的处理能力。
系统隔离
在微服务架构中,我们经常会提到雪崩效应(Avalanche Effect)这一概念。服务雪崩的产生是一种扩散效应。当系统中存在两个服务
雪崩效应的预防需要依赖于架构设计中的一种称为舱壁隔离(Bulkhead Isolation)的架构模式。所谓舱壁隔离,顾名思义就是像舱壁一样对资源或失败单元进行隔离,如果一个船舱破了进水,只损失一个船舱,其他船舱可以不受影响。舱壁隔离模式在微服务架构中的应用就是各种服务隔离思想。

在计算机系统里,将系统依赖的资源
- 隔离硬件:虚拟机
- 隔离操作系统:容器虚拟化
- 隔离底层:
Servlet 容器 - 隔离依赖版本:虚拟环境
- 隔离运行环境:语言虚拟机
- 隔离语言:DSL
隔离是微服务架构中最重要的特性,也是实现反应式宣言中所提倡的弹性、可伸缩系统的前提。所谓弹性,就是从失败中恢复的能力,依赖于这种舱壁和失败隔离的设计,并且需要打破同步通信机制。由此,微服务一般是在边界之间使用异步消息传输,从而使得正常的业务逻辑避免对捕获错误、错误处理的依赖。
当然,我们使用了容器等虚拟化技术天然就采用了隔离技术。