网站的布局方式有哪些,开设一个网站的费用,如何查看网站名称,网站开发项目安排Sentinel基本应用限流规则
1.1 概述与作用 随着微服务的流行#xff0c;服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。
缓存#xff1a;提升系统访问速度和增大系统能处理的容量 降级#xff1a;当服务出问题或者影…Sentinel基本应用限流规则
1.1 概述与作用 随着微服务的流行服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。
缓存提升系统访问速度和增大系统能处理的容量 降级当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 限流解决服务雪崩级联服务发生阻塞时及时熔断防止请求堆积消耗占用系统的线程、IO等资源造成其他级联服务所在服务器的崩溃
这里我们说一下限流限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统一旦达到限制速率就可以拒绝服务、等待、降级。
1.2 限流算法 限流算法常用的几种实现方式有如下四种计数器、滑动窗口、漏桶和令牌桶
1.2.1 计数器固定窗口 • 思想计数器算法是使用计数器在周期内累加访问次数当达到设定的限流值时触发限流策略。下一个周期开始时进行清零重新计数。此算法在单机还是分布式环境下实现都非常简单使用redis的incr原子自增性和线程安全即可轻松实现。 问题这个算法通常用于QPS限流和统计总访问量对于秒级以上的时间周期来说会存在一个非常严重的问题那就是临界问题如下图 假设1min内服务器的负载能力为100因此一个周期的访问量限制在100然而在第一个周期的最后5秒和下一个周期的开始5秒时间段内分别涌入100的访问量虽然没有超过每个周期的限制量但是整体上10秒内已达到200的访问量已远远超过服务器的负载能力由此可见计数器算法方式限流对于周期比较长的限流存在很大的弊端。
1.2.2 滑动窗口 • 思想滑动窗口算法是将时间周期分为N个小周期分别记录每个小周期内访问次数并且根据时间滑动删除过期的小周期。
如下图假设时间周期为1min将1min再分为2个小周期统计每个小周期的访问数量则可以看到第一个时间周期内访问数量为75第二个时间周期内访问数量为100超过100的访问则被限流掉了 由此可见当滑动窗口的格子划分的越多那么滑动窗口的滚动就越平滑限流的统计就会越精确。
此算法可以很好的解决固定窗口算法的临界问题。
1.2.3 漏桶 思想漏桶算法是首先想象有一个木桶桶的容量是固定的。当有请求到来时先放到木桶中处理请求的worker以固定的速度从木桶中取出请求进行相应。如果木桶已经满了直接返回请求频率超限的错误码或者页面
• 适用场景漏桶算法是流量最均匀的限流实现方式一般用于流量“整形”。例如保护数据库的限流先把对数据库的访问加入到木桶中worker再以db能够承受的qps从木桶中取出请求去访问数据库。
• 问题木桶流入请求的速率是不固定的但是流出的速率是恒定的。这样的话能保护系统资源不被打满但是面对突发流量时会有大量请求失败不适合电商抢购和微博出现热点事件等场景的限流。
1.2.4 令牌桶 思想令牌桶是反向的漏桶它是以恒定的速度往木桶里加入令牌木桶满了则不再加入令牌。服务收到请求时尝试从木桶中取出一个令牌如果能够得到令牌则继续执行后续的业务逻辑。如果没有得到令牌直接返回访问频率超限的错误码或页面等不继续执行后续的业务逻辑。
• 适用场景适合电商抢购或者微博出现热点事件这种场景因为在限流的同时可以应对一定的突发流量。如果采用漏桶那样的均匀速度处理请求的算法在发生热点时间的时候会造成大量的用户无法访问对用户体验的损害比较大。
1.2.5 各个算法比较 1.3 限流的方式 • 针对请求进行限制
• 服务器它能处理的并发连接数是有限的当超出服务器的最大请求连接数服务器就会拒绝该请求
• 应用接口的处理能力QPS/TPS。RT 平均响应时间-Jmeter压测
• 资源限制cpu线程池、内存堆栈内存、网络资源
1.4 限流框架 2.1.4.1 guava springboot-sentinel项目下的RateLimiterDemo
Google的Guava工具包中就提供了一个限流工具类——RateLimiter。RateLimiter是基于“令牌通算法”来实现限流的。
1.4.2 sentinel 限流比较主流的三种算法漏桶令牌桶滑动窗口。而Sentinel采用的是最后一种滑动窗口来实现限流的。当然sentinel不仅仅局限于限流它是一个面向分布式服务架构的高可用流量防护组件主要以流量为切入点从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。