Go channel 原理

作用 Go 语言的 channel 是一种 goroutine 之间的通信方式,它可以用来传递数据,也可以用来同步 goroutine 的执行。 chan 是 goroutine 之间的通信桥梁,可以安全地在多个 goroutine 中共享数据。 使用 chan 实现 goroutine 之间的协作 …

Go 垃圾回收原理

*** Go 代码基于 v1.23.0 *** 介绍 golang GC 垃圾回收机制 触发条件 用户调用 runtime.GC 主动触发 Go 程序检测到距上次 GC 内存分配增长超过一定比例时(默认 100%)触发 定时触发 (默认 2 min) 定时触发 代码在 …

go 内存管理

操作系统内存管理 操作系统管理内存的存储单元是页(page),在 linux 中一般是 4KB。而且,操作系统还会使用 虚拟内存 来管理内存,在用户程序中,我们看到的内存是不是真实的内存,而是虚拟内存。当访问或者修改内存的时候,操作系统会将虚拟内存映射到真实的内存中。申请内存的组件是 Page …

从源码分析 GMP 调度原理

本身涉及到的 go 代码 都是基于 go 1.23.0 版本 传统 OS 线程 线程是 CPU 的最小调度单位,CPU 通过不断切换线程来实现多任务的并发。这会引发一些问题(对于用户角度): 线程的创建和销毁等是昂贵的,因为要不断在用户空间和内核空间切换。 线程的调度是由操作系统负责的,用户无法控制 …

kube-apiserver 高可用,keepalived + haproxy

为什么要做高可用 在生产环境中,kubernetes 集群中会多多个 master 节点,每个 master 节点上都会部署 kube-apiserver 服务,实现高可用。但是 client 访问 kube-apiserver 时,需要指定 ip 或者域名,这样会出现单点故障。官方推荐的做法是使用 …

boltdb 原理

简介 介绍及简单使用:https://www.cnblogs.com/daemon365/p/17690167.html 源码地址:https://github.com/etcd-io/bbolt page 因为 boltdb 是要落盘的,所以就要操作文件。为了提高效率,boltdb 会和其他数据库 …

etcd watch 实现原理

介绍 在 etcd 中,watch 是一个非常重要的特性,它可以让客户端监控 etcd 中的 key 或者一组 key,当 key 发生变化时,etcd 会通知客户端。本文将介绍 etcd watch 的实现原理。 etcdctl watch /test # 当 /test 的值发生变化时,会输出如 …

etcd MVCC 存储结构及流程

什么是 MVCC MVCC 是 Multi-Version Concurrency Control 的缩写,即多版本并发控制。它是一种并发控制的方法,用于在数据库系统中实现事务的隔离性。MVCC 是一种乐观锁机制,它通过保存数据的多个版本来实现事务的隔禽性。在 etcd 中,MVCC 是用于实现数据 …

istio sidecar 工作方式

istio 是什么 Istio 是一个开放源代码的服务网格,它为基于微服务的应用程序提供了一种统一的方式来连接、保护、监控和管理服务。Istio 主要解决的是在微服务架构中的服务间通信的复杂性问题,它通过提供服务间的负载均衡、服务到服务的认证、监控以及服务的弹性(例如重试、熔断等)来实现。 …

docker containerd runc containerd-shim等组件的关系

早期 kubelet 创建容器工作原理 因为 docker 出生的比 k8s 早,所以 k8s 早期的容器运行时都是基于 docker 的,kubelet 通过 docker 的 api 创建容器。后来,k8s 官方不想绑死在 docker 这架马车上,就把容器运行时抽象出来,定义了一个接口,叫 …