30

架构设计:隔离术

 5 years ago
source link: https://mp.weixin.qq.com/s/fXPCTFxiCH8wM7oEu1CaRw?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

隔离 是通过将系统、资源分开,从而保证在发生问题时使其影响最小化,防止出现雪崩效应。

例如系统中有服务接口 A B C,因为某些原因,接口A的访问量激增,占用了大量系统资源,导致 B C 接口也无法正常运行了。如果使用了隔离机制,即使A的访问量很大,也不会影响 B C,把影响限定在一定范围,提高了系统的可用性。

隔离术是保证系统高可用的重要手段,常用的隔离方式有以下几种。

1. 线程隔离

比如 Tomcat 有一个线程池,接收请求后就从线程池中分配一个线程进行处理。

AnQbueq.jpg!web

比如请求业务A的量很大,线程都分给A了,B的请求来了以后就无法快速响应。

这时我们可以进行线程隔离,使用多个线程池来进行隔离,这样即使某个线程池很忙,也不会影响另一个。

rIvaeae.jpg!web

2. 进程隔离

一个应用系统中会包含多个模块,例如有论坛模块、交易模块。

当系统访问量大了以后,局部性原理的效果显现出来,一定会有某个模块的访问比例是极高的,比如是论坛模块,系统资源大部分都被其占用,就会影响其他模块的运行效率,而且论坛模块访问量大,其出现故障的概率也就更大,如果出现故障就可能导致整个系统不可用。

这种情况下较好的解决方案就是使用进程隔离,把系统拆分为多个子系统实现物理隔离,互不影响。

ryyeeaI.jpg!web

3. 集群隔离

单实例服务无法满足需求后,就会部署多个服务,形成服务集群来提升性能。

例如商品服务,部署多个实例,每个实例都包含相关服务功能:

veueYrV.jpg!web

秒杀是比较特殊的服务,瞬时访问量会非常大,当发展到一定程度后,势必会影响其他服务,这时就可以把秒杀提取出来,与其他服务隔离开。

QVR7niV.jpg!web

4. 机房隔离

随着系统规模的增大,对可用性要求的增加,会进行多机房部署。

本机房的服务只调用本机房服务,不进行跨机房调用,如果一个机房发生故障,可以通过 DNS/负载均衡将请求切换到另一个机房。

5. 读写隔离

比如数据库,刚开始读写都操作一个数据库实例,当规模上来后,就可以使用读写分离模式,提升了性能,而且即使写入的库出现故障,也不影响读操作。

JJrmY3J.jpg!web

再比如 Redis 集群,也可以使用读写隔离来提升可用性,读服务只读取从集群,主集群故障后,从集群还可用,并且当一个从集群出现故障后,还可以到另一个群中重试。

Qz2Eb22.jpg!web

6. 动静隔离

Web服务器中包含静态资源(例如 JS CSS文件)、动态资源(例如 JSP PHP 文件),对于静态资源,服务器其实只是存储的作用,用户请求时直接返回,无需计算,这就可以将静态资源放到 CDN 上,既可以提升静态资源的加载速度,又减轻了服务器的压力。

7. 爬虫隔离

如果爬虫的访问量已经对系统性能产生了一定影响,就一定要把爬虫的访问隔离出来,可以在负载均衡层面将其路由到单独集群,保护系统的正常业务。

MNJjYjQ.jpg!web

Nginx 中配置示例代码:

set $flag 0; 
if ($http_user_agent ~* "spider") { 
    set $flag "1"; 
} 
if($flag = "0") {
    //代理到正常集群
}
if ($flag = "1") { 
    //代理到爬虫集群
}

8. 热点隔离

前面例子中的秒杀就属于热点,所以需要对其进行隔离。

对于读类型的热点,可以使用 多级缓存 来处理。对于写类型的热点,可以使用 缓存+队列 的模式。

9. 资源隔离

常见的资源例如CPU、磁盘、网络。

比如使用 docker 容器时,有的容器写磁盘非常频繁,就需要考虑为不同的容器挂载不同的磁盘。

比如 redis nginx,我们可以为其绑定CPU来提升性能。

再比如大数据计算集群、数据库集群应该与应用集群网络隔离。

内容整理自《亿级流量网站架构核心技术》

点击:point_down: 阅读原文 ,查看 文章列表


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK