远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
    • 分布式一致性协议之Gossip协议
    • 分布式一致性协议之Paxos协议
    • 分布式一致性协议之Raft协议
    • 分布式一致性协议之Lease机制
    • 分布式系统设计策略之心跳检测
    • 分布式系统设计策略之高可用
    • 分布式系统设计策略之容错性
    • 分布式系统设计策略之负载均衡
    • 分布式架构服务调用
    • 分布式服务治理之服务协调
    • 分布式服务治理之服务削峰
    • 分布式服务治理之服务降级
    • 分布式服务治理之服务限流
      • 分布式服务治理之服务熔断
      • 分布式服务治理之服务链路追踪
      • 架构设计基本原则之开闭原则(OCP)
      • 架构设计基本原则之单一职责原则(SRP)
      • 架构设计基本原则之接口隔离原则(ISP)
      • 架构设计基本原则之里式替换原则(LSP)
      • 架构设计基本原则之依赖倒置原则(DIP)
      • 架构设计基本原则知识扩展
      • 分布式架构知识拓展与总结
    • 分布式框架

    • 后端开发
    • 分布式
    terwer
    2022-05-04
    目录

    分布式服务治理之服务限流

    # 服务限流

    # 什么是服务限流

    限流就是为了提供稳定的服务,限制使用人数。

    限流的目的是通过对并发请求进行限速,或者对一个时间窗口内的请求数量进行限速来保护系统。

    一旦达到限制速率可以拒绝服务、排队或者等待。

    image-20220412105549096

    # 多维度进行限流

    请求到达服务接口时,可以采用多维度限流策略。

    image-20220412110052030

    # 限流算法

    1. 限流算法-计数器(固定窗口)

      计数器限制,每一分钟或者每一秒钟内的请求不能超过一定的次数,在下一秒计时器清零重新计算

      image-20220412111040388

      存在的问题:

      客户端在第一分钟的59秒请求了100次,又在第二分钟的1秒请求了100次,2秒内,后端要承受200次请求的压力,形成了流量突刺

    2. 限流算法-计数器(滑动窗口)

      滑动窗口是细分后的计数器。它将每个时间窗口又划分成若干个时间片段,每过一个时间片段,整个时间窗口就会向右移动一格。

      image-20220412112229172

    打满100次,客户端就拒绝访问。

    时间窗口划分的越细,滑动窗口的滚动越平滑,限流效果越精确。

    1. 限流算法-漏桶

      漏桶算法类似一个限制出水速度的水桶,通过一个固定大小的FIFO队列+定时取队列元素的方式实现。

      请求进入队列后,会被匀速取出来处理,类似桶底部的开口匀速出水。当队列被占满后,后来的请求会直接被拒绝,类似水倒得太快溢出来。

      优点是可以削峰填谷,不论请求多大多快,都只会匀速发给后端,不会出现突刺现象,保证下游服务正常运行。

      缺点是桶队列中的请求会排队,响应时间拉长。

    2. 限流算法-令牌桶

      令牌桶算法是以恒定的速度往桶里放置令牌,如果桶里的令牌满了就放弃,每进来一个请求去桶里找令牌,有的话拿走令牌继续处理,没有就拒绝请求。

      image-20220412132838290

    令牌桶的优点是可以应对突发流量,当桶里有令牌时可以快速响应也不会产生漏桶队列中的等待时间。

    缺点是相对于漏桶,一定程度上减少了对下游服务的保护。

    https://www.cnblogs.com/junzi2099/p/14208640.html (opens new window)

    编辑 (opens new window)
    #rpc#service#flow#limitation
    上次更新: 2023/02/22, 13:47:25
    分布式服务治理之服务降级
    分布式服务治理之服务熔断

    ← 分布式服务治理之服务降级 分布式服务治理之服务熔断→

    最近更新
    01
    解决css部分border被圆角切掉之后圆角的边框消失问题
    03-18
    02
    使用TypeScript开发一个自定义的Node-js前端开发脚手架
    03-08
    03
    Github-Actions使用release-please实现自动发版
    03-06
    更多文章>
    Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式