故障隔离
什么是故障隔离?
故障隔离,就是采用一定策略,以实现当某个模块发生故障时,不会影响其他模块继续提供服务,以保证整个系统的可用性,它可以避免分布式系统出现大规模的故障,甚至是瘫痪,降低损失。
分布式故障隔离策略
分布式系统中的故障策略有很多,基本可以分为两个维度:
- 以功能模块为粒度进行隔离,各个功能/服务模块之间松耦合,一个功能/服务模块出现故障,不会影响其他功能/服务模块,根据功能模块或者服务由线程执行还是进程执行,可以分为线程级隔离和进程级隔离。
- 通过资源隔离来实现,系统中各个模块拥有自己独立的资源,不会发生资源争抢,从而提升系统性能,根据资源所属粒度,可以划分成进程级隔离、虚拟机隔离、服务器隔离和机房隔离。
线程级隔离
线程级故障隔离,是指使用不同的线程池处理不同的请求任务。当某种请求任务出现故障时,负责其他请求任务的线程池不会受到影响,即会继续提供服务,从而实现故障隔离。
线程级的故障隔离策略,在生产环境中较为常用,尤其是针对单体应用。系统再实现线程级隔离后,线程间通信通常使用共享变量来实现,它是一个进程中的全局变量,在进程的各个县城间可以同时使用。
进程级隔离
分布式系统按照功能分为不同的进程,分不到相同或者不同的机器中。如果系统的进程分不到不同的机器,从资源的角度来看,也可以算作主机级别的故障隔离。
系统实现进程级隔离后,进程间的协同必须通过进程间通信来实现。进程间通信可以分为两类:
- 如果进程在同一个机器上,可以通过管道、消息队列、信号量、共享内存等方式。
- 如果进程分布在不同机器上,可以通过远程调用来实现。
资源隔离
资源隔离就是将分布式系统的所有资源分成几个部分,每部分资源负责一个模块,这样系统各个模块就不会争抢资源,即资源之间相互不干扰。这种方式不仅可以提高硬件资源利用率,也便于系统的维护和管理,大幅提升系统性能。
容器是微服务架构的基础,它本质上是操作系统的一个进程,但是与普通进程有以下区别:
- 普通进程有很大的计算或者内存需求时,可能会占满物理机上的所有CPU、内存资源,导致其他进程没有资源可用。
- 容器可以实现资源限制,让每个容器占用的资源都有一个上限,这个上限值限定了该容器的处理能力,一个容器使用的资源不会影响到其他容器的资源,从而避免资源争抢,提高性能。
从资源隔离的角度看,还可以有更多故障隔离策略,包括虚拟机隔离、集群隔离、机房隔离等,这些策略会跨集群、跨地域。
下面是关于各种故障隔离策略的详细比较。
27-故障隔离策略比较.png用户级别故障隔离
用户级别故障隔离是指将不同用户分开,当系统出现故障时,只影响部分用户,而不是全体用户。
常用的用户级别故障隔离策略包括数据分片、负载均衡等。
- 数据分片可以将不同用户的数据存储到不同的数据库,即一个数据库只存储部分用户的信息,这样当某个数据库出现故障时,仅影响该故障数据库存储的用户,不会影响其他用户。
- 当处理请求的某个服务器出现故障时,负载均衡转发请求时,只会影响该故障服务器负责的用户请求,不会影响其他服务器正常提供服务。
网友评论