Channel使用与实现 背景channel之前使用的不多,虽然也看过源码和一些使用案例,但是在使用中还是会犯错。这里简单记录下channel使用和一些源码实现。 使用Go中经常提到的一句话就是不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。也就是使用CSP并发模型。Goroutine之间使用channel传递。 例子1 通过channel传递信息先来理解一下CSP模型,这里设置两个Goroutine,分 2024-03-13 #Go
redis主从模式 背景redis Replication 在redis作为缓存的时候,用户访问应用,应用会先从redis中读取信息,如果没有再从mysql中读取。但是当redis失效的时候,应用流量会直接打到mysql,对mysql造成压力。为了保证redis的可靠性,就需要添加redis实例。也就是主从模式。 redis在4.0版本提供了主从模式,在主从模式中master和slave采取读写分离的模式,为了保证一 2024-03-12 #redis
etcd源码编译与调试 背景K8S元数据存储在etcd中,所以etcd是非常重要的一环,之前有过几次etcd出现故障导致集群不可用,所以打算重头学下etcd。 编译我的环境是WSL2上的Ubuntu,整体编译过程和Linux上大差不差,要注意的是文件格式问题: 123$ git clone -b v3.5.11 https://github.com/etcd-io/etcd.git #选择etcd版本源码$ cd etc 2024-03-12 #etcd
Go语言设计摘要 背景写Go第三年了,但是Go相关的官方文档并没有看过,这篇文章主要是参考了Go FAQ,对其中有意思的部分进行记录。 设计运行时(Runtime)Runtime是Go的核心,主要实现了三个方面: 垃圾收集 并发 内存管理(堆栈管理) Runtime有点类似于C中的libc。不过Runtime并没有像JVM的虚拟机,它是根据不同的体系结构和操作系统来编译可执行目标。 泛型(generic typ 2024-03-07 #Go
使用GitHub Actions与ArgoCD搭建CICD流水线平台 背景之前断断续续接触过CICD这些概念,但是使用的不多,并且相关概念比较模糊,这里通过GitHub Actions和Argo CD打造一个CICD平台,来熟悉相关概念和流程。 CI(Continuous Integration) 持续集成平时完成一个需求的时候,一般会做一些测试,比如单元测试,e2e测试等等,完成这些测试之后再去提交代码到不同的分支。之后等待其他人来review代码在合并。 从静 2024-03-04 #devops
kubernetes编程笔记 控制循环(Controller) 通常使用事件驱动模式(watch使用),来读取资源状态。 改变集群状态或者集群外部系统状态。 通过API Server组件来更新第一部中修改的状态,资源状态存放在etcd中。 2024-02-22 #kubernetes
协程实现原理-前置知识 背景协程在1958年被Melvin Conway提出,想要为 COBOL 高级编程语言去实现一个 one-pass 的编译器。比当时进程, 线程的概念还要早一步诞生。不过当时并没有流行起来,因为不符合当时(一直持续到 1990 年代)以C语言为代表的命令式编程语言自顶向下设计思想。但是随着互联网发展,服务器对于高并发要求越来越高,出现C10K,C100K,C10M等问题。协程也就重新回归视野。 进 2024-02-22 #Go