2020年4月2日

python分布式环境下的限流器

摘要: 项目中用到了限流,受限于一些实现方式上的东西,手撕了一个简单的服务端限流器。 服务端限流和客户端限流的区别,简单来说就是: 1)服务端限流 对接口请求进行限流,限制的是单位时间内请求的数量,目的是通过有损来换取高可用。 例如我们的场景是,有一个服务接收请求,处理之后,将数据bulk到Elastics 阅读全文

posted @ 2020-04-02 20:04 ExplorerMan 阅读(367) 评论(0) 推荐(0)

python redis lua 脚本 实战一个限流或抢红包等业务

摘要: 知识点 1.lua是什么 2.redis,lua,python(java)三者的关系 3.用lua承载业务逻辑 为何加入一个lua脚本 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无 阅读全文

posted @ 2020-04-02 20:00 ExplorerMan 阅读(834) 评论(0) 推荐(0)

利用redis-lua+python实现接口限流

摘要: 公司目前在市面上有大量的机器在运转。每天对接到服务器就有数百万的请求过来,无形中消耗了带宽和计算资源。可以通过一定的策略来过滤掉部分请求,保证服务器的稳定。 扩展阅读: 1.当然这层逻辑既可以落到接入层,也可以落到业务层。这里为了不影响线上其它业务,保证系统的稳定和代码可追溯。也方便实行最小验证,我 阅读全文

posted @ 2020-04-02 19:58 ExplorerMan 阅读(644) 评论(0) 推荐(0)

python分布式环境下的限流器

摘要: 项目中用到了限流,受限于一些实现方式上的东西,手撕了一个简单的服务端限流器。 服务端限流和客户端限流的区别,简单来说就是: 1)服务端限流 对接口请求进行限流,限制的是单位时间内请求的数量,目的是通过有损来换取高可用。 例如我们的场景是,有一个服务接收请求,处理之后,将数据bulk到Elastics 阅读全文

posted @ 2020-04-02 19:57 ExplorerMan 阅读(321) 评论(0) 推荐(0)

golang 函数作为参数传递(回调)

摘要: 和其他很多语言一样,golang中函数也可以作为其它函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调。 语法:以函数签名作为主调函数的形参的类型,即传递一个指向函数的指针 func main() { sayhello("john", addperfix)} func addperfix( 阅读全文

posted @ 2020-04-02 18:31 ExplorerMan 阅读(2211) 评论(0) 推荐(0)

go 单向通道

摘要: func GetCha(cha <-chan int) { //这里参数用了一个单向通道 只允许接收 for{ if v,ok := <-cha; ok{ fmt.Println(v) } } //cha <- 2 这里会发生编译错误 } func main() { cha := make(chan 阅读全文

posted @ 2020-04-02 18:30 ExplorerMan 阅读(266) 评论(0) 推荐(0)

go channel select如何屏蔽已关闭通道

摘要: go channel select如何屏蔽已关闭通道(如果不屏蔽的话,select 一直会处于选择状态) func main() { channel := make(chan int ,20) selectChannel(channel) getChannel(channel) time.Sleep 阅读全文

posted @ 2020-04-02 18:29 ExplorerMan 阅读(658) 评论(0) 推荐(0)

go err

摘要: golang自定义err方案很多 // Errno 代表某种错误的类型 type Errno int func (e Errno) Error() string { return "errno " + strconv.Itoa(int(e)) } func main(){ // 示例3。 const 阅读全文

posted @ 2020-04-02 18:27 ExplorerMan 阅读(229) 评论(0) 推荐(0)

golang 做了个mutex与atomic性能测试

摘要: func BenchmarkMutex(b *testing.B) { var number int lock := sync.Mutex{} for i:=0; i< b.N;i++{ go func() { defer lock.Unlock() lock.Lock() number++ }() 阅读全文

posted @ 2020-04-02 18:24 ExplorerMan 阅读(622) 评论(0) 推荐(0)

Go语言中的条件变量

摘要: Go语言sync package提供了条件变量(condition variable)类型: type Cond struct { // L is held while observing or changing the condition L Locker // contains filtered 阅读全文

posted @ 2020-04-02 18:21 ExplorerMan 阅读(247) 评论(0) 推荐(0)

golang 百万级请求

摘要: 我在不同公司从事反爬虫、反病毒、反恶意程序已经有15年了,我知道,由于每天需要处理和应对的大量数据,这些系统最终会因此变得十分复杂。 目前我是smsjunk.com的CEO以及KnowBe4的首席架构师,两家公司都是活跃与网络安全行业。 有趣的是在过去10年作为一名软件工程师,几乎所有我参与的后端开 阅读全文

posted @ 2020-04-02 18:16 ExplorerMan 阅读(583) 评论(0) 推荐(0)

golang strings.NewReader

摘要: 为什么说strings.Reader类型的值可以高效地读取字符串 与strings.Builder类型恰恰相反,strings.Reader类型是为了高效读取字符串而存在的。后者的高效主要体现在它对字符串的读取机制上,它封装了很多用于在string值上读取内容的最佳实践。 strings.Reade 阅读全文

posted @ 2020-04-02 18:07 ExplorerMan 阅读(971) 评论(0) 推荐(0)

golang strings.Builder

摘要: strings.Builder类型的值(以下简称Builder值)的优势有下面的三种: 已存在的内容不可变,但可以拼接更多的内容; 减少了内存分配和内容拷贝的次数; 可将内容重置,可重用值。 先来说说string类型。 我们都知道,在 Go 语言中,string类型的值是不可变的。 如果我们想获得一 阅读全文

posted @ 2020-04-02 18:06 ExplorerMan 阅读(3069) 评论(0) 推荐(0)

go modules 问题 proxy

摘要: 阅读全文

posted @ 2020-04-02 18:03 ExplorerMan 阅读(161) 评论(0) 推荐(0)

Golang 服务优雅重启

摘要: 很多时候对于服务升级的做法简单粗暴, 就简单的杀进程启动新的进程. 还有的好一点就是多个相同的服务依次升级, 保证有服务可用. 但是公平的说这两种都会丢失请求中的连接. 鉴于这种情况, 在现实中我们可以使用优雅重启来搞定这个问题. Golang 实现优雅重启的原理也很简单: 监听 USR2 信号; 阅读全文

posted @ 2020-04-02 18:02 ExplorerMan 阅读(708) 评论(0) 推荐(0)

golang服务开发平滑升级之优雅重启

摘要: 转载不错的文档 经典平滑升级方案 服务器开发运维中,平滑升级是一个老生常谈的话题。拿一个http server来说,最常见的方案就是在http server前面加挂一个lvs负载,通过健康检查接口决定负载的导入与摘除。具体来说就是http server 提供一个/status 接口,服务器返回一个s 阅读全文

posted @ 2020-04-02 18:00 ExplorerMan 阅读(573) 评论(0) 推荐(0)

Golang实现请求限流的几种办法

摘要: 简单的并发控制 利用 channel 的缓冲设定,我们就可以来实现并发的限制。我们只要在执行并发的同时,往一个带有缓冲的 channel 里写入点东西(随便写啥,内容不重要)。让并发的 goroutine在执行完成后把这个 channel 里的东西给读走。这样整个并发的数量就讲控制在这个 chann 阅读全文

posted @ 2020-04-02 17:52 ExplorerMan 阅读(684) 评论(0) 推荐(0)

Golang限流器time/rate使用介绍

摘要: 本主题为系列文章,分上下两篇。本文主要介绍time/rate的具体使用方法,另外一篇文章《Golang限流器time/rate实现剖析》则着重介绍其内部实现原理。 限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。限流器的实现方法有很多种,例如滑动窗口法、Token 阅读全文

posted @ 2020-04-02 17:50 ExplorerMan 阅读(331) 评论(0) 推荐(0)

flask-限流器

摘要: 安装 pip install flask-limite 使用 组件的第二种初始化⽅方式 flask-limiter也可以⽣生成⽇日志, ⽇日志器器名称为 flask-limiter 阅读全文

posted @ 2020-04-02 17:40 ExplorerMan 阅读(470) 评论(0) 推荐(0)

django中限流Throttling

摘要: 目的:可以对接口访问的频次进行限制,减少服务器压力 使用: 可以进行全局配置 REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'rest_framework.throttling.AnonRateThrottle', # 未登录用户 'rest_fr 阅读全文

posted @ 2020-04-02 17:37 ExplorerMan 阅读(376) 评论(0) 推荐(0)

导航