个人简介

Echo Blog


江湖无名 安心练剑
  • 高可用之限流-07-token bucket 令牌桶算法
    令牌桶算法 令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。 典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。 令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。 从原理上看,令牌桶算法和漏桶算...
    2018-12-23 05:55:13 | Distributed
  • 高可用之限流-06-slide window 滑动窗口 sentinel 源码
    sentinel 构建滑动时间窗口 上文介绍过通过调用LeadArray的currentWindow方法返回时间窗口,下面来仔细分析。 public WindowWrap<T> currentWindow() { //参数是当前时间 return currentWindow(TimeUtil.currentTimeMillis()); } public Wi...
    2018-12-23 05:55:13 | Distributed
  • 高可用之限流-05-slide window 滑动窗口
    滑动日志-Sliding Log 滑动日志算法,利用记录下来的用户的请求时间,请求数,当该用户的一个新的请求进来时,比较这个用户在这个窗口内的请求数是否超过了限定值,超过的话就拒绝这个请求。 优点: 避免了固定窗口算法在窗口边界可能出现的两倍流量问题 由于是针对每个用户进行统计的,不会引发惊群效应 缺点: 需要保存大量的请...
    2018-12-23 05:55:13 | Distributed
  • 高可用之限流-04-fixed window 固定窗口
    固定窗口 计数器的方案比较简单。比如限制1秒钟内请求数最多为10个,每当进来一个请求,则计数器+1。 当计数器达到上限时,则触发限流。 时间每经过1秒,则重置计数器。 核心代码 重置计数器可以通过 loop 循环,也可以通过 CountDownLatch 达到类似的效果。 此处演示一下 CountDownLatch 的实现版本 public class LimitFixedWi...
    2018-12-23 05:55:13 | Distributed
  • 高可用之限流-03-Semaphore 信号量做限流
    主流的限流方式 目前主要有以下几种限流方式: 信号量 计数器 滑动窗口 漏桶算法 令牌桶算法 分布式限流 信号量 信号量实际上就是限制系统的并发量,来达到限流的目的。 常见的用法是:创建Semaphore,指定permit的数量。 在方法开始时,调用 Sem...
    2018-12-23 05:55:13 | Distributed
  • 高可用之限流-02-如何设计限流框架
    序言 如何设计一款限流框架? 核心组件 锁 这个锁可以是对象锁 全局锁 分布式锁 令牌 限制瞬时并发数 限制时间窗最大请求数 令牌桶 限流的维度 可以 1s 内 1min 内 1h 内 1D 内 这里应该是一个责任链,全部满足才能放行。 限制类型 次数 频率 编写方式 声明式 注解式 个人收获 服务平台的思想 所有的服务都可以使用类似的策略。...
    2018-12-23 05:55:13 | Distributed
  • 高可用之限流-01-入门介绍
    背景 在如今的互联网已经作为社会基础设施的大环境下,上面的这个场景其实离我们并不是那么远,同时也会显得没那么极端。 例如,层出不穷的营销玩法,一个接着一个的社会热点,以及互联网冰山之下的黑产、刷子的蓬勃发展,更加使得这个场景变的那么的需要去考虑、去顾忌。 因为随时都有可能会涌入超出你预期的流量,然后压垮你的系统。 那么限流的作用就很显而易见了:只要系统没宕机,系统只是因为资源不够,而...
    2018-12-23 05:55:13 | Distributed
  • 高可用之降级
    降级 概念 「降级」工作,目的是为了腾出更多资源给核心程序使用,以最大化保证核心业务的可用性,因此就必然需要对非核心业务执行一些降级处理。 降级的目的用一句话概括就是:将有限的资源效益最大化。 例子 什么样才是效益最大化呢?就像下面这个例子: 有3个东西要买,一个3000的A、一个700的B、一个1200的C,对个人的重要程度A>B>C。 但此时,手里只有3000块...
    2018-12-23 05:55:13 | Distributed