源码
liyunlong41
你必须非常努力,才能看起来毫不费力。
展开
-
使用etcd实现动态分布式选主
日常开发中经常会有后台运行的worker类任务,由于服务是分布式的,我们可能会有多个分布式的worker同时在运行,有时候我们需要分布式下只有一个worker在运行,这时候就可以用到etcd的分布式选主。etcd中concurrency包下已经帮我们实现好了选主,我们只需要调用其api实现就可以了,下面我们分析下etcd是如何实现选主机制的。直接进行源码分析:// Campaign puts a value as eligible for the election on the prefix原创 2020-07-27 20:07:15 · 5337 阅读 · 0 评论 -
Kubernetes Controller Manager原理浅析
controller manager是什么?Controller Manager 是集群内部的管理控制中心,负责统一管理与运行不同的 Controller ,实现对集群内的 Node、Pod 等所有资源的管理。比如当通过 Deployment 创建的某个 Pod 发生异常退出时,RS Controller 便会接受并处理该退出事件,并创建新的 Pod 来维持预期副本数。contro...原创 2020-05-08 14:39:42 · 2304 阅读 · 0 评论 -
golang sync.Mutex锁如何实现goroutine的阻塞与唤醒初探
var mu = new(sync.Mutex)func test() { mu.Lock() defer mu.Unlock() ...}这是一段mutex的加锁解锁代码,当多线程同时执行这段代码时,能保证我们临界区的代码是顺序执行的。新来的goroutine可能直接获取到锁,也可能被阻塞,这里探究一下goroutine是如何被阻塞和唤醒的。由于mutex实现复杂,牵扯知识很多,我...原创 2020-03-19 17:20:54 · 2778 阅读 · 1 评论 -
golang echo web框架中间件的实现
使用echo框架可以方便的定义自己的中间件,这里研究下echo中间件的实现以及是如何实现链式调用的。比如我们有下面的中间件:func CalHandleTime(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) (err error) { start := time.Now() defer fu...原创 2020-01-19 18:09:05 · 2443 阅读 · 1 评论 -
grpc负载均衡RoundRobin源码解读
grpc client端创建连接时可以用WithBalancer来指定负载均衡组件,这里研究下grpc自带的RoundRobin(轮询调度)的实现。源码在google.golang.org/grpc/balancer.go中。roundRobin结构体定义如下:type roundRobin struct { r naming.Resolver w naming.Wat...原创 2019-12-26 23:36:54 · 2191 阅读 · 0 评论