深度思维者

永远年轻,永远热泪盈眶

09 2021 档案

摘要:1.前言 虽然在 go 中,并发编程十分简单, 只需要使用 go func() 就能启动一个 goroutine 去做一些事情,但是正是由于这种简单我们要十分当心,不然很容易出现一些莫名其妙的 bug 或者是你的服务由于不知名的原因就重启了。 而最常见的bug是关于线程安全方面的问题,比如对同一个m 阅读全文
posted @ 2021-09-26 08:16 failymao 阅读(678) 评论(0) 推荐(0) 编辑
摘要:1. 前言 GMP调度应该是被面试的时候问的频率最高的问题! 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代” 一切的程序只能串行发生。 1.1 Goroutine 调度器的 阅读全文
posted @ 2021-09-22 08:10 failymao 阅读(860) 评论(0) 推荐(1) 编辑
摘要:1. 忽略某个字段 格式 // 使用json tag指定json序列化与反序列化时的行为 type Person struct { Name string `json:"name"` // 指定json序列化/反序列化时使用小写name Age int64 Weight float64 `json: 阅读全文
posted @ 2021-09-16 09:51 failymao 阅读(4748) 评论(0) 推荐(2) 编辑
摘要:1. 对创建的gorouting负责 1.1 不要创建一个你不知道何时退出的 goroutine 下面的代码有什么问题? 是不是在我们的程序种经常写类似的代码? // Week03/blog/01/01.go package main import ( "log" "net/http" _ "net 阅读全文
posted @ 2021-09-14 23:41 failymao 阅读(4735) 评论(4) 推荐(6) 编辑
摘要:1. 限流对比 类型 实现 优点 缺点 单机限流 令牌桶 1. 稳定可靠,实现简单,性能高2. 支持突发流量应对 1. 流量不均匀会导致误限制2. 阈值设置较为困难,需要提前压测 漏桶 1. 稳定可靠,实现简单,性能高 1. 流量不均匀会导致误限制2. 阈值设置较为困难,需要提前压测3.不支持突发流 阅读全文
posted @ 2021-09-10 07:58 failymao 阅读(248) 评论(0) 推荐(0) 编辑
摘要:1. 前言 无论是令牌桶, 漏桶 还是 自适应限流的方法,总的来说都是服务端的单机限流方式。虽然服务端限流虽然可以帮助我们抗住一定的压力,但是拒绝请求毕竟还是有成本的。如果我们的本来流量可以支撑 1w rps,加了限流可以支撑在 10w rps 的情况下仍然可以提供 1w rps 的有效请求,但是流 阅读全文
posted @ 2021-09-09 00:10 failymao 阅读(772) 评论(0) 推荐(0) 编辑
摘要:1. 前言 令牌桶与 漏桶 两种算法最大的一个问题就是他们都属于需要提前设置阈值的算法,基于 QPS 进行限流的时候最麻烦的就是这个阈值应该怎么设定。一般来说我们可以通过压测来决定这个阈值。但是也会存在问题 如果每个系统上线前都要经过很严格的压测,那么成本相对来说会比较大 很多时候压测都会在测试环境 阅读全文
posted @ 2021-09-06 07:56 failymao 阅读(884) 评论(0) 推荐(0) 编辑
摘要:1.序 除开前面章节讲到的令牌桶算法实现的网络限流外, 还有另外一种常见的限流算法, 漏桶算法 2. 漏桶算法 漏桶算法(Leaky Bucket) 是网络世界中 流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络 阅读全文
posted @ 2021-09-05 00:23 failymao 阅读(1470) 评论(0) 推荐(0) 编辑
摘要:1. 前言 在上一篇文章 Go微服务: 令牌桶 当中简单的介绍了令牌桶实现的原理,然后利用 /x/time/rate 这个库 10 行代码写了一个基于 ip 的 gin 限流中间件,那这个功能是怎么实现的呢?接下来我们就从源码层面来了解一下这个库的实现。这个实现很有意思,并没有真正的使用一个定时器不 阅读全文
posted @ 2021-09-03 07:32 failymao 阅读(840) 评论(0) 推荐(0) 编辑
摘要:1. 令牌桶 1.1 原理 我们以 r/s 的速度向桶内放置令牌,桶的容量为 b , 如果桶满了令牌将会丢弃 当请求到达时,我们向桶内获取令牌,如果令牌足够,我们就通过转发请求 如果桶内的令牌数量不够,那么这个请求会被缓存等待令牌足够时转发,或者是被直接丢弃掉 由于桶的存在,所以令牌桶算法不仅可以限 阅读全文
posted @ 2021-09-01 07:57 failymao 阅读(1110) 评论(0) 推荐(0) 编辑