谈谈高可用之隔离
Posted 小强大人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈高可用之隔离相关的知识,希望对你有一定的参考价值。
前言
在高可用系统中,隔离指的是将系统或资源与其他系统分割开。系统隔离是为了在系统发生故障时,限定故障的传播范围和影响范围,进而避免雪崩效应。这样就可以使得只有出问题的服务不可用,其他服务还是可用的。资源隔离是通过隔离来减少服务间的资源竞争,从而保障服务间的相互不影响和可用性。线程隔离手段有线程隔离、进程隔离、集群隔离、机房隔离、读写隔离、热点隔离、动静隔离、爬虫隔离等。
线程隔离
线程隔离主要是指线程池隔离,在实际使用时,我们会把请求分类,然后交给不同的线程池处理。当一种业务的请求处理出现问题时,不会将故障扩散到其他线程池,从而保证服务可用。例如,我们可以将核心业务与非核心业务放到两组线程池,在一定程度上可以防止非核心业务的故障对核心业务造成影响。
进程隔离
在业务发展初期,规模可能不大,开发的系统可能是单体架构,所有功能模块都在一个应用进程中运行。这样,某个模块出现问题时,可能会直接导致整个系统不可用。现在的方案都是通过微服务架构,根据业务功能将系统拆分成多个子系统,即一个个独立运行的微服务进程。
集群隔离
现如今,单机服务显然无法撑住大流量的请求,基本都是分布式集群服务。比如,在电商系统大促活动到来时,可以将秒杀服务集群与其他服务集群隔离开,这样其他服务集群出现问题的话,不会影响到秒杀服务的可用性。
机房隔离
随着系统可用性和并发性需求的增加,我们会进行多机房部署,本机房的服务会先调用本机房的服务,不进行跨机房调用。当其中一个机房的服务出现问题时,可以通过负载均衡(如nginx)等手段将请求切换到其他机房,或者给服务提供自动重试其他服务的机制,从而提升整个系统的可用性。
读写隔离
现在的mysql,Redis通常会采用主从模式,主机负责写服务,从机负责读服务,主从机器会进行数据的同步,从而提升整个系统的可用性。
动静隔离
在高并发系统中,我们可以将静态资源和动态资源分离,一般的做法是将静态资源放在CDN节点上,用户访问页面时,会先从CDN缓存中获取静态资源,如果没有获取到,则回源到后端服务器获取。
爬虫隔离
在实际业务中,除了正常请求,可能还会有爬虫流量,除了限流手段,还可以在负载均衡层将爬虫流量路由到单独集群,从而保证正常流量高可用,爬虫流量尽量可用。
热点隔离
秒杀,抢购这种流量就是典型的热点流量,而这种热点我们是能提前知道的,所以可以将秒杀服务做成独立系统进行隔离,从而保证真个系统的可用性。
隔离技术
目前常用的隔离技术有Hystrix,Sentinel。Hystrix提供了线程池隔离、信号量隔离等手段。
参考资料:
《亿级流量网站架构核心技术》
以上是关于谈谈高可用之隔离的主要内容,如果未能解决你的问题,请参考以下文章