摘要:
VictoriaMetrics的高可用 前言 VictoriaMetrics是一个快速、高效和可扩展的时序数据库,可作为Prometheus的长期存储。查询promsql,使用grafana看图时,可以直接用VictoriaMetrics源替换掉prometheus源。 架构 这里介绍集群版本的架构 阅读全文
摘要:
内存对齐的概念 为了减少cpu的访存次数,提高cpu的吞吐量,cpu并不会逐个字节的访问内存,而是以机器字/字长(word size)为单位访问。比如 64 位架构的 CPU ,字长为 8 字节(8B),那么 CPU 访问内存的单位也是 8 字节。但是,如果被访问的数据在内存中的起始地址不是字长的倍 阅读全文
摘要:
前言 select 是操作系统中的系统调用,我们经常会使用 select、poll 和 epoll 等函数构建 I/O 多路复用模型提升程序的性能。Go 语言的 select 与操作系统中的 select 比较相似,但也有不同点,它只支持channel收发的多路复用。 这里已go1.19版本为例,编 阅读全文
摘要:
数据结构 位于sync/mutex.go type Mutex struct { state int32 sema uint32 } state locked:锁的状态,是否已经上锁 woken:表示是否有协程被唤醒,0表示没有协程被唤醒,1表示有协程被唤醒 starving:是否处于饥饿模式 wa 阅读全文
摘要:
背景 informer是k8s client-go包里的一个模块,客户端可以通过它来感知事件的变化,而不用直接和apiserver交互,这样减轻了apiserver的负担。 组件介绍 它由以下几个组件组成: Reflector: 它会采用list/watch的方式获取资源事件,并把它们写入到fifo 阅读全文
摘要:
1. 为什么需要service Pod是非永久性资源,会动态创建和销毁,pod的ip会变化,而service会动态感知pod的变化,而对调用方无感知,调用方只需要访问固定的service name就可以动态地访问后端的pod。 实现这个功能不单只靠service这个组件,还需要kube-dns、en 阅读全文
摘要:
前言 先上结论: liveness探针检测失败后,pod会被终止或重启(依据重启策略),而readiness探针检测失败后,pod不会终止,但ready状态为0 测试 liveness 清单文件 liveness-exec-pod.yaml : apiVersion: v1 kind: Pod me 阅读全文
摘要:
前言 分布式锁要解决两个问题: 1、锁竞争 2、死锁 以redis为例,redis提供了setnx来保证原子写入,只有一个客户端能写入成功,也就能成功获得锁。同时为了防止客户端异常导致锁没有及时释放,可以对这个锁设置过期s时间,命令如下: SET lock_name my_random_value 阅读全文
摘要:
前言 Etcd是一个强一致性的分布式架构,即CP,所有请求必须经过leader节点,先由leader节点向follower节点发送日志同步消息,经过二阶段提交最终将数据应用到状态机。因此集群在初始化时必须有个选主的过程。 Etcd节点有以下三种角色: Follower 集群初始化时,都是follow 阅读全文
摘要:
前言 我们在做CI/CD时,最常用的做法就是使用Jenkins或gitlab的流水线的功能,先由运维写好流水线脚本,然后人工执行或由平台调用流水线接口去执行。 发布进度展示 以Gitlab为例,它的后台后流水线发布进度如下图所示: 流水线是由多个Stage组成,而每个Stage下又可以有多个Job, 阅读全文