本文目录一览:
- 1、求助,安装golang环境后运行报错
- 2、一起使用GO(golang) 来做一个后台管理系统系列10 使用mod 来管理包
- 3、限流器系列(3)--自适应限流
- 4、Golang入门到项目实战 | golang简介及安装
- 5、Golang中的限速器 time/rate
求助,安装golang环境后运行报错
下载WebStorm 10
安装WebStorm
Windows请参考Win版的安装方式
下载Golang Plugin(最新版本是201)
为WebStorm安装Go Plugin
启动WebStorm(如果你更改了一些默认配置会提示重启)
安装下载好的Golang Plugin
Configure - Plugins
从本地磁盘选择下载好的Go Plugin,安装后重启WebStorm
创建一个Golang项目
选择Empty Project,选择好Golang项目的文件目录,点击Create
创建一个Go文件main.go
设置Golang SDK,并在main.go里编写你的Golang代码
配置Golang运行环境
点击右上角的向下三角形按钮,在弹出窗口点击加号新增一个Go Application
在File项选择我们刚才的main.go文件(请注意提示,记得把文件的包名改为main才可以运行)
点击右上角的绿色三角形运行
到此配置完毕,enjoy coding!
一起使用GO(golang) 来做一个后台管理系统系列10 使用mod 来管理包
原项目采用gopath来管理的引用库,但有小伙伴反应说包不好下,虽然我把对应的包做了百度云盘共享,但小伙伴们仍然感觉不太好用。特别是最近把go SDK升级到1.18.在管理包上终于下决心使用mod来重新重构下包管理。
一、配置启用Mod
首先那:
确定是否开启了
如果没有开启请开启它。开启命令执行:
#设置 使用七牛云下载
来看下现在的配置:
二、创建项目
上边都说了如何开启了。下面介绍下如何使用
1. 可以随便找一个目录创建项目:myGoProjectNew
这个时候查看目录下会多出一个go.mod的文件:
里面也有了。标识了下SDK的版本1.18
2. 创建 main.go文件
3. 执行:
这时候就会自动下载引用了。
查看Go.mod文件
最后放两张效果图:
感觉还可以得点赞收藏哦。想要源码的私信我获取源码。
限流器系列(3)--自适应限流
漏斗桶/令牌桶确实能够保护系统不被拖垮, 但不管漏斗桶还是令牌桶, 其防护思路都是设定一个指标, 当超过该指标后就阻止或减少流量的继续进入,当系统负载降低到某一水平后则恢复流量的进入。但其通常都是被动的,其实际效果取决于限流阈值设置是否合理,但往往设置合理不是一件容易的事情.
项目日常维护中, 经常能够看到某某同学在群里说:xx系统429了, 然后经过一番查找后发现是一波突然的活动流量, 只能申请再新增几台机器. 过了几天 OP 发现该集群的流量达不到预期又下掉了几台机器, 然后又开始一轮新的循环.
这里先不讨论集群自动伸缩的问题. 这里提出一些问题
这些其实都是采用漏斗桶/令牌桶的缺点, 总体来说就是太被动, 不能快速适应流量变化
对于自适应限流来说, 一般都是结合系统的 Load、CPU 使用率以及应用的入口 QPS、平均响应时间和并发量等几个维度的监控指标,通过自适应的流控策略, 让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
比较出名的自适应限流的实现是 Alibaba Sentinel. 不过由于提前没有发现 Sentinel 有个 golang 版本的实现, 本篇文章就以 Kratos 的 BBR 实现探讨自适应限流的原理.
借鉴了 Sentinel 项目的自适应限流系统, 通过综合分析服务的 cpu 使用率、请求成功的 qps 和请求成功的 rt 来做自适应限流保护。
cpu 800 AND (Now - PrevDrop) 1s AND (MaxPass * MinRt * windows / 1000) InFlight
使用方式
该函数是核心函数. 其计算公式: MaxPass * MinRt * windows / 1000. maxPASS/minRT都是基于 metric.RollingCounter 来实现的, 限于篇幅原因这里就不再具体看其实现(想看的可以去看rolling_counter_test.go还是蛮容易理解的)
Golang入门到项目实战 | golang简介及安装
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
go语言特点
go语言的应用领域
哪些公司(项目)在使用go语言
下载开发包
windows下安装
1.打开下载的msi可执行文件,根据提示进行安装。默认会安装在c:/Program Files/go目录下面。会自动添加go可执行文件环境变量。
2.验证安装情况
a.打开命令行
b. 输入$ go version
linux下安装
1.在/usr/local/下面创建一个目录go
2.下载压缩文件到该目录(/usr/local/go),并解压缩
3.添加/usr/local/go/bin到PATH环境变量,打开$HOME/.profile 或者/etc/profile输入如下内容:
4.执行如下命令使得配置文件及时生效
验证
1.如果你的mac有Homebrew包管理工具,可以使用它来安装
2.如果没有下载mac安装包,根据提示安装
3.默认安装在/usr/local/go下面
4.设置环境变量,同Linux
Golang中的限速器 time/rate
在高并发的系统中,限流已作为必不可少的功能,而常见的限流算法有:计数器、滑动窗口、令牌桶、漏斗(漏桶)。其中滑动窗口算法、令牌桶和漏斗算法应用最为广泛。
这里不再对计数器算法和滑动窗口作介绍了,有兴趣的同学可以参考其它相关文章。
非常很好理解,就像有一个漏斗容器一样,漏斗上面一直往容器里倒水(请求),漏斗下方以 固定速率 一直流出(消费)。如果漏斗容器满的情况下,再倒入的水就会溢出,此时表示新的请求将被丢弃。可以看到这种算法在应对大的突发流量时,会造成部分请求弃用丢失。
可以看出漏斗算法能强行限制数据的传输速率。
令牌桶算法
从某种意义上来说,令牌算法是对漏斗算法的一种改进。对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发情况。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。
令牌桶算法是指一个固定大小的桶,可以存放的令牌的最大个数也是固定的。此算法以一种 固定速率 不断的往桶中存放令牌,而每次请求调用前必须先从桶中获取令牌才可以。否则进行拒绝或等待,直到获取到有效令牌为止。如果桶内的令牌数量已达到桶的最大允许上限的话,则丢弃令牌。
Golang标准库中的限制算法是基于令牌桶算法(Token Bucket) 实现的,库名为golang.org/x/time/rate
对于限流器的消费方式有三种,分别为 Allow()、 Wait()和 Reserve()。前两种内部调用的都是Reserve() ,每个都对应一个XXXN()的方法。如Allow()是AllowN(t, 1)的简写方式。
主要用来限速控制并发事件,采用令牌池算法实现。
使用 NewLimiter(r Limit, b int) 函数创建限速器,令牌桶容量为b。初始化状态下桶是满的,即桶里装有b 个令牌,以后再以每秒往里面填充 r 个令牌。
允许声明容量为0的限速器,此时将会拒绝所有操作。
// As a special case, if r == Inf (the infinite rate), b is ignored.
有一种特殊情况,就是 r == Inf 时,此时b参数将被忽略。
Limiter 提供了三个主要函数 Allow, Reserve, 和 Wait. 大部分时候使用Wait。其中 AllowN, ReserveN 和 WaitN 允许消费n个令牌。
每个方法都可以消费一个令牌,当没有可用令牌时,三个方法的处理方式不一样
AllowN方法表示,截止在某一时刻,目前桶中数目是否至少为n个。如果条件满足,则从桶中消费n个token,同时返回true。反之不消费Token,返回false。
使用场景:一般用在如果请求速率过快,直接拒绝请求的情况
输出
当使用Wait方法消费Token时,如果此时桶内Token数量不足(小于N),那么Wait方法将会阻塞一段时间,直至Token满足条件。否则直接返回。
// 可以看到Wait方法有一个context参数。我们可以设置context的Deadline或者Timeout,来决定此次Wait的最长时间。
输出
// 此方法有一点复杂,它返回的是一个*Reservation类型,后续操作主要针对的全是这个类型
// 判断限制器是否能够在指定时间提供指定N个请求令牌。
// 如果Reservation.OK()为true,则表示需要等待一段时间才可以提供,其中Reservation.Delay()返回需要的延时时间。
// 如果Reservation.OK()为false,则Delay返回InfDuration, 此时不想等待的话,可以调用 Cancel()取消此次操作并归还使用的token
输出