隔离与限流

本文探讨了Java分布式系统中的隔离和限流技术,包括线程隔离、进程隔离、集群隔离等手段,以及Hystrix的线程池隔离应用。同时,介绍了限流的重要性,如限制总并发、瞬时并发等,并提到了令牌桶和漏桶算法等限流策略,以及在不同层次如服务内、集群和接入层的限流实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二.隔离

隔离:是指将系统或者资源分隔开
隔离的好处:当系统发生故障时,能限定故障的传播范围,只影响出问题的服务,其次,可以通过隔离减少服务间的资源竞争,互不影响可用性
常用隔离手段:线程隔离,进程隔离,集群隔离,机房隔离,读写隔离,快慢隔离,动静隔离,爬虫隔离

1.线程隔离:不同的请求应该用不同的线程池隔离,当某种业务请求量突然暴增时,业务线程也只会打满自己的业务线程池,不会影响其他业务,可以将耗时比较大的,或者核心业务单独放一个线程池,其他的再放另一个线程池
2.进程隔离:不同的业务系统应该隔离,比如推荐系统和商场系统,当推荐系统oom时,不会影响商场系统
3.集群隔离:为一并发较高的业务单独设置集群,比如秒杀系统,再比如灰度
4.机房隔离:防止物理原因(比如光缆断了),切流量
5.读写隔离:读取应先读取从集群,再读写主集群
6.动静隔离:静态资源可以放cdn
7.爬虫隔离:对一些恶意ip,应该进行限流,不过考虑到公司的公网ip一般是同一个。可以用ip+cookie的方式限制,或者访问带验证码
8.热点隔离:对于读热点,可以用多级缓存处理,写热点可以用缓存+队列削峰
9.资源隔离:docker容器

隔离利器,Hystrix:使用,命令模式+线程池实现线程隔离

三.限流

限流的意义:一个系统中的资源不是无限的,当流量突然暴增的时候,总有系统资源耗尽的时候,限流的意义就在于当这种情况出现时,对请求拒绝服务,排队或者等待,降级,以保护系统的可用性。

常见的限流:限制总并发,限制瞬时并发,限制时间窗口内平均速率,限制消息队列速率,限制远程调用数

限流算法:
1.令牌桶算法
在这里插入图片描述
2.漏桶算法
在这里插入图片描述

两者区别:
令牌桶算法是固定速率添加令牌,有令牌则处理,无令牌则拒绝,漏桶算法是固定速率处理请求,请求流入速率随意,桶满了则拒绝
令牌桶限制请求流入速率,允许一定程度突发,漏桶平滑流出速率
这两种限流算法在guava中有实现

3.服务内接口限流:信号量或原子类型
4.集群接口限流:redis+lua实现,lua脚本先检测是否超过阈值,超过则返回失败,没有超过则redis中key+1

5.接入层限流
nginx的连接数限流模块:ngx_http_limit_conn_module与漏桶算法实现的请求限流模块:ngx_http_limit_req_module

6.节流
throttleFirst/throttleLast:在时间窗口内,如果有相同的请求,只处理第一个或者最后一个
throttleWithTimeOut:限制两个连续事件的先后执行时间间隔不小于某个时间窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值