十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
网上有很多讲解限频原理以及限频原因的,限频常用在接口、服务的流量、并发上,主要是为了合理使用后端资源,防止后端被压垮,雪崩等等。
成都创新互联是一家专业提供鹤山企业网站建设,专注与网站设计制作、成都网站制作、H5开发、小程序制作等业务。10年已为鹤山众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
这里使用使用go的ring(环形队列)实现滑动窗口
另外起一个终端,用golang的boom来做压测。要提前安装boom工具
进行压测试:
查看其中数组可以知道每一秒此时滑动窗口的限频值,以及变化。
可以看出压测试服务在12.6秒进行了300次http请求其中有23次正确响应成功,限频测试ok
很多朋友可能知道Go语言的优势在哪,却不知道Go语言适合用于哪些地方。
1、 Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面。Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。
2、 其实Go语言主要用作服务器端开发。其定位是用来开发"大型软件"的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。
3、 Go语言成功案例。Nsq:Nsq是由Go语言开发的高性能、高可用消息队列系统,性能非常高,每天能处理数十亿条的消息;
4、 Docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。
5、 Packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者
6、 Skynet:分布式调度框架。
7、 Doozer:分布式同步工具,类似ZooKeeper。
8、 Heka:mazila开源的日志处理系统。
9、 Cbfs:couchbase开源的分布式文件系统。
10、 Tsuru:开源的PAAS平台,和SAE实现的功能一模一样。
11、 Groupcache:memcahe作者写的用于Google下载系统的缓存系统。
12、 God:类似redis的缓存系统,但是支持分布式和扩展性。
13、 Gor:网络流量抓包和重放工具。
以上的就是关于go语言能做什么的内容介绍了。
在做接口性能测试的时候也使用过几个工具:AB、Jmeter、Locust、Vegeta。
这几个工具中,应该当属Jmeter的功能最强大,使用的人也最多,但使用上也比较繁琐,如果测的接口比较单一,需要得到的值也就是并发量、每秒请求数、响应时间这三个的话,那就推荐使用个简单点儿的工具。在这儿主要介绍Locust,原因无非是使用简单,另外在web界面能实时显示性能测试情况,可以随时调整参数,也支持分布式。
使用Locust也需要编写脚本,对于不熟悉Python的人来说,又是一个障碍。为此笔者编写了一个工具 Easy-Locust ,Locust的几种使用方式都有,并且参数和Locust也保持一致,需要操作的就是在Excel中编辑好参数就行。
GitHub: Easy-Locust
执行下面命令会自动安装easy-locust及locustio=0.13.5的版本
此处只介绍和Locust不同的地方,如果想了解详细参数,请查阅: Locustio
一共4个sheet页,逐一进行介绍
除了可以从Header中获取token外还可以从json中获取,格式为 Json: body.token ,获取到的值会在调用接口时填充到header中,这个地方在Excel demo文件中无法配置,如果要改的话,可以生成locustfile文件,然后小改一下locustfile文件即可。
注意:需要指定 -d 参数才可生效;各压测机中需要提前安装好相同版本的locustio=0.13.5
如果希望使用多个用户信息随机进行压测则可以使用此功能。
这篇比较的文章比较不错,贴一下: 性能测试工具Locust和JMeter比较 ,文章中提到并发用户数那,jmeter和locust实现的机制不一样,所以测得的值也是有差别的,一般同样并发数下jmeter的每秒请求数更高一些。
Locust开启服务只占用一个进程,如果机器是多核的,则可以开启master-slave模式,开一个master,剩下几核就开启几个slave,充分利用机器性能。下图是在本地笔记本(虚拟4核)上执行的 普通模式 和 master-slave模式 的对比:
master-slave模式下RPS最高值达到了2600,最低值1300,大概稳定在1900左右。
下面是使用Jmeter的一个测试数据:
Throughput峰值达到了3000,最低值1900,后续稳定在2200左右,但出现了报错,不过服务端那并没有报错。
上面三张图对比,可以看出在单核机器上如果使用Jmeter和Locust的话测得的数据应该相差不大,多核机器上Locust需要使用master-slave模式才能达到Jmeter的性能。不过说到底,两者之间对并发用户数的实现是不同的,测得的数据必定有差值。
性能调优或测个粗指标的话,十八般工具都可以用,只要保证一直使用同一个工具测就行了。如果测精细指标的话,还得是工业级别的工具/测试仪来完成。
另外Locust + Boomer在相同并发数的情况下,RPS比Jmeter还要高,得益于Go语言天生的优势,可以直接使用Boomer示例中的client文件,获取编译好的文件及简单使用方法点击下面链接:
;sub=683B4DBECED3468CACFC386E51F8B33E
在 ci 过程中,经常有一些可以通过静态分析或者白盒检测去避免一些问题以及规范代码格式!使用Go语言一般是使用 golangci-line 作为代码检测工具!
参考官网:
安装: curl-sSfL | sh -s -- -b $(go env GOPATH)/bin v1.43.0
版本信息: golangci-lint--version
目前我司是自己二开的 golangci-line,所以这里使用的开源版本,其实大同小异,就是开发了一些插件!
这个就是一个工具,集成了各类自动检测代码的工具,所以不需要本地安装太多的工具,只需要这个工具即可!
由于它需要一个go的项目,这里以我自己的项目去介绍, 项目地址:,如果有同学想自己尝试下可以直接下载我这个项目!项目也比较规范!
其实执行 golangci-lint run-h 就可以获取以下帮助
例如我经常使用的: 我日常就是开启format功能!
1、默认使用的插件
2、默认没用的
3、presets 分类:
具体可以参考我的:
主要是做一些 无用代码检测,简化代码,格式化代码!然后执行 golangci-lint run --fix 即可
go语言抓包工具的网站:
1,sql2go网。
用于将 sql 语句转换为 golang 的 struct. 使用 ddl 语句即可。
例如对于创建表的语句: show create table xxx. 将输出的语句,直接粘贴进去就行。
2,toml2go网。
用于将编码后的 toml 文本转换问 golang 的 struct。
3,curl2go网。
用来将 curl 命令转化为具体的 golang 代码。
4,json2go网。
用于将 json 文本转换为 struct。
5,mysql 转 ES 工具网站。
模拟模板的工具,在支持泛型之前,可以考虑使用。7)查看某一个库的依赖情况,类似于 go list 功能。
GO语言简介:
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。
Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
当前有两个Go编译器分支,分别为官方编译器gc和gccgo。官方编译器在初期使用C写成,后用Go重写从而实现自举。Gccgo是一个使用标准GCC作为后端的Go编译器。
官方编译器支持跨平台编译(但不支持CGO),允许将源代码编译为可在目标系统、架构上执行的二进制文件。
可以去DELVE官网进行下载。
关于delve工具的介绍,这里简单给大家介绍一下。
delve在go项目及应用的开发中可以用来追踪程序中的异常代码,也可以通过打日志的方式追查问题,但是更重要也是非常厉害的一点,就是delve可以直接分析程序执行的情况。这一点在后期或线上的问题排查中无疑是提供了一个非常大的便捷。
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。
Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础。
采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
Delve常用命令
命令功能:
dlv attach后面跟 pid,用来Debug编译好的Golang程序。
dlv core用于 coredump。
dlv debug后面跟要调试的 go 文件,进入 Debug。
dlv testDebug test 函数。