对于工作的思路梳理
今天开始了第 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项目: imagine 、reactive 。但序列化后面的方向因为牵涉面比较大当时没做,在那半年之后由其他同学做了相关改动。 因为工作职责的划分,架构的调整过程没有参与到其中算是我的一个遗憾,上面的两个项目或许以后有时间了会再推进一下吧……
私有部署是我第三年的核心,从项目开发、流程建设、落地实施,到后面各种工具化建设,以及最最花费时间和精力的 —— 问题排查。由于市场战略的方向转变,“用私有部署拿下大客户打造领域标杆”,本身 saas 业务都处于快速迭代的时候,私有部署的推进让 ”问题排查“ 和 ”数据修复“ 成了常态,我也在这个漩涡中挣扎了很久……
这是一个用 ansible + k8s 的方案,开发测试等各个环节都需要非常熟练的 shell 和 k8s 操作和排错能力,也是这个过程中对 linux 、k8s、网络 更加熟练了。
第三年的时候,公司发生过 5 轮裁员,从 400+ 变成了 200+,工作环境很压抑,加上做的事情逐渐变成一些烦琐的部署、排错的工作,加上年终几乎砍没了、调薪也都停止了,逐渐对未来也丧失了信心……
总结一下后端这三年,前一年半的目标很明确,知道自己该把 golang 生态的东西和运维体系的东西理解得更深,于是工作日晚上大都在学习和实践中度过,周末也有比较多的投入到学习中。 后一年半中,虽然也经常在做梳理和一些学习,但比较明显的是: 目标不再明确! 比如学习 k8s ,就不再有那种 ”要能做云原生开发工作“ 之类的目标,因此没有非常系统地、持续地去拆解 k8s 的各个方面,除了自己对零星知识的提升,也没有太多的实践项目。
以己为镜,可以明得失。
痛定思痛,后面的工作中,一定要做好这些事:
- 所有的工作和学习都要有明确的目标和产出
- 工作的事要在公司完成,回家之后要投入更多的精力在持续积累上
- 要写博客,博客要更加系统、更加专业,要面向读者而写
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 协议 ,转载请注明出处!