栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

隔离与限流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

隔离与限流

二.隔离

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

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:限制两个连续事件的先后执行时间间隔不小于某个时间窗口

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号