java中高可用

高可用:表示一个系统在大部分时间里都是可用的,即使发生什么故障时,服务任然是可用的。

限流:对请求的速率进行限制,避免瞬时的大量请求击垮系统。
常见限流算法:

固定窗口计算器算法:固定窗口就是就是时间窗口,规定我们单位时间请求数量。采用计数器count初始化为0,在一分钟内请求次数超过设定的某个值,后续请求会被拒绝。缺点是无法保证限流速率,因此无法保证激增的流量,如前0.9s没有请求访问,最后0.1s大量请求访问就会处理不完,系统会被击垮。

滑动窗口计算器算法:将时间按比例分片,如接口限流一分钟只能处理60次请求,则每秒钟只能处理小于60次(请求)/60(窗口数)请求,如果当前窗口的请求计数总和超过了限制的数量的话就不再处理其他请求。

漏桶算法:将处理请求比如漏桶按照一定速率漏水,如果漏桶已经满了,则丢弃该请求。可以以队列形式实现。

令牌桶算法:请求在处理之前需要拿到一个令牌,请求完成之后将这个令牌丢弃删除。根据限流大小按一定速率向桶里添加令牌。如果桶装满了,就不能继续往里面继续添加令牌了。

分布式限流常用的方案:
1、借用中间件限流:可以借助Sentinel或者使用redis来限流
2、网关层限流:通常网关层也需要借助到中间件,就比如Spring Cloud Gateway 的分布式限流实现RedisRateLimiter就是基于 Redis+Lua 来实现的,再比如 Spring Cloud Gateway 还可以整合 Sentinel 来做限流。

灾备 = 容灾 + 备份
备份:将系统产生的重要数据备份
容灾:在异地建立两个完全相同的系统。当某个地方的系统突然挂掉,整个应用系统可以切换到另一个,这样系统就可以正常提供服务了。

你可能感兴趣的:(java进阶,java-ee)