对于工作的思路梳理

今天开始了第 3 次找工作的第一场面试,想趁此机会梳理一下自己的思路,想想将来的人生怎么过?将来的工作怎么做?

从 2019 年正式进入 IT 行业,到现在已经 4 年了,做了 1 年的前端,做了 3 年的后端和运维。
入行第一年的目标很清晰,就是大量学习各种技术,理解编程思维,以实现早点掌握前端开发,所以这一年中,我花了大量的时间学习 vue 生态的东西,工作对我而言本就是在学习新东西,所以晚上通常到10点之后,周末也经常到公司嫖办公环境。
这一年写了超过 7w 行代码 (ps: 前端代码不能用 10w 行定律),能用 vue + css + js 处理工作中的绝大部分问题。

这一年的后半段,我的想法是:后端东西如此丰富,将来我想做全栈项目,所以一定要去学习后端知识。

于是之后学习了 mysql、nodejs、git、nginx、docker、linux 等知识,也逐步去了解我们的 devops 体系是怎样的,也在云上买了轻量服务器玩,最后能掌握一个基本运行环境的搭建,算是后端领域入了个门。

因为目标比较明确,知道自己要去做后端,于是也杂七杂八学了些 python、java 的基础,不过最后还是被 golang 的简洁所吸引,于是学了一段时间 golang 就转行后端了,就面试了1家公司,2020年10月,进入蓝湖,做 Mastergo 项目。

自此,进入了为期 3 年的后端开发之旅……

入职第一年,大部分时间都是在做 golang 业务开发,因为是一个内部孵化项目,几乎所有基础设施的搭建都是从零开始的。

前半年,主要做了几个功能开发,主要包括 RBAC 服务、异步任务服务,然后开始搭建自动化接口测试项目,之前的 nodejs 经验派上一点用处,自己搭建了一个简单的 web 页面便于其他同学触发接口测试和看报告,写了大约800个用例,虽然写得人很恶心,但这套测试机制在之后一些服务的重构时还是发挥了很大作用。

后半年的时候,公司持续招人,来了好几个大佬,也有人力去做一些项目的重构了,也是由于有 nodejs 的经验吧,于是我负责了消息协同系统的重构工作,把之前的 nodejs 下的 socket.io 变成了 golang 下的 ws,这是一个周期不短的工作,开发加维护了半年左右。

这一年中,主要还是学习后端的各种组件,比如 redis、kafka、mongodb、mysql、postgresql、oss、es 这些,以及学习 golang 生态下的一些常用库和框架,比如 gin、grpc、gorm、goframe、ws 等等这些,这都是工作中实际在使用的。

工作之余,因为之前对 docker 和 k8s 方面也有一些了解,也就借此机会更多学习 docker 和 k8s 的知识。

第一年的大部分时间是在被动学习和主动学习之间度过的,因为不再是一个人,工作日晚上大都会按时回家,周末也大都在家,在家的学习和休息时间对半吧。

入职第二年,接了两个大工程,一个是服务治理优化,一个是全链路性能优化。其实服务治理是全链路性能优化的前提,这个阶段统一了开发框架,是一个基于 gin、grpc 封装的框架,集成了默认的 metrics 体系、tracing 体系、加入了 sentry、统一了 log 库 等等,其中 tracing 的系统是我独立负责的,之后就是逐个服务迁移,虽然过程很坎坷,但最后也算是把可观测性体系建立起来了。

由于我全程参与了几乎每一个子系统的设计和开发,所以另一个大工程比较自然地落到了我头上——全链路性能优化。 这是一个艰难的过程,因为我没有外援,所有业务功能梳理、压测系统搭建、压测项目开发、环境准备 等等都是我自己做。 这个过程中,写了一个 websocket 的压测项目,并且结合 client-go 和 metrics 的方式实现了一个压力端自动扩容的能力,这算是对 k8s 开发的最初接触了。 因为压测分为组件压测 和 全链路压测,也踩了很多的坑,最大的问题集中在 mongodb 和 kafka 上,mongodb 全靠索引,出点问题就可能全线拉崩,kafka 高吞吐不代表低延迟,batch 和 ack 对性能的影响非常大。
这个项目最后的成果还不错,这一轮全链路的优化为后面线上的稳定性提供了排查问题的思路,另外 ws 的 qps 从 3k 提升到了 10k,并且给出了提升到 100k 的方案。

对我而言,在技术栈上,这是一次完全自主做的全体系压测、全体系的系统搭建,在运维能力和对各种中间件的理解和调优上也有了很大的提升。

之所以能独自负责整个项目的部署、调整等等,也是由于之前一直在接手一些运维侧的工作,gitlab、spinnaker、helm、k8s、阿里云各种资源(尤其是网关等) 都在平常的运维中能够熟练掌握。

第三年接了一个超大项目–私有部署。此外,同时还参与了一些序列化方面的开发,那段时间的核心精力几乎都放在了这件事上,也在架构上提出了很多的想法,后面也基于这方面的思考写了两个demo项目: imaginereactive 。但序列化后面的方向因为牵涉面比较大当时没做,在那半年之后由其他同学做了相关改动。 因为工作职责的划分,架构的调整过程没有参与到其中算是我的一个遗憾,上面的两个项目或许以后有时间了会再推进一下吧……

私有部署是我第三年的核心,从项目开发、流程建设、落地实施,到后面各种工具化建设,以及最最花费时间和精力的 —— 问题排查。由于市场战略的方向转变,“用私有部署拿下大客户打造领域标杆”,本身 saas 业务都处于快速迭代的时候,私有部署的推进让 ”问题排查“ 和 ”数据修复“ 成了常态,我也在这个漩涡中挣扎了很久……

这是一个用 ansible + k8s 的方案,开发测试等各个环节都需要非常熟练的 shell 和 k8s 操作和排错能力,也是这个过程中对 linux 、k8s、网络 更加熟练了。

第三年的时候,公司发生过 5 轮裁员,从 400+ 变成了 200+,工作环境很压抑,加上做的事情逐渐变成一些烦琐的部署、排错的工作,加上年终几乎砍没了、调薪也都停止了,逐渐对未来也丧失了信心……

总结一下后端这三年,前一年半的目标很明确,知道自己该把 golang 生态的东西和运维体系的东西理解得更深,于是工作日晚上大都在学习和实践中度过,周末也有比较多的投入到学习中。 后一年半中,虽然也经常在做梳理和一些学习,但比较明显的是: 目标不再明确! 比如学习 k8s ,就不再有那种 ”要能做云原生开发工作“ 之类的目标,因此没有非常系统地、持续地去拆解 k8s 的各个方面,除了自己对零星知识的提升,也没有太多的实践项目。

以己为镜,可以明得失。

痛定思痛,后面的工作中,一定要做好这些事:

  1. 所有的工作和学习都要有明确的目标和产出
  2. 工作的事要在公司完成,回家之后要投入更多的精力在持续积累上
  3. 要写博客,博客要更加系统、更加专业,要面向读者而写

In the sky there are no tracks. Outside there is no recluse. There are no conditioned things that are eternal. There is no instability in the Buddhas.
The Buddha


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!