熊喵君的博客

Thinking will not overcome fear but action will.

重拾 Linux 网络(一):iptables

如何利用 iptables 构建透明代理

0x00 前言 最新笔者在研究全流量代理,本文回顾一下 iptables 的原理,先回顾下 netfilter/iptables 的基础概念: iptables 可以参考下面若干文章: IPtables,文章合集,非常全面了 重温 iptables Netfilter 模块,在网络层的五个位置(也就是 iptables 四表五链中的五链)注册了一些钩子函数,用来截取数据...

Kubernetes 应用改造(九):CRD 入门

CRD 的基础,如何入门编写一个 CRD

0x00 前言 几个概念: CRD(Custom Resource Definition): Controller: 0x0 参考 Kubernetes 自定义控制器 Demo 例子 Kubernetes CRD 开发实践 如何从零开始编写一个 Kubernetes CRD CRD 就像 Kubernetes 中的一张表 KUBERNETES CR...

helm 入门与应用:Kubernetes 包管理器

使用 helm 部署 kubernetes 应用(helm V3)

0x00 前言 Helm 是 Kubernetes 的包管理工具,类似于 Linux 下的包管理工具如 yum 等。通过 helm 可以将打包好的 yaml 文件部署到 Kunernetes 集群 Helm 的应用场景 将所有的 yaml 文件(deployment、Service、Ingress 等等)进行整体的管理,实现 yaml 文件的高效复用。这里的高效复用是指 yaml 文件...

Sync.Pool 应用与分析(续)

Golang sync.Pool 源码分析

0x00 前言 前文 Golang 中的 sync.Pool 使用 介绍了 sync.Pool 的使用及若干细节。 sync.Pool 是并发安全且可伸缩的,常用于存放可复用的对象的一个容器,以减少反复创建对象带来的开销,这里需要注意,Pool 是用于存放对象的,不建议用来缓存一些有状态的对象(如长连接等)或数据等持久存储对象,因为 Pool 中的内容是会随着 GC 而被回收。 ...

bytes.Buffer 源码分析及应用

0x00 前言 本文分析下 golang 标准库 bytes.Buffer 的实现(本文基于 go1.17 版本的实现分析) 笔者在给 ssh 网关增加终端解析功能中大量使用了 bytes.Buffer 这个结构,bytes.Buffer 是 Golang 标准库 []byte 缓冲区(流式缓冲区),具有读写方法和可变大小的字节存储功能。缓冲区的零值是一个待使用的空缓冲区。可以持续向...

go-redis/cache 库分析与使用

0x00 前言 go-redis/cache 是一个小而精悍的项目,实现了本地缓存配合 redis(远端缓存)的高性能 cache,可借鉴的地方两点(以 V8 版本分析): 缓存CRUD的操作语义(本地 / 远程) singleflight 机制的应用 如果value比较大, 可以考虑启用压缩 如果缓存数据量比较大, 并且对性能有要求的场景, 可以尝试使用msgpack代...

Golang 闭包与递归:介绍与应用场景

Golang closure

0x00 前言 笔者近期项目中,实现了通过 JSON 协议模拟会话目录及文件的树型结构的操作,用到了 Golang 的递归与闭包。闭包是指内层函数引用了外层函数中的变量或称为引用了自由变量的函数,其返回值也是一个函数(方法),先看例子: func outer(x int) func(int) int { return func(y int) int { ...

Golang 并发:如何优雅处理并发 goroutine 中的错误等若干细节

Golang errorgroup 应用(续)

0x00 前言 先看下经典的例子: func main(){   wg := sync.WaitGroup{}   for i:=0; i<10; i++ {      wg.Add(1)      go func() {         defer wg.Done()    }()   }   wg.Wait() } 上面例子中,想要知道某个 goroutine 报什么错...

Singleflight:原理与应用(续)

如何安全且正确的使用 singleflight

0x00 前言 前文 微服务中的缓存(一):Cache 使用与优化 介绍过 singleflight 的应用场景之解决缓存失效时的并发穿透场景。本文就笔者项目中对 Singleflight 机制的实际使用再做一次总结。先回顾下 singleflight 的定义: SingleFlight 是 Go 开发组提供的一个扩展并发原语。它的作用是在处理多个 goroutine 同时调用同一个函数的...

OpenSSH Certificate 与 Golang 的兼容性问题

0x00 前言 前文 OpenSSH Certificate 证书最佳实践 介绍了证书的实践,不过近期笔者在工作中遇到了非常麻烦的兼容性问题,这里摘录几个: x/crypto/ssh: “ssh-rsa-cert-v01@openssh.com” does not work for sshd OpenSSH 7.2-7.7 #58371 x/crypto/ssh: cann...