之前写了Go语言协程池的实践以及动态QPS的实现,本来计划就是开始做一些测试了,但是发现协程池的实现有些问题也有一些BUG,所以连夜修改了部分功能。...
我们继续在文件 server/etcdserver/server.go 中分析EtcdServer的初始化流程,它会先调用bootstrap函数初始化后端存储bolt-db然后初始化raftNode,最后初始化transport,调用start开始raft协议的网络传输。具体实现如下...
我们在之前的文章中介绍过标准库 log 包的使用方式,它虽然使用方便,但是它支持的功能比较简单。
下面我们来到更底一层,分别分析下pipeline和stream的实现,pipeline通过固定数量的goroutine 来分发处理消息:
前面提到transport将远程对象分为两类:remote和peer,分别代表新建立的连接和已经加入集群的节点,下面简单分析下它们的核心逻辑:
在分析完核心数据结构后,我们结合使用boltdb的核心过程了解下上述数据结构建立的过程,总结下来核心过程如下:
介绍完github.com/golang/groupcache如何使用和基本原理后,我们来分析下它的源码。初始化的代码位于groupcache.go
github.com/patrickmn/go-cache是知名golang local cache实现里面最简单的一种,可以理解为就是简单的map加锁实现的,它通过定时器来进行过期key的淘汰,并且利用runtime.SetFinalizer(C, stopJanitor)来停止我们的过期key...
做单元测试的时候,我们需要打桩mock掉一些中间件,miniredis是mock掉redis的一个利器它既可以通过非网络本地mock,也可通过tcp请求,经过redis协议完整mockredis代码,首先看下如何使用:...
https://github.com/jarcoal/httpmock是一个mock http请求包,他的原理是使用MockTransport替换http包client的Transport RoundTripper,并注册请求对应的返回值。当http请求发出的时候,被mock的Transport拦截,通......