💻 程序员宣言 📌

The Programmer’s Oath

In order to defend and preserve the honor of the profession of computer programmers (为了捍卫和维护计算机程序员的职业荣誉,我承诺,尽我所能和判断力:)

  1. I will not produce harmful code. (我不会产生有害的代码。)

  2. The code that I produce will always be my best work. I will not knowingly allow code that is defective either in behavior or structure to accumulate. (我制作的代码永远是我最好的作品。我不会故意允许在行为或结构上有缺陷的代码。)

  3. I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should. (每次发布时,我都会生成一个快速、可靠、可重复的证据,证明代码的每个元素都应该正常工作。)

  4. I will make frequent, small, releases so that I do not impede the progress of others. (我将经常发布小版本,这样我就不会妨碍其他人的进展。)

  5. I will fearlessly and relentlessly improve my creations at every opportunity. I will never degrade them. (我会抓住每一个机会,无畏地,不懈地改进我的代码。我永远不会损害它们。)

  6. I will do all that I can to keep the productivity of myself, and others, as high as possible. I will do nothing that decreases that productivity. (我将尽我所能保持自己和他人的生产力。我不会做任何降低生产力的事情。)

  7. I will continuously ensure that others can cover for me, and that I can cover for them. (我将继续确保支持其他人的工作,并且他们也可以支持我的工作。)

  8. I will produce estimates that are honest both in magnitude and precision. I will not make promises without certainty. (我将对幅度和精度做出诚实的估计。我不会作出做不到的诺言。)

  9. I will never stop learning and improving my craft. (我将永远不会停止学习和改进我的手艺。)

go 内存管理的变更

在 Linux 环境中,Go 的版本 1.12 - 1.15 由于使用到 Linux 的 MADV_FREE 特性,对内存进行 ”懒释放“ ,造成了 RSS (Resident Set Size,常驻内存集)虚高,容易出 OOM 的错误。可以采用设置 GODEBUG=madvdontneed=1 来解决。到 1.16 后,又改回了原有的 MADV_DONTNEED 。

参考文章如下:

Goland I/O 的限流与计数

这里的限流指,对于某个 I/O 接口,例如 HTTP handler 的 resp.Body,实现一个方法实现限流,比如限制这个接口的传输速度是 5MB/s 。而计数指,对于某个 I/O 接口,例如 io.Reader,实现一个方式实现对其 Read 方法读取数据速率的实时计算,这样子在实现 http get 的时候就可以实时打印下载速度了。

Read More

k8s debug cli 最初版

一次偶然的机会看到了这篇文章 《简化 Pod 故障诊断: kubectl-debug 介绍》,感觉这个实现挺有意思的,准备自己实现一个。这里借鉴了文章中工具的大体设计思路以及获取容器 ID 的方式,其他的大体都是自己思考和实现的,同时,实现的功能比较粗糙,比如诊断容器写死为 busybox、只能进入 exec -it 风格的交互模式等、数据传输过程未加密、执行加入 Pod 中第一个容器的命名空间、容器运行时只能使用 docker 不兼容 containerd 等。

Read More

kubebuilder 构建 deployment + service

参(抄)考(袭) [https://github.com/cnych/opdemo]

目前我对于 CRD 以及自定义 Operator 的理解是,利用 Kubernetes 已有的资源,例如 Deployment、Service、Pods 通过组合构建出更加复杂的应用。就像是这个 appservice-operator 一样,利用 Deployment + Service 构建出了一个 AppService 资源,这样在部署的时候不用分别部署 Deployment 和 Service,而是直接部署 AppService 即可。下面简述一下 AppService Operator 构建的过程。

代码仓库 https://github.com/schwarzeni/kubebuilder-appservice

Read More