Icebound

icebound-area

工作三个月的反思

最近一段时间同事离职了好几个,工作非常的忙,陪女朋友的时间少了,更不要提更博客,写技术文档了。下周要去上海出差,在订票之余扫了一眼b站,突然发现了n多个私信,都是19级学弟学妹看到我的串讲视频前来感谢的。一时间心里非常激荡,就借着这股劲,写写我工作3个月以来的感受吧。

做fancy的事,用最粗暴的方式

上学的时候,我们都喜欢在作业、考试的时候用一些非常fancy甚至tricky的方法去解决一些问题,我自己的毕设就是一个典型的例子。为了做一个边缘计算+联邦学习平台,强行用文件锁+本地缓存+mqtt协议把KubeEdge包了一层,一开始感觉还不错,复杂度低,结构也比较清晰,后面才发现这种做法简直就是有病。状态保存方面完全可以用k8s自带的一些feature,调度方面更是毫无建树,文件锁简直是sb操作。另一个例子是小学期大作业(电商网站),为了前后端分离,用jquery撸了一个前端渲染的东西出来,但是没有关注Restful的核心,最后api还是带状态的,实际上前后端一点也没分开,得分也不高。这两件事我最近才开始反思,我发现我大学四年基本上就是用看上去fancy的方法去做了最粗暴的事。

工作之后到手的第一个大型任务是设计一个文件上传client,需要具备自动读盘、分析、meta提取和文件上传功能,要求单机打满5Gbit带宽。显而易见,这个系统应该是一个典型的queue-worker模式。为了实现上传任务的优先级还有抢占式调度,我在queue上下了各种功夫,又是优先队列又是各种权重的。最后老板看完方案,先把我的queue给否了。老板问:请问你任务数量是什么量级的。 我回答:几百到几千。话还没说完,我幡然醒悟:这个量级直接暴力即可。遂把queue改成了个list,实现简单效果好。这就是所谓的用粗暴的方式做fancy的事吧。

你的时间很值钱,不要去换别人的时间

众所周知,基础架构部门会有一堆oncall。刚上班的时候,总喜欢去解决各种oncall,从pip装不上这点小事车上系统节点延迟都想去管管,看到我帮到了别人就感觉非常开心。但是时间长了,我发现我每天有一半的时间都在帮别人解决各种有的没的,反而自己的本职工作没有做好,在这些琐事中也没有成长。

我老板关注到我这个情况,专门找我聊了半天。他说的有一句话我感觉非常对:你的时间非常值钱,比别人的时间都值钱。所以,你不能用你的时间去换他们的时间,而是应该用你的技术去帮别人提升效率,节约时间。这句话我听完之后印象十分深刻,回去之后立刻就对常见问题做了总结,写了篇文档,挂在内部聊天软件的签名上。在有了文档后,找我的人少了90%,我自己也有更多时间做别的事了,别人的事情似乎通过文档也能完美解决了。

不一定万无一失,但要面面俱到

8月的时候,一位离职的同事把我们基础架构部门的一个核心业务交给了我。刚拿到手的时候,我就隐隐感觉这个业务不太稳定,后面很有可能崩掉。因为这个系统分布在每个地区的节点都只有单机,而且没有灾备。所以在我刚拿到这个业务的时候,我就联系运维,在每个地区准备了两台灾备机器,并且做好了更换机器的预案。

果不其然,9月上旬,上海的机器在一次宕机后直接开不了机了。当时我暗暗佩服自己,多亏自己搞了台灾备。然后我就远程找人把灾备换上。这个过程也非常曲折,因为部署流程十分麻烦,换机器花了一上午时间,因此整个上午的服务处于不可用状态。换上灾备之后,仅仅好了两个小时,就有人反馈机器出现了奇奇怪怪的问题,完全不能正常使用。我当时一惊,不过还好我有灾备的灾备。又花了一下午把灾备的灾备换上后,发现情况只是好了一点,问题仍然存在。于是我又花了一整周的时间定位问题,尝试修复。最后发现是硬件和linux内核问题,到现在也没有完全修复,而是用其他曲折的办法解决了。

这个“灾备的灾备”出问题的故事在部门内闹出了很大的笑话。究其根本,是因为我没有在一开始就对整个灾备系统做完成的测试,也没有制定详细的启用流程。这说明我只是想到了一部分,而没有做到面面俱到。有时候万无一失是很难的,再严密的软件也会有bug。但是,在做设计、开发时,把测试做足,把各种case都cover一遍还是能做到的。因此,想要成为一个合格的工程师,不一定做到万无一失,但是一定要想办法做到面面俱到。

先写这么多吧,其实本来还打算写一些我对其他人的评价,和从其他人身上学习到的东西。但是,思考了一下,我工作时间还太短,很多事情看不透也看不清,更不应该品评他人,肆意妄言。希望以后能学到更多东西吧!