谈谈高可用之隔离

Posted 小强大人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈高可用之隔离相关的知识,希望对你有一定的参考价值。

前言

在高可用系统中,隔离指的是将系统或资源与其他系统分割开。系统隔离是为了在系统发生故障时,限定故障的传播范围和影响范围,进而避免雪崩效应。这样就可以使得只有出问题的服务不可用,其他服务还是可用的。资源隔离是通过隔离来减少服务间的资源竞争,从而保障服务间的相互不影响和可用性。线程隔离手段有线程隔离、进程隔离、集群隔离、机房隔离、读写隔离、热点隔离、动静隔离、爬虫隔离等。

线程隔离

线程隔离主要是指线程池隔离,在实际使用时,我们会把请求分类,然后交给不同的线程池处理。当一种业务的请求处理出现问题时,不会将故障扩散到其他线程池,从而保证服务可用。例如,我们可以将核心业务与非核心业务放到两组线程池,在一定程度上可以防止非核心业务的故障对核心业务造成影响。

进程隔离

在业务发展初期,规模可能不大,开发的系统可能是单体架构,所有功能模块都在一个应用进程中运行。这样,某个模块出现问题时,可能会直接导致整个系统不可用。现在的方案都是通过微服务架构,根据业务功能将系统拆分成多个子系统,即一个个独立运行的微服务进程。

集群隔离

现如今,单机服务显然无法撑住大流量的请求,基本都是分布式集群服务。比如,在电商系统大促活动到来时,可以将秒杀服务集群与其他服务集群隔离开,这样其他服务集群出现问题的话,不会影响到秒杀服务的可用性。

机房隔离

随着系统可用性和并发性需求的增加,我们会进行多机房部署,本机房的服务会先调用本机房的服务,不进行跨机房调用。当其中一个机房的服务出现问题时,可以通过负载均衡(如nginx)等手段将请求切换到其他机房,或者给服务提供自动重试其他服务的机制,从而提升整个系统的可用性。

读写隔离

现在的mysql,Redis通常会采用主从模式,主机负责写服务,从机负责读服务,主从机器会进行数据的同步,从而提升整个系统的可用性。

动静隔离

在高并发系统中,我们可以将静态资源和动态资源分离,一般的做法是将静态资源放在CDN节点上,用户访问页面时,会先从CDN缓存中获取静态资源,如果没有获取到,则回源到后端服务器获取。

爬虫隔离

在实际业务中,除了正常请求,可能还会有爬虫流量,除了限流手段,还可以在负载均衡层将爬虫流量路由到单独集群,从而保证正常流量高可用,爬虫流量尽量可用。

热点隔离

秒杀,抢购这种流量就是典型的热点流量,而这种热点我们是能提前知道的,所以可以将秒杀服务做成独立系统进行隔离,从而保证真个系统的可用性。

隔离技术

目前常用的隔离技术有Hystrix,Sentinel。Hystrix提供了线程池隔离、信号量隔离等手段。

参考资料:
《亿级流量网站架构核心技术》

以上是关于谈谈高可用之隔离的主要内容,如果未能解决你的问题,请参考以下文章

分布式框架之高可用:Hystrix资源隔离

高并发与高可用实战之基础知识大型网站架构特征

工作十年,谈谈我的高可用架构和系统设计经验

haproxy高可用之非抢占keepalived

高可用架构案例一

玩转Linux之LVS与keepalived组合搭建负载均衡+高可用群集