互联网常见的四大技术
- 缓存
- 限流
- 熔断降级
- 隔离或分离
![](https://img.haomeiwen.com/i11017946/644e07909caffe24.jpg)
1.缓存
缓存类型:分布式缓存(代表redis)、本地缓存(guava)
回收策略:基于容量(存储条目多少)、基于时间(TTL、TTI)、基于空间(存储空间大小)
回收算法:
-- FIFO(First In First Out):先进先出算法,几先放入缓存的先失效
-- LRU(Least Recently Used):最近最少使用算法,使用时间距离现在最久的那个被移除
-- LFU(Least Frequently Used):最不常用算法,一定时间段内使用次数或频率最少的那个被移除
2.限流
2.1 常见的限流算法:令牌桶、漏桶
-- 令牌桶:一个固定容量的桶,按照固定速率往桶里添加令牌,当桶满时添加的令牌被丢弃或者拒绝;当请求来时就获取令牌,令牌不足则拒绝请求
-- 漏桶:一个固定容量的漏桶,可以以任意速率流入水滴到漏桶里,漏桶满了则溢出(被丢弃),按照固定的速率流出水滴,漏桶是空的,则不流出水滴。
比较:
1.令牌桶是按照固定速速率往桶里添加令牌,桶里令牌不足,则拒绝处理新请求;漏桶是按照一定的速率流出请求,流入速率是任意的,当桶满时,则拒绝处理新请求
2.令牌限制流入速率,漏桶限制流出速率
3.令牌桶允许一定程度的突发,漏桶则是为了平滑流入速率
2.2 限流类型
-- 应用限流:主要是指应用容器的一些参数配置、代码层面的限流等
-- 分布式限流:主要是指用redis等做一些集群级别的分布式的业务上的限流操作
-- 接入层限流:接入层nginx的一些限流模块的配置等
3.熔断或降级
- 熔断:当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用,这样在保护下游服务的同时自保
- 降级:当某些服务不可用或超市时,直接返回一个提前准备好的fallback(退路)错误处理信息,以此保证整个系统的稳定性和可用性
熔断策略和降级策略一般是同时存在,当然,也可以只有熔断策略不用降级策略。目前比较流行的框架Hystrix(线程池/信号量)、resilience4j(信号量)、Sentinel(信号量),用法大同小异。
4. 隔离或分离
隔离:将系统或资源分隔开,系统隔离是为了系统发生故障时,防止发生滚雪球效应,缩小影响范围,资源隔离通过隔离减少资源竞争,减小服务之间的影响和提高服务的可用性。
隔离:线程隔离、进程隔离、集群隔离、机房隔离
分离:读写分离、动静分离
-- 线程隔离:线程池隔离,即不同的业务交给不同的线程池处理,减小业务之间的相互影响
-- 进程隔离:即将讲一个大而全的单体系统,拆解分多个子系统以实现物理隔离,当一个系统出现问题时,不会影响其他子系统
-- 集群隔离:将服务分组实现隔离,当一个组的服务出现问题,不会影响其他组的服务
-- 读写分离:主要是指数据库层面读写分离
-- 动静分离:前端动静分离,一般将静态资源放在CDN上
-- 机房隔离:服务多机房部署,每个机房的服务都有自己的分组,本机房服务只调用本机房服务,不夸机房调用,当其中某个机房发生问题时,通过负载均衡将请求切换到其他机房,提高系统可用性
-- 爬虫隔离:将爬虫流量和爬虫流量进行隔离
网友评论