转眼间到了 2019 年末,还记得去年也写过一篇类似的 博客;计划今年的「年终总结」蛮久了,只是觉得时间还早便一直没有动手,直到今天才恍然 —— 已经是 2019 年最后一天了。
2019 年的目标 —— 半达成
若是概括去年定下的目标:
- 技术方面:继续深入后端领域 —— 达成。
- 额外技能:提升英语水平 —— 半达成,虽然有所提高(至少跟老外发邮件、聊 Slack 不怯场),但还是没有达到「质的飞跃」。
- 生活方面:***,以及锻炼厨艺 —— 达成!
- 其它:身体健康 —— 半达成,腰疼腿麻更严重了…
讲真,作为一个程序员,我强烈建议在代码之外培养起其它的爱好,甚至是技能。当然我并不反对在职业领域深究(相反,下文会提到哪个方面「浪费」了我一整年的技术向业余精力😂),只不过今年对于代码以外的世界有了许多新的认识,它们真的会给我带来 不一样的 幸福感和成就感,这是钻研技术所体验不到的。
2019 年我干了啥
我用一些脚本把今年所有的 Git Commits 全部导出成 CSV,然后再使用 Office 365 Excel 分析,发现了一些有趣的结果。
年度报告(仅作娱乐)
- 2019 年我一共提交了 1991 次,其中公司仓库 1024 次,个人(包括私有和开源)仓库 967 次。
- 在公司仓库的提交中,有 851 次是在工作时间,约占 83%;相反,个人仓库有 798 次提交是在下班后或休息日,约占 83%,完美的配比。
- 让我没想到的是,一天 24 小时,各个小时我都曾有过提交(仅个人仓库):
- 6 月 24 号我似乎睡得很早,最后一次提交在 21:17,接着 25 号的第一次提交出现在 5:23。
- 出现在 凌晨 4 点 的只有两次提交,来源于 2 月 13 号尝试 Rust 写的一个 Demo 项目,然而后来还是暂停了 Rust 学习计划。
- 出现在 凌晨 3 点 的也只有两次提交,来源于私人备份仓库,看起来似乎我在 6 月 26 号半夜备份了一下电脑。
- 排除以上结果,我熬夜肝到最晚的一次是 5 月 18 日 2:44 改进 kexue-gateway。
- 在 1 ~ 2 点我曾提交过 42 次;科学上网相关 24 次,博客 10 次,Kubernetes 相关 7 次。
- 晚上效率最高的时间是 21 ~ 22 点,因为 18 点钟总提交 27 次,19 点 60 次,20 点 99 次,21 点 138 次,10 点 148 次,11 点 70 次,12 点只剩 52 次了。
工作时间线
- 1、2 月份我还在与 GitLab CI、Ansible、Cloud-init 奋战,主要精力集中在部署 Prometheus、Grafana 等监控、预警项目上。
- 3 月开始深入学习 Terraform。
- 4 月又折腾监控,顺便深入研究了 Laravel 队列并应用到线上。
- 5 月使用 Golang 开发定时任务失败告警,同时将原本人工维护的 Cronitor 配置迁移到 Terraform,多亏了我司同事开发的 terraform-provider-cronitor。
- 转折点:5 月底终于开始真正接触 Kubernetes!
- 6 月完整地梳理了公司网络拓扑,部署了新的 UniFi 全家桶和一台巨沉的机柜,并搭建了一套备用的网关。
- 6 月底我们又把黑盒探针监控 StatusCake 配置迁移到了 Terraform。
- 7 月大批量迁移 Kubernetes,依稀记得那时候狂删 Cloud-init 机器配置的酸爽。
- 7 月下旬到 8 月上旬,接近一整月的时间我都停留在「被 PHPStan 坑(其实是被遗传代码)」->「从坑里爬出来」->「再踩新坑」的循环中;给几十个私有包加 PHPStan 还要修复报错,真是体力活。
- 8 月剩余的时间直到 10 月底,可谓是小宇宙爆发,利用 Helm 和 Helmfile 部署了不少应用到 Kubernetes,终于称得上入门了;还顺便调研了 Helm Secrets 配合 Sops 的 Git 仓库内密钥管理方案,最终实施上线并且一直用到现在。
- 转折点:10 月底开始接手 IT 相关工作,不仅需要维护公司员工权限(例如 Azure AD、Office 365、Atlassian 等),还包括处理来自美国办公室的 IT Tickets 以及 Onboarding Request。
- 11 月重新梳理了年久失修的公司 VPN 接入点,其它大部分时间都用在了研究 Salesforce、使用 TypeScript 开发自动化工具,将 DiscoveryData 的 Sales leads 导入到 Salesforce,以供美国 Sales Team 使用。
- 12 月几乎一直在处理各种各样的 IT Tickets,美国那边的招人速度实在太快了。另外,使用 Golang 开发了 PHP-CS-Fixer 规则自动更新机器人,保证数十个扩展包的代码风格一致;以及彻底废弃了不稳定的 StatusCake,转投 Pingdom。
可以看出,整整一年下来接触的跨度非常广,从年初的 Ansible、Terraform 到后来 Kubernetes,再到年末的 IT、Office 365 等,今年实在是学到太多之前没有机会尝试,甚至是完全没有听说过的知识。虽然其中也有疲倦和劳累,但特别感谢 RightCapital,在我司工作真的非常幸福。
仔细想想,我所在的 DevOps Team 更像是基础架构部 —— 平时不仅涉及到前后端、应用部署、网络部署、运维保障、权限管理,还需要跨时区跟 Support Team、Sales Team 沟通,任务艰巨呀😁。
个人成长时间线
相比之下,通过个人仓库分析出的时间线就简单多了,同一段时间内我基本都会围绕在同一主题深挖。
- 1、2 月一直在整理和编写博客,包括优化 CI、调整页面布局等。
- 2 月底开始「Laravel 部署课程」系列,可惜不久后便放弃。
- 放弃的原因之一就是 浪费掉我今年几乎所有业余时间的大坑 —— 科学上网。由于市面上的路由器性能都很差(相信没有厂家生产路由器的时候考虑到这类用途),而那些玩软路由的方案几乎都是靠刷第三方 OpenWrt 等固件,配合第三方插件实现,且不说我曾经玩过的改版梅林稳定性有多差,单凭各种插件良莠不齐的代码质量我就受不了了。另外,遇到问题不方便调试和修复也是我放弃的主要原因。
- 一不做二不休,4 月 8 号,Kexue Gateway 的前身诞生了,就这样开启了漫漫长征路。记得那时候还在用 Nano Pi、树莓派之类的 ARM 产品,性能和兼容性惨不忍睹。
- 5 月 8 号,我决定编排一套适用于任何路由器(在局域网内加入一个不带 DHCP 功能的额外网关),且尽可能规范、原生、可靠的开源解决方案,也就是现在的 Kexue Gateway 项目。此后直到 7 月底,我大部分的时间都铺在了这个项目上,不断地完善和改进。
- 6 月 11 号,没错,我对各路机场也忍无可忍了。因为六月初国内对于这类服务的管制太严格,导致稳定性大不如从前;另外整个圈子是非太多,除了经常有机场跑路之外,讨论和评测的戾气也都很重。实在不想淌这浑水,于是我买了第一台服务器,并开了一个名叫 Kexue Servers 的私有仓库,用来编排自己的服务。当然,我不愿成为自己讨厌的人,所以一律不销售也不分享。
- 8 月份,和工作时间线一致,对 Kubernetes 和 Terraform 的热爱爆发了。我用 Google Cloud Platform 剩余的赠金开了 GKE 集群,顺便购买了几个额外的域名,利用 Terraform 管理解析记录;凡是能迁移的服务,统统、一律搬上 Kubernetes,包括你现在看到的 博客(虽然它现在已经被我临时迁移回虚拟机)、内网穿透 inlets、Webhook 调试工具 Webhook.site、文件管理器 KodExplorer 等等;管它有没有用,先部署再说。
- 年底之前一直在研究代理协议,没有接触过 VPN 相关的技术。想着能够比四层更加深入,11 月 10 号,我开始尝试能够承载 IP 协议、甚至二层协议的 VPN。面对 IPSec、WireGuard,那就不得不了解 Linux 路由机制,直到现在,我还一直在学习 Routing Table,BIRD 等相关知识。
- 12 月底,也就是前几天,我又把博客重新整理了一下;简化掉不少无用的动画和样式,让读者和我的专注点更贴近内容。很巧的是,去年的这个时候我也在优化博客。
其实我是个很懒的人,十分庆幸当时忍受不了的时候,选择了自己动手做。我没有 CCIE、JNCIE 之类的证书,完全是野路子出身,但是经过不断的学习和尝试,最终掌握了不少「正规」的网络知识。希望未来自己能够保持这样对未知领域发起挑战的勇气吧。
2019 总结
结合工作和个人成长时间线,我基本得出今年的时间分配占比:
科学上网 4.5 : Kubernetes 2.5 : IT/英语 1.5 : Terraform/Prometheus 1 : PHP 0.5
稍微出乎我的预料,科学上网所占的比例太高了,年初的预期应该是:
科学上网 2 : Kubernetes 4 : 英语 2 : Terraform/Prometheus 1.5 : PHP 0.5
2020 展望
根据我自己的职业规划以及实际情况,接下来一年的目标与现有方向类似:
- 保证身体健康。
- 快速将科学上网相关内容收尾,进入维护阶段,不再占用大量时间继续开发(其实 11 月就有这个想法,希望年底能够将这方面完全结束,只可惜距离我理想的水准还差点火候)。
- 深入学习 Kubernetes,包括目前暂时不熟悉的:
- Taint、Tolerations、Node Affinity、Autoscaler、Resource Request 等特性,
- HorizontalPodAutoscaler、PodSecurityPolicy、NetworkPolicy、LimitRange 等资源,
- 以及争取能对 CRI/CSI/CNI、Scheduler 等 Kubernetes 内部原理有一定了解。
- 继续锻炼英语,包括:
- 尽可能多参与邮件和 Slack 讨论,
- 坚持用英文编写技术向博文,
- 以及争取练习几次 italki。
- 深入学习 Prometheus,掌握:
- PromQL 进阶语法,
- 通过 Prometheus Operator 和 Custom Metrics 对 Kubernetes 集群监控,
- 以及提升 Golang 编码水平,争取写一个 Prometheus Exporter 并开源。
理想占比:
Kubernetes 4 : 英语 2 : Golang 1.5 : Prometheus 1 : 科学上网 1 : 其它 0.5
明年的目标相比今年详细了不少,任重而道远呀。
最后
其实这篇博文最早的标题是「你好,2020」,在写到这里的时候,我决定改成现在的标题。
实在没想到自己文思泉涌。
新年快乐。
🎉