文档章节

Gubernator 是一个分布式,高性能,云原生和无状态的速率限制服务

吕不为
 吕不为
发布于 07/31 23:15
字数 778
阅读 18
收藏 0

Gubernator 是一个分布式,高性能,云原生和无状态的速率限制服务。

关键特性

  1. Gubernator 可以把请求的速率平均限制到整个集群,这意味着,您可以简单的通过增加更多的节点平滑的扩展系统服务能力。
  2. Gubernator不依赖于外部的缓存,如MemCache或者Redis这样的软件,也不依赖于其他的服务,这意味着本服务可以动态的增加服务能力。
  3. Gubernator保持磁盘的无状态能力,基于每个请求的配置处理能力。
  4. Gubernator提供了GPRC和HTTP的访问API接口。
  5. 可以做为一个边缘服务或者分离的服务进行速率限制。
  6. 可以做为自定义服务的库来使用。
  7. 支持可扩展的外部环境进行速率限制。
  8. Gubernator是俄语长官的英语发音,听起来不错吧。

无状态配置

Gubernator是一个无状态的服务,不需要磁盘空间保存历史操作,没有配置和数据会缓存到磁盘,这是因为每一个请求,包括配置信息,速率限制配置信息仅仅是一个64位整数。

例如,对GRPC进行限制

rate_limits:
 #速率限制的名称
 - name: requests_per_sec
 #一个唯一键值,用来标识请求限制的实例名称
 unique_key: account_id=123|source_ip=172.0.0.1
 #请求的命种数量
 hits: 1
 #速度限制的请求总数
 limit: 100
 #限制速度的周期时长(毫秒)
 duration: 1000
 #计算速率限制的算法 0信号桶 1滴漏桶
 algorithm: 0
 #速度限制的行为 0允许每次批量请求 1非止批量请求 2允许全局缓存速率限制
 behavior: 0

如下所示:

rate_limits:
  # 速度限制的状态 OK=0,OVER_LIMIT =1
  - status: 0,
  # 当前配置限制
  limit: 10
  # 请求保持数量
  remaining: 7
  # 桶限制的unix时间戳,如果超过限制,设置时间不再返回OVER_LIMIT
  reset_time: 1551309219226 
  #关于每个请求的速率限制的附加原始信息
  metadata:
     "owner":"api-n03.staging.us-east-1.mailgun.org:9041"

速率限制算法

信号桶

开始是一个空桶,每次命令请求,桶内数据加1,直到桶满了,如果桶满了,将返回OVER_LIMIT,走到计时器清零,然后再开始循环。

沙漏桶

桶满了,返回OVER_LIMIT,然后,桶中的数据通过 时长/限制 算出空余量,此时,如果有空间,可以继续进入数据。

性能

在我们的产品环境中,我们的每个API每个请求限制为2,通过指定的时长进行限制,如下图所示,每秒超过2000个请求的批量响应在1毫秒之内。

© 著作权归作者所有

吕不为
粉丝 5
博文 50
码字总数 17552
作品 0
海淀
私信 提问
高性能分布式限速微服务 - Gubernator

Gubernator 作为微服务的主要特性是,它为进入系统的许多请求创建了一个同步点。在几微秒内接收到的请求可以被优化并协调成批,从而减少服务在重载下使用的总带宽和往返延迟。多个服务都运行...

匿名
08/07
4.5K
1
边缘和服务代理 - Envoy

Envoy 是开源的边缘和服务代理,用于云原生应用,云原生基金会 CNCF 项目。 Envoy 最初是在 Lyft 构建的,它是为单一服务和应用程序设计的高性能 C++ 分布式代理,以及为大型微服务 Service ...

匿名
2018/06/29
5.2K
3
如何设计和实现自适应的负载均衡

本文是第五届中间件性能挑战赛的赛题解析,参与比赛,赢取最高10万元奖金。 在现代分布式应用中,服务请求是由物理机或虚拟机组成的 server 池进行处理的。 通常,server 池规模巨大且服务容...

中间件小哥
06/13
0
0
Service Mesh真的是云原生应用的绝配吗

Richard Li 随着越来越多企业开始落地微服务架构,Service Mesh和相关的解决方案在社区内的讨论热度开始逐渐上涨。Service Mesh所提倡的“全栈可观察性”、透明安全性、系统弹性等特性令人着...

好雨云帮
2018/07/10
45
0
选择Pulsar而不是Kafka的7大理由

AI 前线导读: 对于开发云原生分布式应用程序的开发人员来说,他们应该把更多的精力放在应用程序和微服务上,而不是把时间浪费在处理复杂的消息基础设施上,他们需要一些解决方案帮助他们管理...

AI前线
06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部