浅谈流量限制

使用github搭建不限流量的图片床 使用github 搭建不限流量的图片床 今天突然意识到图展这个国内的图床极不靠谱,国内的这些免费服务不知道什么时候就会关闭,到时候就欲哭无泪了。于是又去找图床,最后还是意识到GitHub最靠谱,还是用GitHub做图床吧。 使用GitHub作为图片床步骤相当简单 1. 新建一个 `repository`。 github地址 https://github.com/ 2.将创建好的仓库克隆到... 阅读详情
I/O密集型和CPU密集型

对于IO/Network瓶颈类的程序,其表现是网卡/磁盘IO会先于CPU打满,这种情况即使优化CPU的使用也不能提高整个系统的吞吐量,只能提高磁盘的读写速度,增加内存大小,提升网卡的带宽来提升整体性能。而CPU瓶颈类的程序,则是在存储和网卡未打满之前CPU占用率先到达100%,CPU忙于各种计算任务,IO设备相对则较闲。

无论哪种类型的服务,在资源使用到极限的时候都会导致请求堆积,超时,系统hang死,最终伤害到终端用户。对于分布式的Web服务来说,瓶颈还不一定总在系统内部,也有可能在外部。非计算密集型的系统往往会在关系型数据库环节失守,而这时候Web模块本身还远远未达到瓶颈。

常见的流量限制手段
漏桶

漏桶是指我们有一个一直装满了水的桶,每过固定的一段时间即向外漏一滴水。如果你接到了这滴水,那么你就可以继续服务请求,如果没有接到,那么就需要等待下一滴水

令牌桶

令牌桶则是指匀速向桶中添加令牌,服务请求时需要从桶中获取令牌,令牌的数目可以按照需要消耗的资源进行相应的调整。如果没有令牌,可以选择等待,或者放弃

这两种方法,漏桶流出的速率固定,而令牌桶只要桶中有令牌就可以访问,即令牌桶允许一定程度的并发。令牌桶在桶中没有令牌的情况下会退化成漏桶模型。
在这里插入图片描述

开源github.com/juju/ratelimit提供了几种不同的令牌桶填充方式

默认
func NewBucket(fillInterval time.Duration, capacity int64) *Bucket
  • fillInterval 指每过多长时间向桶里放一个令牌
  • capacity是桶的容量,超过桶容量的部分会被直接丢弃
  • 桶初始是满的
批量放令牌
func NewBucketWithRate(rate float64, capacity int64) *Bucket

这个接口每次向桶中放令牌时,是放 quantum 个令牌,而不是一个令牌。会按照提供的比例,每秒钟填充令牌数。例如 capacity 是100,而 rate 是0.1,那么每秒会填充100*0.1=10个令牌

在桶中获取令牌
func (tb *Bucket) Take(count int64) time.Duration {}
func (tb *Bucket) TakeAvailable(count int64) int64 {}
func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) {}
func (tb *Bucket) Wait(count int64) {}
func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool {}
原理

从功能上看,令牌桶模型就是对全局计数的加减法操作,使用计数需要我们去加读写锁。在Go语言中,可以通过buffer channel来完成加减令牌的操作:

var tokenBucket = make(chan struct{}, capacity)

每过一段时间向tokenBucket中添加token,如果bucket已经满了,那么直接放弃。这里就是一个生产消费者模型

package main

import (
    "fmt"
    "math/rand"
    "time"
)

var tokenBucket = make(chan struct{}, kCapcity)

const (
    kFillInterval = 1 * time.Millisecond
    kCapcity      = 100
)

func main() {

    fillToken := func() {
        ticker := time.NewTicker(kFillInterval)
        for {
            select {
            case <-ticker.C:
                select {
                case tokenBucket <- struct{}{}:
                default:
                }
                fmt.Println("current token cnt:", len(tokenBucket), time.Now())
            }
        }

    }

    getRandom := func() int {
        seed := rand.Intn(10)
        return seed
    }

    getToken := func() {
        ticker := time.NewTicker(15 * time.Millisecond)
        for {
            select {
            case <-ticker.C:
                num := getRandom()

                for i := 0; i < num; i++ {
                    <-tokenBucket
                }
            }
        }

    }

    go fillToken()
    go getToken()

    time.Sleep(time.Hour)
}


惰性求值

我们来思考一下,令牌桶每隔一段固定的时间向桶中放令牌,如果我们记下上一次 放令牌的时间为 t1,和当时的令牌数k1,放令牌的时间间隔为ti,每次向令牌桶中 放x个令牌,令牌桶容量为cap。现在如果有人来调用 getToken来取n个令 牌,我们将这个时刻记为t2。在t2时刻,令牌桶中理论上应该有多少令牌呢?伪代码如下:

cur = k1 + ((t2 - t1)/ti) * x
cur = cur > cap ? cap : cur

我们用两个时间点的时间差,再结合其它的参数,理论上在取令牌之前就完全可以 知道桶里有多少令牌了。那劳心费力地像本小节前面向channel里填充token的操 作,理论上是没有必要的。只要在每次 Take 的时候,再对令牌桶中的token数进 行简单计算,就可以得到正确的令牌数。在得到正确的令牌数之后,再进行实际的 Take 操作就好,这个 Take 操作只需 要对令牌数进行简单的减法即可,记得加锁以保证并发安全。 github.com/juju/ratelimit这个库就是这样做的。

Nginx防止流量攻击的配置浅谈 而且也不能一直排队,所以nginx还设了超时,排队超过一定时间,也是直接退回,返回服务器忙的响应。大家都知道服务器资源有限的,但是客户端来的请求是无限的(不排除恶意攻击), 为了保证大部分的请求能够正常响应,不得不放弃一些客户端来的请求,所以我们会采用Nginx的限流操作, 这种操作可以很大程度上缓解服务器的压力, 使其他正常的请求能够得到正常响应。这篇文章主要给大家分享了Nginx防止流量攻击的配置方法,文中给出了详细的介绍和配置示例代码,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 阅读详情

相关推荐

浅谈ACL在校园网中的应用

【摘要】随着网络在教育领域的应用得到迅速的发展,为全面实现温江区教育现代化,我区部分学校已经塔建了校园网,逐步建立了学校内部网络资源,其余学校也会陆续建设完成。在很多时侯要对内部网络进行管理,网络管理员就要用到ACL(访问控制列表),ACL可以限制网络流量、提高网络性能,提供对通信流量的控制手段,是提供网络安全访问的基本手段,可以在网络进出口处决定哪种类型的通信流量被转发或被...

caiguazheng4921的博客 2324

无法访问GitHub,原因以及快速解决办法

综上所述,出现无法访问GitHub的情况,可能是因为网络层面的问题、GitHub本身问题或者个人设备问题,需要通过排查来找出具体的原因并采取相应的解决方案。DNS是一种用于将网址转换为IP地址的工具,如果你的电脑无法访问GitHub,那么很有可能是因为DNS出现了问题。如果GitHub出现以下问题,可能对你的访问造成访问影响。浏览器问题可能导致你的电脑无法正常访问GitHub,解决方法包括清除缓存、重启浏览器或者使用其他浏览器尝试访问。最后,还有可能是你的个人设备存在问题,导致你无法访问GitHub。

weixin_39094034的博客 3万+

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1987

如何在github建免费,无限流量的个人blog

github pages Jekyll

wcc526的专栏 4116

【项目实战】基于STM32单片机的智能小车设计(有代码)

【1】背景意义 近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术。因此,基于嵌入式技术的无线通信视频监控轮式机器人应运而生。由于它们与人类工作相比具有成本低廉、安全稳定的优点,目前已经在许多危险作业以及工业场合得到了广泛应用而且轮式机器人不需要像人那样采取过多的保护措施,因此轮式机...

ShawnWang1994的博客 13万+

数字IC后端实现 | Innovus各个阶段常用命令汇总

数字IC后端设计实现之Innovus常用命令汇总

weixin_37584728的博客 7312

Github api 请求速率说明和请求限制说明,使用认证token增加请求次数

GitHub 对每小时可以发送的请求数量有限制。可以通过。

1万+

Windows防火墙服务异常修复指南:0x80070422与0x6D9报错实战处理

本文针对Windows防火墙服务异常导致的0x80070422与0x6D9报错,提供了从基础到进阶的实战修复指南。核心是通过services.msc服务管理器检查并修复Windows Firewall服务,包括设置启动类型、检查依赖服务等关键步骤。同时介绍了当基础方法失效时,如何使用命令行工具、系统文件检查器(SFC/DISM)以及排查组策略与第三方软件冲突等深度解决方案,帮助用户彻底解决防火墙服务无法启动或访问的问题。

m9n0o的博客 542

搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门

喜欢写Blog的人,会经历三个阶段。   第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写。   第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客。   第三阶段,觉得独立博客的管理太麻烦,最好在保留控制权的前提下,让别人来管,自己只负责写文章。 大多数Blog作者,都停留在第一和第二阶段,因为第三阶段不太容易到达:你很难找到俯首听命

aabbcc456aa的专栏 1123

【逆强化学习-1】学徒学习(Apprenticeship Learning)

逆强化学习算法1:学徒学习。算法原理+算法步骤+代码+仿真:一个基于gym的小车上山的仿真。附赠学徒学习+Q-Table及学徒学习+DQN的全套代码。

体会编程语言独到的美 7492

078、镜头阴影校正:LSC算法原理与标定优化

文章摘要 镜头阴影校正(LSC)是手机影像系统中的关键技术,用于解决镜头渐晕效应导致的画面边缘暗角问题。本文详细分析了LSC算法的核心原理,包括非均匀网格划分、双线性插值等关键技术点,并揭示了标定流程中的常见陷阱(光源均匀性、灰卡反射特性、温度漂移)。文章还深入探讨了增益计算的工程实现细节,以及实际调优中的关键考量因素(色差校正、动态场景适应等)。作者结合15年经验,给出了包括验证方法、网格参数设计、产线标定等实用性建议,强调LSC算法应与光学设计协同优化,才能达到最佳效果。

sundong_81的博客 41

QoS中流量监管和流量整形详解

今天给大家介绍QoS中的两个重要概念——流量监管和流量整形。阅读本文,您需要有一定的QoS的基础,如果您对此还存在疑惑,欢迎查阅我博客的其他文章,相信您一定会有收获。 相关文章链接: 浅谈QoS——QoS概述、QoS基本原理、网络层QoS分类和标记字段详解、QoS中队列简介、QoS队列调度技术详解、QoS队列调度技术详解、QoS中拥塞避免机制详解——WRED技术详解、华为QoS中CBQ队列详解 一、概述 在计算机网路中,拥塞现象非常常见,如果不限制用户发送的业务流量,大量用户不断突发的业务数据就会使网络更加

永远是少年 2659

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 377

是否对网络流量的数据传输时间进行了分析和限制?

本文针对网络流量数据分析及限制在防火墙策略管理中的重要性展开讨论, 通过深入剖析相关问题并提出解决方案, 帮助管理员在网络空间中构建更为安全、稳定和高效的网络环境。

ZOMO的博客 467

QT实现OPCUA服务端客户端(附完整源码)

QT实现OPCUA服务端客户端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1818

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

浅谈PCDN流量盗刷原理与防御措施

大量的流量盗刷无异于DDoS攻击,短时的大流量下载可能会对平台网络造成不可用

WangsuSecurity的博客 1057

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

天下数据浅谈网站流量指标的构成

流量通常被我们理解为一个网站的用户数访问数量与浏览页面数量的一个指标。然而,对于虚拟主机空间来说,流量的定义则有所不同了。对于虚拟主机空间来说,流量是指:用户在访问网页时所产生的数据大小,有些虚拟主机提供商会对流量进行限制,当超过这个量时,该网站将无法访问,当然,天下数据所有的虚拟...

212

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

令牌桶算法和漏桶算法以及流量控制浅谈

​在双十一等大促环节,系统需要限流,外部需要在我制定的速率限制来调用(超出的流量直接挡掉,系统不进行处理),有没有理论依据呢?这里看了两个算法 约定访问速率是流量管理中比较常用的方法之一,令牌桶算法,是目前最常用的流量限制的方法。 ​ ​​什么是令牌桶算法? ​​令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Li...

久居深海,蓝透人心 1209

浅谈我对微信小程序云开发的认识与见解

浅谈我对微信小程序云开发的认识与见解一、微信小程序云开发的优点1.无需自建服务器2.项目快速上线3.轻轻松松获取用户凭证二、微信小程序云开发的坑1.基础版CDN流量太少2.云数据库限制多(1)小程序端读取限制(2)云数据库读写权限限制3.对外开放限制多三、我对小程序云开发总结 对于微信小程序云开发,我也算是入门吧,跳了很多坑,但也都从坑里爬了出来。通过写下这篇博客来总结一下我对小程序云开发的认识。...

FelixHsp的博客 2万+

浅谈带宽的含义

很多说不限制流量的主机,实际上是把端口限制成10M或5M,假如网站上有一些图片,限制了端口打开就会慢很多,但要是放在限制流量但是端口没有限制的地方,峰值可以跑好高,好的机房100M共享峰值可以跑50M-60M的,那样打开图片的速度就和限制端口的时候不是一个概念了。其实现在有很多客户的实际流量并不会很高,但对打开网站的时候速度要求比较高,这种情况就需要寻找那些不限制端口速度的主机,而不是使用不限制流量的主机。现在有很多主机不限制流量。这个看上去非常不错,而实际情况流量不等于带宽,不限制流量不代表不限制带宽,

2301_78491061的博客 172

浅谈Web的流量控制

想聊一聊流量控制,谈谈的重要性,解决了哪些业务问题,那我们问题来进入正题。 1、WEB容器如何流量控制? 一个Tomcat的容器,这个容器呢,部署在一台服务器上面,同时这台服务器的资源非常非常有限,这台服务器只能同时让500个请求访问,若是多余500个的话,这样服务器的资源就会打满,那么我们肯定需要想办法这些问题的。Tomcat本身就有这样的机制,因为每一个请求过来后,tomcat...

weixin_30488313的博客 513

浅谈企业微信公域到私域流量玩法

一、搭建私域流量池,高效引流客户 客户通过渠道活码添加员工,自动打标签,实时统计引流情况,发送个性化的欢迎语,第一时间送上问候。 二、将企业公域流量引流裂变为私域 生成引流裂变海报,通过老用户奖励式分享拉新,实现用户指数级增长,加强用户联系 引流外链,将微信外流量引流到微信内形成私域流量。支持公号、小程序推广,可在手机浏览器、短信邮件、知乎等平台中打开跳转到小程序内 三、多维度画像,SCRM管理,促进营销转化 标准化客户管理、标签管理,洞察客户意向;客户流失给...

zhimaxiaokefu的博客 754

存储服务器性能限制,浅谈分布式存储的性能限制模型

应该有一个方法论指导用户进行软件定义存储的容量选型。引用业界友人的观点,整体的角度看来,一个性能优异的软件定义存储,不在于它本身在各种高端的硬件条件下,表现出的强劲性能。而在于在合理搭配的一套硬件配置下,能挖掘出硬件自身的潜力,自上而下,打通“奇经八脉”,在软件和硬件的层面,尽量减少各种“瓶颈”和“死区”,以合理的成本满足应用的需求。相较于传统存储设备,SDS天生的优势在于通用化带来的灵活性和非锁...

weixin_39574720的博客 838

浅谈虚拟主机的各项指标和参数

目前很多中小站长主要使用的网站空间是虚拟主机,它具有优质成熟价廉等优点,我们常常看到一些文章,内容是如何帮助挑选适合的虚拟主机,但是今天小编就带大家认识虚拟主机的一些参数和各项指标。 我举个例子,拿国内十强主机商耐思尼克的虚拟主机来说,电信、网通双线接入,300M的w...

chiyizhangji6149的博客 247
上一篇: 浅谈分布式锁
下一篇: kubectl命令自动补齐
canger_
博客等级 码龄9年 46粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值