首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go每日一库之162:throttled(轻量级限流工具)

Go每日一库之162:throttled(轻量级限流工具)

作者头像
luckpunk
发布于 2023-10-02 00:21:30
发布于 2023-10-02 00:21:30
39700
代码可运行
举报
运行总次数:0
代码可运行

throttled 是一个非常轻量且易扩展的限流组件,我们可以将它轻松地集成到应用程序中,以实现限流和配额管理的能力。

简介

throttled(https://github.com/throttled/throttled) 基于通用信元速率算法实现了对资源的访问速率限制,资源可以是特定的 URL、用户或者任何自定义的形式,可以很方便地与各种 http 和 rpc 框架进行集成。throttled 定义了限流元信息的存储抽象,并内置了 memstore,redis store 等元信息存储实现,我们可以根据具体的使用场景实现单机限流和集群限流。

使用举例

下面我们来基于 throttled 自带的 http 限流组件实现一个简单的 demo 试试看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    "fmt"
    "log"
    "net/http"

"github.com/throttled/throttled/v2"
    "github.com/throttled/throttled/v2/store/memstore"
)

func main() {
    // 在 store 中添加 key 的数量限制
    store, err := memstore.New(65536)
    if err != nil {
        log.Fatal(err)
    }

// 配置限流规则
    quota := throttled.RateQuota{
        MaxRate:  throttled.PerMin(20),
        MaxBurst: 5,
    }
    rateLimiter, err := throttled.NewGCRARateLimiter(store, quota)
    if err != nil {
        log.Fatal(err)
    }

httpRateLimiter := throttled.HTTPRateLimiter{
        RateLimiter: rateLimiter,
        // 根据 path 进行限流
        VaryBy: &throttled.VaryBy{Path: true},
    }

handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "hello, world\n")
    })
    http.ListenAndServe(":8080", httpRateLimiter.RateLimit(handler))
}

以上我们实现了一个按请求 path 进行限流的 http 服务,允许同一个 path 每分钟 20 次请求,并支持短时间内最多 5 个请求的 burst。

此外,我们也可以通过指定 VaryBy 和 DeniedHandler 的方式对资源定义和超限处理进行一些更多的定制。

总结

throttled 是一款小巧轻量的限流组件,我们可以使用 throttled 非常轻松地实现单机或集群的 QPS 限流能力。当然,throttled 的限流手段比较单一,当前仅支持基于 QPS 的限流规则,尚未扩展更全面的限流模式和更丰富的阻断规则。

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux下Nginx配置SSL以及301重定向
Nginx配置文件,位置/etc/nginx/sites-enabled下的default文件
no怕不了木
2023/10/26
1.3K0
Nginx配置SSL实现https请求并重定向http请求的实现
因为我的网站是部署在腾讯云上的,腾讯云同时也提供了免费的SSL证书(有效期1年)。
Bug生活2048
2018/08/31
4.4K0
Nginx配置SSL实现https请求并重定向http请求的实现
手把手教你 3 分钟搞定个人网站 http 免费升级到 https
阿里云有免费的 ssl 证书,一年时间没操作 ssl 证书了,阿里云竟然把免费证书入口给隐藏了,害我提交了一次工单。
业余草
2020/08/25
2.1K0
手把手教你 3 分钟搞定个人网站 http 免费升级到 https
Nginx配置正向代理和反向代理,实现HTTPS通信的案例
客户端直接通过HTTP访问内部服务是不安全的,如果在不改造客户端和内部服务的情况下实现HTTPS的安全信息传输?这里使用了nginx的正向代理和反向代理,如上图所示。
飞狗
2019/02/25
5.3K0
Nginx配置正向代理和反向代理,实现HTTPS通信的案例
Nginx同一个IP上多个域名配置安装SSL证书
在同一台服务器上配置多个带有SSL证书的HTTPS网站时,每个网站确实需要使用不同的端口号,以避免冲突。这是因为SSL/TLS协议通常是在特定的端口上运行的,默认情况下是443端口。
Tinywan
2024/03/20
3.5K0
Nginx同一个IP上多个域名配置安装SSL证书
Nginx系列(3) —— Nginx 的常用命令与配置文件
PS: 默认情况下,window和linux 系统之间是无法相互进行访问的。因为window在访问linux时无法越过linux 的防火墙。
求和小熊猫
2020/11/25
6980
Nginx系列(3) —— Nginx 的常用命令与配置文件
Nginx/Tengine通用配置教程
Nginx/Tengine通用配置教程,包含多域名共用一个端口指向不同程序、Nginx负载均衡配置、Https配置、禁止通过IP访问、设置访问流量并发速率、Nginx反代PHP、Nginx反代Tomcat。 Nginx通用配置: user www www; worker_processes auto; worker_cpu_affinity auto; dso { load ngx_http_concat_module.so; load ngx_http_sysguard_module.so; }
4xx.me
2022/06/09
1K0
Nginx/Tengine通用配置教程
Nginx rewrite地址重写
Rewrite在nginx中也叫URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程。
用户4396583
2024/07/23
5640
NGINX服务器下配置SSL证书
  配置nginx服务器的ssl证书要去nginx目录下中conf文件夹下的nginx.conf中寻找server,找到监听443端口的server,把#打开(即关闭掉注释),修改以下配置(仅供参考)
十月梦想
2018/08/29
5.7K1
nginx搭建web服务器,配置端口复用
5、将配置文件保存在/etc/init.d/nginx位置即可。之后即可通过下面的命令进行启动服务。
Tacc
2022/01/11
2.2K0
nginx搭建web服务器,配置端口复用
Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程
上上篇文章《nginx 平滑升级&新增模块》提到了公司的 https 访问需求。当我新增了 SSL 模块之后,却发现以前还真没部署过 https 访问。 下面整理我的部署过程,并收集了一下 Apach
张戈
2018/03/23
3.6K0
Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程
服务器安防配置–笔记三–nginx构建https协议的wp站点
折腾成功,留下记录.目录是:https是什么,nginx配置,sql全局替换,后台开启https链接,修复图片打不开,增加http禁止.
十四君
2019/11/29
6940
服务器安防配置–笔记三–nginx构建https协议的wp站点
Nginx反向代理+负载均衡简单实现(https方式)
背景: A服务器(192.168.1.8)作为nginx代理服务器 B服务器(192.168.1.150)作为后端真实服务器 现在需要访问https://testwww.huanqiu.com请求时从A服务器上反向代理到B服务器上 这就涉及到nginx反向代理https请求的配置了~~~ ------------------------------------------------------------------------------------ A服务器(192.168.1.8)上的操作流程: 1
洗尽了浮华
2018/01/22
3K0
在CentOS上安装Nginx配置HTTPS并设置系统服务和开机启动(最全教程)
GCC 是 Linux 下最主要的编译工具,GCC 不仅功能非常强大,结构也非常灵活。它可以通过不同的前端模块来支持各种语言,如 Java、Fortran、Pascal、Modula-3 和 Ada。
摘繁华
2021/12/27
2.8K0
在CentOS上安装Nginx配置HTTPS并设置系统服务和开机启动(最全教程)
Centos7安装Nginx教程,一步安装http和https
nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性。 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 下载 在官网下载安装包 安装 解压文件: tar -zxvf nginx-1.20.2.tar.gz 解压之后进入到nginx目录: cd ng
用户10384376
2023/02/26
8990
Centos7安装Nginx教程,一步安装http和https
Nginx配置HTTPS详细说明
TLS或传输层安全( transport layer security),它的前身是SSL(安全套接字层secure sockets layer),是Web协议用来包裹在一个受保护,加密封装正常通道。采用这种技术,服务器和客户端之间可以安全地进行交互,而不用担心消息将被拦截和读取。证书系统帮助用户在核实它们与连接站点的身份。
星哥玩云
2022/07/14
8370
Nginx-基础总结(上)
1.proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。 2.proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。 3.proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。 4.proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。 5.proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。
云计算小黑
2022/12/28
4950
Nginx的https配置记录以及http强制跳转到https的方法梳理
一、Nginx安装(略) 安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块。 Nginx安装方法: # ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module # make && make install 二、生成证书(略) 可以使用openssl生成证书
洗尽了浮华
2018/01/23
6.1K0
网站启用SSL自动301跳转到HTTPS教程
服务器搭建之后就一直在使用宝塔,先抛出安全性能之外,宝塔真的是不错啦,我之前用过许多的控制面板(没办法,技术能力有限,只能用带控制面板的)最好发现还是宝塔比较符合大众的操作习惯,当然收费的amh我也用过,效果不如宝塔,宝塔有很多功能已经集成了,不需要额外的配置文件,比如今天说的启用SSL后,让网站的http自动跳转到https上。如果你的主机不是宝塔,那么参照以下教程试试,也许会有惊喜(记得备份,否则惊喜可能变成惊吓),先说Apache强制301跳转到https教程:
李洋博客
2021/06/15
1.6K0
【腾讯云的1001种玩法】Nginx网站服务器学习与入门
魏豪
2017/04/24
5.6K2
【腾讯云的1001种玩法】Nginx网站服务器学习与入门
推荐阅读
相关推荐
Linux下Nginx配置SSL以及301重定向
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
加入架构与运维工作实战群
高并发系统设计 运维自动化实践
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档