转眼间到了 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」,在写到这里的时候,我决定改成现在的标题。

实在没想到自己文思泉涌。

新年快乐。

🎉